一、Flink部署
1.集群角色:hadoop102:JobManager; hadoop103:TaskManager; hadoop104:TaskManager
2.集群启动
$ bin/start-cluster.sh
3.查看flink状态:jps
4.停止集群
$ bin/stop-cluster.sh
5.测试端口可用
nc -lk 7777
6.命令行执行
./bin/flink run -m hadoop102:8081 -c 类路径 -p 并行度 执行的jar包
7.命令行取消任务
./bin/flink cancel 作业ID
8.部署模式:会话模式、单作业模式、应用模式
9.Yarn部署
(1)配置环境变量
$ sudo vim /etc/profile.d/my_env.sh
HADOOP_HOME=/opt/module/hadoop-2.7.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin43
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath
(2)关闭flink集群,启动hadoop集群
(3)执行脚本命令向 YARN 集群申请资源,开启一个 YARN 会话,启动 Flink 集群。
$ bin/yarn-session.sh -nm test
可用参数解读:
⚫ -d:分离模式,如果你不想让 Flink YARN 客户端一直前台运行,可以使用这个参数,44
即使关掉当前对话窗口, YARN session 也可以后台运行。
⚫ -jm(--jobManagerMemory):配置 JobManager 所需内存,默认单位 MB。
⚫ -nm(--name):配置在 YARN UI 界面上显示的任务名。
⚫ -qu(--queue):指定 YARN 队列名。
⚫ -tm(--taskManager):配置每个 TaskManager 所使用内存。
(4)提交作业:
执行以下命令将该任务提交到已经开启的 Yarn-Session 中运行。
$ bin/flink run -c com.atguigu.wc.StreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar
(5)单作业模式
提交作业
$ bin/flink run -d -t yarn-per-job -c com.atguigu.wc.StreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar
查看和取消作业
$ ./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
$ ./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY<jobId>
(6)应用模式
提交作业
$ bin/flink run-application -t yarn-application -c com.atguigu.wc.StreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar
查看和取消作业
$ ./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
$ ./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>
二、DataStream API
1.启动kafka:
./bin/zookeeper-server-start.sh -daemon ./config/zookeeper.properties
./bin/kafka-server-start.sh -daemon ./config/server.properties
2.从kafka中读取数据:
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "hadoop102:9092");
DataStreamSource<String> kafkaStream = env.addSource(new FlinkKafkaConsumer<String>("clicks", new SimpleStringSchema(), properties))
3.用flink进行转换处理
SingleOutputStreamOperator<String> result = kafkaStream.map(new MapFunction<String,String>(){
@Override
public String map(String value) throws Exception {
String[] fileds = value.split(",");
return new Event(fileds[0].trim(),fileds[1].trim(),Long.valueOf(fileds[2].trim())).toString();
}
});
4.结果数据写入kafka:
result.addSink(new FlinkKafkaProducer<String>("hadoop102:9092","events",new SimpleStringSchema()));
5.在hadoop102上开两个终端
(1)一个作为生产者:
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic clicks
(2)一个作为消费者:
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic events