1、flink-1.7.1
编辑start-cluster.bat
set "JAVA_HOME=C:\tools\JDK8"
set "path=%JAVA_HOME%\bin;%PATH%";
set "CLASSPATH=%JAVA_HOME%\lib";
2、创建flink项目
打开cmd黑屏
md project
cd project
mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=1.7.0
package cn.zsj;
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.io.TextInputFormat;
import org.apache.flink.core.fs.Path;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.FileProcessingMode;
public class FileStreamingJob {
public static void main(String[] args) throws Exception {
Path pa=new Path("C:\\tools\\flink-1.7.1\\project\\1.txt");
TextInputFormat format = new TextInputFormat(pa);
BasicTypeInfo typeInfo = BasicTypeInfo.STRING_TYPE_INFO;
format.setCharsetName("UTF-8");
StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
/*
方法内有三个属性,
分别是WatchType.ONLY_NEW_FILES:处理整个文件,
PROCESS_ONLY_APPENDED只处理相应的增加部分,
REPROCESS_WITH_APPENDED :当文件内容增加了之后会重新处理整个文件。
在新的flink版本里面,
只有两种模式了:PROCESS_ONCE以及PROCESS_CONTINUOUSLY.分别对应处理一次以及增量处理。
*/
DataStream
FileProcessingMode.PROCESS_CONTINUOUSLY,
1L,(TypeInformation)typeInfo);
st.print();
env.execute();
}
}
3、构建项目
mvn clean package
4、打开http://localhost:8081
提交jar包到平台,并运行
5、编辑C:\\tools\\flink-1.7.1\\project\\1.txt,黑屏打印如下:
sssfs
safasdf
werwrwr
sfdsdf
a
sd
asd
-----------------分割线----------------------
代码升级,实现计数功能
package cn.zsj;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.io.TextInputFormat;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.core.fs.Path;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.FileProcessingMode;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class FileStreamingJob {
public static void main(String[] args) throws Exception {
Path pa = new Path("C:\\tools\\flink-1.7.1\\project\\1.txt");
TextInputFormat format = new TextInputFormat(pa);
BasicTypeInfo typeInfo = BasicTypeInfo.STRING_TYPE_INFO;
format.setCharsetName("UTF-8");
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
/*
* 方法内有三个属性, 分别是WatchType.ONLY_NEW_FILES:处理整个文件,
* PROCESS_ONLY_APPENDED只处理相应的增加部分, REPROCESS_WITH_APPENDED
* :当文件内容增加了之后会重新处理整个文件。 在新的flink版本里面,
* 只有两种模式了:PROCESS_ONCE以及PROCESS_CONTINUOUSLY.分别对应处理一次以及增量处理。
* “Filter”就类似于过滤。 “keyBy”就等效于SQL里的group by。
* “aggregate”是一个聚合操作,如计数、求和、求平均等。 “reduce”就类似于MapReduce里的reduce。
* “join”操作就有点类似于我们数据库里面的join。 “connect”实现把两个流连成一个流。
* “repartition”是一个重新分区操作(还没研究)。 “project”操作就类似于SQL里面的snacks(还没研究)。
*/
DataStream
FileProcessingMode.PROCESS_CONTINUOUSLY, 1L, (TypeInformation) typeInfo).flatMap(new Splitter())
.keyBy(0).sum(1);
st.print();
env.execute();
}
}
class Splitter implements FlatMapFunction
private static final long serialVersionUID = 1L;
@Override
public void flatMap(String sentence, Collector
for (String word : sentence.split(" ")) {
System.out.println("wwww:" + word);
out.collect(new Tuple2
}
}
}
在1.txt输入一下内容:
1231 嗯嗯 人人 eee fff
asdfa asdfa
黑屏打印如下:
wwww:1231
wwww:嗯嗯
wwww:人人
wwww:eee
wwww:fff
wwww:asdfa
wwww:asdfa
(1231,4)
(嗯嗯,4)
(人人,4)
(eee,4)
(fff,3)
(asdfa,2)
(asdfa,3)