- 一、编译Flink
- 1 下载flink源码
- 2 增加maven镜像
- 3 执行编译命令
- 二、编译parcel
- 1 下载flink-parcel
- 2 修改参数
- 3 复制安装包
- 4 编译parcel
- 5 编译csd
- 6 上传文件
- 三、CDH集成
- 1 登录CDH
- 2 进入Parcel操作界面
- 3 分配Parcel
- 4 激活Parcel
- 5 回主界面
- 6 添加服务
- 报错
- 解决
- 参考资料
版本:
Centos7.6
JDK1.8
Scala2.11
Python2.7
Git1.8.3.1
Apache Maven3.6.3
CDH6.3.2
Apache Flink1.12.0
上述软件需提前安装!!!
一、编译Flink 1 下载flink源码git clone https://github.com/apache/flink.git git checkout release-1.12.02 增加maven镜像
在maven的setting.xml文件的mirrors标签中增加如下mirror
3 执行编译命令alimaven central aliyun maven http://maven.aliyun.com/nexus/content/repositories/central/ alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central central Maven Repository Switchboard http://repo1.maven.org/maven2/ central repo2 central Human Readable Name for this Mirror. http://repo2.maven.org/maven2/ ibiblio central Human Readable Name for this Mirror. http://mirrors.ibiblio.org/pub/mirrors/maven2/ jboss-public-repository-group central JBoss Public Repository Group http://repository.jboss.org/nexus/content/groups/public google-maven-central Google Maven Central https://maven-central.storage.googleapis.com central maven.net.cn oneof the central mirrors in china http://maven.net.cn/content/groups/public/ central
# 进入flink源码根目录 cd /opt/os_ws/flink # 执行打包命令, mvn clean install -DskipTests -Dfast -Drat.skip=true -Dhaoop.version=3.0.0-cdh6.3.2 -Pvendor-repos -Dinclude-hadoop -Dscala-2.11 -T2C
注意:要根据自己的版本修改命令参数,如果你的是CDH6.2.0、scala2.12,那么你的命令应该像这样mvn clean install -DskipTests -Dfast -Drat.skip=true -Dhaoop.version=3.0.0-cdh6.2.0 -Pvendor-repos -Dinclude-hadoop -Dscala-2.12 -T2C
等待15分钟左右编译完成
编译完成的结果就是flink/flink-dist/target/flink-1.12.0-bin目录下的flink-1.12.0文件夹,接下来把flink-1.12.0打包成tar包
# 进入打包结果目录 cd /opt/os_ws/flink/flink-dist/target/flink-1.12.0-bin # 执行打包命令 tar -zcf flink-1.12.0-bin-scala_2.11.tgz flink-1.12.0
这样就得到了CDH6.3.2、Scala2.11的flink安装包了
二、编译parcel这里编译parcel使用flink-parcel工具
1 下载flink-parcelcd /opt/os_ws/ # 克隆源码 git clone https://github.com/pkeropen/flink-parcel.git cd flink-parcel2 修改参数
vim flink-parcel.properties #Flink 下载地址 Flink_URL=https://archive.apache.org/dist/flink/flink-1.12.0/flink-1.12.0-bin-scala_2.11.tgz #flink版本号 Flink_VERSION=1.12.0 #扩展版本号 EXTENS_VERSION=BIN-SCALA_2.11 #操作系统版本,以centos7为例 OS_VERSION=7 #CDH 小版本 CDH_MIN_FULL=5.15 CDH_MAX_FULL=6.3.2 #CDH大版本 CDH_MIN=5 CDH_MAX=63 复制安装包
这里把之前编译打包好的flink的tar包上复制到flink-parcel项目的根目录。flink-parcel在制作parcel时如果根目录没有flink包会从配置文件里的地址下载flink的tar包到项目根目录。如果根目录已存在安装包则会跳过下载,使用已有tar包。注意:这里一定要用自己编译的包,不要用从链接下载的包!!!
# 复制安装包,根据自己项目的目录修改 cp /opt/os_ws/flink/flink-dist/target/flink-1.12.0-bin/flink-1.12.0-bin-scala_2.11.tgz /opt/os_ws/flink-parcel4 编译parcel
# 赋予执行权限 chmod +x ./build.sh # 执行编译脚本 ./build.sh parcel
编译完会在flink-parcel项目根目录下生成Flink-1.12.0-BIN-SCALA_2.11_build文件夹
5 编译csd# 编译standlone版本 ./build.sh csd_standalone # 编译flink on yarn版本 ./build.sh csd_on_yarn
编译完成后在flink-parcel项目根目录下会生成2个jar包,Flink-1.12.0.jar和Flink_ON_YARN-1.12.0.jar
6 上传文件将编译parcel后生成的Flink-1.12.0-BIN-SCALA_2.11_build文件夹内的3个文件复制到CDH Server所在节点的/opt/cloudera/parcel-repo目录。将编译csd生成后的Flink_ON_YARN-1.12.0.jar复制到CDH Server所在节点的/opt/cloudera/csd目录(这里因为资源隔离的优势,选择部署flink on yarn模式)
# 复制parcel,这里就是在主节点编译的,如果非主节点,可以scp过去 cp /opt/os_ws/flink-parcel/Flink-1.12.0-BIN-SCALA_2.11_build/* /opt/cloudera/parcel-repo # 复制scd,这里就是在主节点编译的,如果非主节点,可以scp过去 cp /opt/os_ws/flink-parcel/Flink_ON_YARN-1.12.0.jar /opt/cloudera/csd
重启CDH server和agent
# 重启server(仅server节点执行) systemctl stop cloudera-scm-server systemctl start cloudera-scm-server # 重启agent(所有agent节点都执行) systemctl stop cloudera-scm-agent systemctl start cloudera-scm-agent三、CDH集成
操作步骤
1 登录CDH打开CDH登录界面
输入用户名密码,点击登录
点击主机,点击Parcel
点击分配
等待分配完毕
点击激活 点击确定
等待激活完毕
点击Cloudera Manager
点击倒三角,点击添加服务
点击Flink-yarn,点击继续
点击选择主机,选择在哪些节点部署flink服务,根据自己情况自己选择
选择主机,点击继续
审核更改,将这两项配置security.kerberos.login.keytab、security.kerberos.login.principal设置为空字符串,点击继续
这里就开始运行了,这一步运行失败了
报错Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnException
完整stderr日志
Error: A JNI error has occurred, please check your installation and try again 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
问题的原因是缺少hadoop包
解决1.如果flink版本>=1.12.0
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/*
添加配置后重启Flink-yarn服务就不报错了。
2.如果flink版本<1.12.0
建议升级到1.12.0以上(开个玩笑)。如果flink版本低于1.12.0需要编译flink-shaded,参考这篇博客 CDH6.2.1集成flink
CDH6.2.1集成flink
CDH6.3.2编译并集成Flink
CDH6.3.2集成安装flink on yarn服务
Flink 编译 Flink1.9.1-CDH6.2 对应版本



