Apache flink Flink的简单hello world示例
我正在寻找使用ApacheFlink进行hello world体验的最简单示例 假设我刚刚在一个干净的盒子上安装了flink,我需要做什么才能“让它有所作为”。我意识到这是相当模糊的,这里有一些例子 终端上的三个python示例:Apache flink Flink的简单hello world示例,apache-flink,Apache Flink,我正在寻找使用ApacheFlink进行hello world体验的最简单示例 假设我刚刚在一个干净的盒子上安装了flink,我需要做什么才能“让它有所作为”。我意识到这是相当模糊的,这里有一些例子 终端上的三个python示例: python -c "print('hello world')" python hello_world.py python python -c "print(1+1)" 当然,流媒体应用程序有点复杂,但这里有一些类似于我之前为
python -c "print('hello world')"
python hello_world.py
python python -c "print(1+1)"
当然,流媒体应用程序有点复杂,但这里有一些类似于我之前为spark streaming所做的事情:
如您所见,这些示例具有一些很好的特性:
到目前为止,我发现有50行代码需要编译 如果由于第3点的原因无法避免这种情况,那么满足第1点和第2点并使用(仅)默认情况下提供的罐子或从信誉良好的来源容易获得的罐子也可以。好的,这样如何:
public static void main(String[] args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.fromElements(1, 2, 3, 4, 5)
.map(i -> 2 * i)
.print();
env.execute();
}
在大多数大数据和相关框架中,我们以Hello World为例给出了单词计数程序。下面是Flink中单词计数的代码:
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromCollection(Arrays.asList("This is line one. This is my line number 2. Third line is here".split(". ")));
DataSet<Tuple2<String, Integer>> wordCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> out) throws Exception {
for (String word : line.split(" ")) {
out.collect(new Tuple2<>(word, 1));
}
}
})
.groupBy(0)
.sum(1);
wordCounts.print();
final ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment();
DataSet text=env.fromCollection(Arrays.asList(“这是第一行,这是我的第二行,第三行在这里”).split(“.”);
数据集字数=文本
.flatMap(新的flatMap函数(){
@凌驾
公共void flatMap(字符串行、收集器输出)引发异常{
for(字符串字:line.split(“”){
out.collect(新的Tuple2(word,1));
}
}
})
.groupBy(0)
.总数(1);
wordCounts.print();
读取文件
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//The path of the file, as a URI
//(e.g., "file:///some/local/file" or "hdfs://host:port/file/path").
DataSet<String> text = env.readTextFile("/path/to/file");
DataSet<Tuple2<String, Integer>> wordCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> out) throws Exception {
for (String word : line.split(" ")) {
out.collect(new Tuple2<String, Integer>(word, 1));
}
}
})
.groupBy(0)
.sum(1);
wordCounts.print();
final ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment();
环境(一);
//文件的路径,作为URI
//(例如,”file:///some/local/file“或”hdfs://host:port/file/path").
DataSet text=env.readTextFile(“/path/to/file”);
数据集字数=文本
.flatMap(新的flatMap函数(){
@凌驾
公共void flatMap(字符串行、收集器输出)引发异常{
for(字符串字:line.split(“”){
out.collect(新的Tuple2(word,1));
}
}
})
.groupBy(0)
.总数(1);
wordCounts.print();
不要使用try-catch处理在wordCounts.print()上引发的异常,而是将throw添加到方法签名
将以下依赖项添加到pom.xml
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.8.0</version>
</dependency>
org.apache.flink
Flink流媒体文档和示例:使用标准资源的最小步骤
我不确定这是否是最终的答案,但我发现flink通常会附带一些示例,这些示例允许以最小的努力进行一些简单的交互
下面是一个可能的hello world示例,其中包含flink 1.9.1附带的基于默认字数的标准资源:
确保flink群集已启动,并且flink目录中有三个终端处于打开状态
在终端1中,打开与右端口的连接
nc-L9000
在下一行的同一终端中,键入一些文本并按enter键
Hello World
在终端2中,启动标准字数逻辑
/bin/flink运行示例/streaming/SocketWindowWordCount.jar——端口9000
在端子3中,检查计数结果
tail-f log/flink-*-taskexecutor-*.out
您现在应该看到:
Hello : 1
World : 1
就是这样,从这里您可以在terminal 1中键入更多内容,当您再次检查日志时,您将看到更新的字数
如果您之前已经这样做过一次,并且希望重新开始,那么可以使用rm log/flink-*-taskexecutor-*.out来清除日志(假设是沙箱环境)。为什么要进行否决,是否不清楚?--一个hello world的例子肯定足够相关了?!如果出现问题,请重新措辞标题。经典字数有什么问题?@MIkCode可能是对的,与读取文件或从Seq创建数据流相关的经典字数应该是最简单的。@MIkCode不确定经典是什么,但我发现的最后两件事是需要编译的50-125行代码。我明白这可能是正确理解的必要条件,但我正在寻找一种解决方法。例如,使用标准材料?将在我接受(并检查)之前给其他人一个回答的机会,但这已经得到了支持,因为这比我目前所能找到的任何东西都更符合事物的精神:-)很好,很短,但是对于流媒体,我理想地从外部世界获得字符串(终端、文件)。从“外部”获取字符串是否容易?为了让上面的工作正常进行,我必须做三个额外的更改(1)Addorg.apache.log4j.BasicConfigurator.configure()
作为上述程序(2)的第1行,添加groupId>log4jlog4j1.2.17
,最后添加另一个依赖项(3)org.apache.flinkflink-clients#2.121.8.0