CDH整合Flink(CDH6.3.2+Flink1.12.0)
一、准备工作
安装jdk1.8及maven,jdk使用CDH安装包中自带的jdk的rpm包即可
安装完成后添加环境变量
[root@linux201 ~] vim /etc/profile.d/custom.sh
添加如下内容
# JAVA_HOME JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera PATH=$PATH:$JAVA_HOME/bin # MAVEN_HOME MAVEN_HOME=/usr/local/maven-3.6.3 PATH=$PATH:$MAVEN_HOME/bin export PATH JAVA_HOME MAVEN_HOME
然后source /etc/profile
刷新环境变量
为了提高下载速度,可以对maven镜像仓库的地址进行配置
[root@linux201 conf] cd $MAVEN_HOME/conf
[root@linux201 conf] vim settings.xml
在mirrors标签内添加以下镜像仓库
<!-- 阿里云仓库 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>nexus-aliyun</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <!-- Maven中央仓库中国镜像 --> <mirror> <id>maven cn repo</id> <name>oneof the central mirrors in china</name> <url>http://maven.net.cn/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>maven repo</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>maven repo2</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://repo2.maven.org/maven2/</url> </mirror>
二、flink相关下载
flink下载地址:
https://archive.apache.org/dist/flink/flink-1.12.0/flink-1.12.0-bin-scala_2.12.tgz(请看清选择flink-1.12.0-bin-scala_2.12.tgz or flink-1.12.0-bin-scala_2.11tgz)
parcel制作工具下载地址(github提供的工具包):
https://github.com/pkeropen/flink-parcel.git
Linux下载httpd服务并开启
[root@linux201 flink-parcel] yum install y httpd [root@linux201 flink-parcel] systemctl start httpd [root@linux201 flink-parcel] systemctl enable httpd
在/var/www/html
目录下创建flink1.12.0
目录,将flink-1.12.0-bin-scala_2.12.tgz
置于该目录下
可以登录以下网址查看
http://linux201/flink1.12.0/
三、制作parcel
parcel制作方式大致有两种,第一种是使用源生的制作方法,制作过程繁琐复杂,第二种是使用广大网友制作好的parcel制作工具,本文使用第二章方式
1.安装必要工具
安装前注意安装必要的Linux工具
[root@linux201 flink-parcel] yum install -y wget git
2.下载制作工具
直接网页下载后上传到Linux或是通过git下载
[root@linux201 flink-parcel] git clone https://github.com/pkeropen/flink-parcel.git
3.修改配置文件
进入到flink-parcel
目录下
使用修改配置文件
[root@linux201 flink-parcel] cp flink-parcel.properties flink-parcel.properties.bak
[root@linux201 flink-parcel] vim flink-parcel.properties
修改如下地址
#FLINK下载地址 #下载flink-1.12.0-bin-scala_2.12.tgz,开启httpd服务且文件已经置于/var/www/html/flink1.12.0目录 FLINK_URL=http://linux201/flink1.12.0/flink-1.12.0-bin-scala_2.12.tgz #如果没有下载可以使用以下配置 #FLINK_URL=https://archive.apache.org/dist/flink/flink-1.12.0/flink-1.12.0-bin-scala_2.12.tgz #flink版本号 FLINK_VERSION=1.12.0 #扩展版本号 EXTENS_VERSION=BIN-SCALA_2.12 #操作系统版本,以centos为例 OS_VERSION=7 #CDH 小版本 CDH_MIN_FULL=5.2 CDH_MAX_FULL=6.3.3 #CDH大版本 CDH_MIN=5 CDH_MAX=6
4.编译所需Flink文件
原文件中build.sh没有执行权限需要**增加执行权限**
chmod u+x build.sh
然后进行build
./build.sh parcel
执行过程中可能会报以下错误
fatal: unable to access 'https://github.com/cloudera/cm_ext.git/': Network file descriptor is not connected
此时查看build.sh
源码,定位到第27行,需要将原来的https
改为git
然后再进行build
./build.sh parcel
下载并打包完成后会在当前目录生成FLINK-1.12.0-BIN-SCALA_2.12_build
文件
构建flink-yarn csd包
./build.sh csd_on_yarn
执行完成后会生成FLINK_ON_YARN-1.12.0.jar
将FLINK-1.12.0-BIN-SCALA_2.12_build打包
tar -cvf ./flink-1.12.0-bin-scala_2.12.tar ./FLINK-1.12.0-BIN-SCALA_2.12_build/
文件夹下的flink-1.12.0-bin-scala_2.12.tar
、FLINK_ON_YARN-1.12.0.jar
就是目标包
5.编译flink-shaded版本
1)下载源码包并解压
下载地址:https://flink.apache.org/downloads.html
解压到指定目录
[root@localhost flink-shaded-12.0] tar -xvf flink-shaded-12.0-src.tgz -C /usr/local/software/
目录结构如下
2)修改pom.xml
进入到flink-shaded-12.0
目录下修改pom.xml
配置文件
在里面的profiles中添加如下配置参数:
<profile> <id>vendor-repos</id> <activation> <property> <name>vendor-repos</name> </property> </activation> <!-- Add vendor maven repositories --> <repositories> <!-- Cloudera --> <repository> <id>cloudera-releases</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <!-- Hortonworks --> <repository> <id>HDPReleases</id> <name>HDP Releases</name> <url>https://repo.hortonworks.com/content/repositories/releases/</url> <snapshots><enabled>false</enabled></snapshots> <releases><enabled>true</enabled></releases> </repository> <repository> <id>HortonworksJettyHadoop</id> <name>HDP Jetty</name> <url>https://repo.hortonworks.com/content/repositories/jetty-hadoop</url> <snapshots><enabled>false</enabled></snapshots> <releases><enabled>true</enabled></releases> </repository> <!-- MapR --> <repository> <id>mapr-releases</id> <url>https://repository.mapr.com/maven/</url> <snapshots><enabled>false</enabled></snapshots> <releases><enabled>true</enabled></releases> </repository> </repositories> </profile>
3)编译flink-shaded
在flink-shaded-12.0
目录下进行编译
[root@localhost flink-shaded-12.0] mvn clean install -DskipTests -Pvendor-repos -Dhadoop.version=3.0.0-cdh6.3.2 -Dscala-2.12 -Drat.skip=true -T10C
耐心等待编译,可能会失败多次,重复执行命令编译就行
4)问题解决
编译后发现并没有目标文件
flink-shaded-hadoop-2-uber 3.0.0-cdh6.3.2-10.0
网上查资料发现使用flink-shaded-12.0-src.tgz编译后确实没有上述文件,但是flink-shaded-10.0也适配flink1.12环境,于是改用官网提供的flink-shaded-10.0-src.tgz进行编译,编译步骤类似。
编译成功后已经有目标文件,目标文件位置
/usr/local/software/flink-shaded-10.0/flink-shaded-hadoop-2-parent/flink-shaded-hadoop-2-uber/target/flink-shaded-hadoop-2-uber-3.0.0-cdh6.3.2-10.0.jar
四、集成CM
1.上传编译好的parcel
将编译好的flink-1.12.0-bin-scala_2.12.tar
解压到/var/www/html
并重命名
# 将flink-1.12.0-bin-scala_2.12.tar解压到/var/www/html [root@linux201 html] tar -xvf /usr/local/software/flink-parcel/flink-1.12.0-bin-scala_2.12.tar -C /var/www/html/ [root@linux201 html] cd /var/www/html/ # 重命名目录名称 [root@linux201 html] mv FLINK-1.12.0-BIN-SCALA_2.12_build/ flink1.12.0-on-cdh6.3.2 [root@linux201 html] cd flink1.12.0-on-cdh6.3.2 # 创建flink-on-cdh的本地仓库,确保createrepo工具已经安装 [root@linux201 flink1.12.0-on-cdh6.3.2] createrepo .
开启httpd服务后,可以通过以下网址查看是否正常上传
http://linux201/flink1.12.0-on-cdh6.3.2/
配置局域网flink的yum
[root@linux201 test] vim /etc/yum.repos.d/flink-on-cdh.repo
添加如下配置
[flink-on-cdh] name=flink-on-cdh baseurl=http://linux201/flink1.12.0-on-cdh6.3.2/ enabled=1 gpgcheck=0
将上述配置repo配置文件**分发到所有节点上**
**所有节点**上清除yum并建立yum缓存
yum clean all
yum makecache
在**CM-Server主节点**上,将FLINK_ON_YARN-1.12.0.jar
包复制到/opt/cloudera/csd/
目录下(目的是让cm识别)
[root@linux201 bin] cp /usr/local/software/flink-parcel/FLINK_ON_YARN-1.12.0.jar /opt/cloudera/csd/
重启集群的CM-Server及CM-agent
2.配置parcel库
CM页面—>主机—> parcel —> 配置,添加上传的parcel的位置
添加上传的parcel的位置
http://linux201/flink1.12.0-on-cdh6.3.2/
检查新Parcel ,然后下载—>分配—>激活
下载后报哈希验证失败
错误
先对比文件hash值是否一致,如果不一致就修改一致
查看发现hash码一致,下载仍然报错,需要修改httpd配置文件
[root@linux201 flink1.12.0-on-cdh6.3.2] cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak [root@linux201 flink1.12.0-on-cdh6.3.2] vim /etc/httpd/conf/httpd.conf
在AddType中添加.parcel
重启httpd服务
[root@linux201 flink1.12.0-on-cdh6.3.2] systemctl restart httpd
再次下载—>分配—>激活成功
3.部署flink-yarn服务
点击添加服务
添加Flink-yarn服务
4.启动报错问题解决
1)kerberos认证错误
如果开启kerberos的话,可能报以下错误
org.apache.flink.configuration.IllegalConfigurationException: Kerberos login configuration is invalid; keytab is unreadable
需要删除这两项内容,否则启动失败
2)缺少Hadoop依赖包
启动时报以下错误,表示缺少Hadoop依赖
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnException at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetMethodRecursive(Class.java:3048) at java.lang.Class.getMethod0(Class.java:3018) at java.lang.Class.getMethod(Class.java:1784) at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnException at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more
需要在布置Flink-Yarn的节点上上传flink-shaded-hadoop-2-uber-3.0.0-cdh6.3.2-10.0
将其上传到/opt/cloudera/parcels/FLINK/lib/flink/lib
目录下
5.webUI
进入yarn
查看应用程序,其中的Flink sessopm cluster即为Flink on yarn进程
报错1.队列问题
Caused by: org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1636773988083_0034 to YARN : Application application_1636773988083_0034 submitted by user flink to unknown queue: default
原因为:我的cdh6.3.2设置了yarn公平调度器,加上deafult队列即可
flink run -m yarn-cluster -yn 1 -yjm 1024 -ytm 1024 /opt/cloudera/parcels/FLINK/lib/flink/examples/streaming/WordCount.jar --input hdfs://cdh01:8020/tmp/word.txt --output hdfs://cdh01:8020/tmp/result
报错
bash:/build.sh:/bin/bash^M:bad interpreter:No such file or directory报错解决方法_3L_csdn的博客-CSDN博客
报错2:cdh02和cdh03启动失败,只有cdh01启动成功
解决办法:
Flink-yarn -> 配置 -> 高级 -> Flink-yarn 服务环境高级配置代码段(安全阀)Flink-yarn(服务范围)加入以下内容即可:
HADOOP_USER_NAME=flink HADOOP_CONF_DIR=/etc/hadoop/conf HADOOP_HOME=/opt/cloudera/parcels/CDH HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/jars/*
附上成功的截图,困扰很久的问题
原文连接:https://blog.csdn.net/liminghui4321/article/details/121072598