一、Flink批处理
-
先把hello.txt文件上传到hdfs文件中
hello world hello world hello world hello world hello world hello world hello me hello you
hdfs dfs -put /root/hello.txt /
-
java批处理代码实现
package com.strivelearn.flink; import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.operators.AggregateOperator; import org.apache.flink.api.java.operators.DataSource; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.util.Collector; /** * @author strivelearn * @version BatchWordCountJava.java, 2023年01月14日 */ public class BatchWordCountJava { public static void main(String[] args) throws Exception { // 获取执行环境 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); String inputPath = "hdfs://192.168.234.100:9000/hello.txt"; String outPath = "hdfs://192.168.234.100:9000/out2"; // 读取文件中的数据 DataSource<String> text = env.readTextFile(inputPath); AggregateOperator<Tuple2<String, Integer>> wordCount = text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception { String[] words = s.split(" "); for (String word : words) { collector.collect(new Tuple2<>(word, 1)); } } }).groupBy(0).sum(1).setParallelism(1); // 将结果数据保存到文件中 wordCount.writeAsCsv(outPath, "\n", " "); env.execute("BatchWordCountJava"); } }
此时我们上面的代码还需要引入hadoop-client
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-reload4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
执行完毕后,在hdfs可以看到out文件
查看Flink的计算结果内容:
hdfs dfs -cat /out2
1.1、批处理与流处理的区别
- Streaming:StreamExecutionEnvironment+DataSteam
- Batch:ExecutionEnvironment+DataSet
二、Flink ON YARN安装
- Flink ON YARN模式依赖Hadoop 2.4.1及以上版本
- Flink ON YARN支持两种使用方式
第一步:yarn-session.sh创建Flink集群
第二步:flink run 提交任务
下载archive.apache.org/dist/flink/…
-
上传到虚拟机
-
解压
tar -zxvf flink-1.16.0-bin-scala_2.12.tgz
-
设置hadoop的环境变量
vi etc/profile
export HADOOP_HOME=/root/software/hadoop-3.3.4 export HADOOP_CLASSPATH=
${HADOOP_HOME}/bin/hadoop classpath
-
生效环境变量配置
source /etc/profile
-
进入flink目录
bin/yarn-session.sh -jm 1024m -tm 1024m -d
-jm 是主节点内存
-tm 是从节点内存
-d 是后台进行运行
或者在Yarn也可以查看 http://192.168.234.100:8088/cluster
运行测试的case
bin/flink run ./examples/batch/WordCount.jar
启动的时候会找这个配置文件
more /tmp/.yarn-properties-root
与这边的id是一致
永久停止存在的Flink集群
相当于就是把yarn的进程kill掉
yarn application -kill application_1673181686068_0001
三、yarn-session命令分析
用法 | 说明 |
---|---|
-D | 动态属性 |
-d, --detached | 放到后台,独立运行 |
-j,--jar | 指定Flink任务的jar包 |
-jm,--jobManagerMemory | JobManager的内存 [im MB] |
-nm,--name | 在Yarn上为一个自定义的应用设置一个名字 |
-q,--query | 显示yarn中可用的资源(内存,cpu核数) |
-qu,--queue | 指定Yarn队列 |
-s,--slots | 每个TaskMananager使用的slots数量 |
-tm, --taskManagerMemory | 每个TaskManager的内存 [in MB] |
四、Flink ON Yarn的第二种方式
flink run -m yarn-cluster 创建flink集群+提交任务
eg:
flink run -m yarn-cluster -yjm 1024 -ytm 1024 ./examples/batch/WordCount.jar
4.1、Flink run命令分析
- -c,--class 动态指定jar包入口类
- -m,--jobmanager host:port 动态指定jobmanager(主节点)地址
- -p,--parallelism 动态指定程序的并行度,可以覆盖配置文件中的默认值
默认查找本机 /tmp/.yarn-properties0-root中的节点信息
bin/flink run ./examples/batch/WordCount.jar
连接指定host和port的jobmanager:
bin/flink run -m bigdata01:1234 ./examples/batch/WordCount.jar
启动一个新的yarn-session
bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar
五、Flink ON YARN的好处
- 提高大数据集群机器的利用率
- 一套集群,可以执行MR任务,Spark任务,Flink任务等