日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
flink下载
https://archive.apache.org/dist/flink/
flink-flink版本号-bin-scala_版本号.tgz:只能在flink集群执行
flink-flink版本号-bin-hadoop版本号-scala_版本号.tgz:可以打包flink的jar程序到yarn执行
1.安装 flink
tar zxvf flink-1.10.1-bin-scala_2.11.tgz -C /root/
mv flink-1.10.1 flink
2.vim /root/flink/conf/flink-conf.yaml
3.vim /root/flink/conf/masters
把 localhost:8081 改成 node1:8081
4.vim /root/flink/conf/slaves
把 localhost 改成 node2 和 node3
5.配置Hadoop相关的 环境变量
1.编辑环境变量的profile配置文件: vim /etc/profile
2.profile配置文件末尾添加如下配置信息:
JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
HADOOP_HOME=/root/hadoop
FLNK_HOME=/root/flink
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$FLINK_HOME/bin
export JAVA_HOME CLASSPATH PATH
3.保存配置文件,重新加载配置文件:source /etc/profile
6.把 /root目录下的 hadoop文件夹 推送给第二台、第三台linux:
scp -r /root/flink root@node2:/root
scp -r /root/flink root@node3:/root
把 /etc目录下的 profile文件 推送给第二台、第三台linux的/etc目录下:
scp -r /etc/profile root@node2:/etc 重新加载配置文件:source /etc/profile
scp -r /etc/profile root@node3:/etc 重新加载配置文件:source /etc/profile
7.启动、停止 flink集群
cd /root/flink/bin
./start-cluster.sh
./stop-cluster.sh
jpsall
8.http://node1:8081 可以对 flink 集群和任务进行监控管理
<build>
<plugins>
<!-- 该插件用于将Scala代码编译成class文件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.6</version>
<executions>
<execution>
<!-- 声明绑定到maven的compile阶段 -->
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行flink程序前准备数据:flink程序所读取的本地文件必须放到每台taskmanage机器和jobmanage机器中。
执行命令:
参数:-m 集群模式 -c 入口类 -p 并行度 jar包 --传入参数名 传入参数值
1.(standalone模式)不带依赖包只有编译好的class代码(142KB):/root/flink/bin/flink run -c com.atguigu.wc.WordCount -p 2 FlinkTutorial-1.0-SNAPSHOT.jar
2.(standalone模式)带依赖包和编译好的class代码(103MB):/root/flink/bin/flink run -c com.atguigu.wc.WordCount -p 2 FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar
3.(yarn模式)yarn集群执行flink:
1.启动hadoop 集群
2.启动hadoop 集群:/root/flink/bin/yarn-session.sh
./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
参数解释::
-n(--container):TaskManager 的数量。
-s(--slots):每个 TaskManager 的 slot 数量,默认一个 slot 一个 core,默认每个 taskmanager 的 slot 的个数为 1,
有时可以多一些 taskmanager,做冗余。
-jm:JobManager 的内存(单位 MB)。
-tm:每个 taskmanager 的内存(单位 MB)。
-nm:yarn 的 appName(现在 yarn 的 ui 上的名字)。
-d:后台执行。
3.不带依赖包只有编译好的class代码(142KB)
/root/flink/bin/flink run -m yarn-cluster -c com.atguigu.wc.WordCount FlinkTutorial-1.0-SNAPSHOT.jar
报错解决:
1.实际任务会被分发到 taskmanage 的机器中,计算结果根据会保存到 taskmanage 的机器下,不会在 jobmanage 的机器下。
因此需要把所读取的本地文件发送到每台taskmanage机器和jobmanage机器中,否则会报错FileNotFoundException和IOException,
比如 does not exist or the user running Flink ('root') has insufficient permissions to access it。
2.flink安装包的scala版本和项目中pom依赖的各个jar包相关的scala版本不一致导致的报错:NoSuchMethodError: scala.Predef$.refArrayOps