0.背景
CDH目前没有对flink进行集成,若想在CDH集群中使用Flink需要对Flink源码进行编译。
目前我们的集群使用的是CDH6.3.x,其中的hadoop是3.0.0版本。
然而Flink目前原生不支持hadoop3.0.0版本,故需要对Flink进行重新编译,制作一个flink_1.11.3-hadoop_3.0.0-cdh_6.3.1版本的安装包,并达成parcel,在CM集群上进行安装。
1 Flink源码编译
1.1 源码下载
国内使用清华大学开源镜像站下载
mirrors.tuna.tsinghua.edu.cn/apache/flin…
也可以通过github对项目进行clone,这里不再赘述。
解压。
1.2 下载Flink-shaded
Flink-shaded是Flink官方提供的用来编译Flink源码的工具库。
注: Flink1.11之前的版本需要先编译对应的shaded,1.11版本开始不需要编译shaded, 但CDH集成时若没有shaded包会报错,故此处还是选择按照原有方法进行编译。
在下载的Flink源码中查看该版本Flink所依赖的Shaded版本。
具体方法是:在源码的pom.xml文件中搜索<flink.shaded.version>
标签,查看版本。
<flink.shaded.version>11.0</flink.shaded.version>
1.11.3版本使用的flink-shaded版本为11.0,去下载相应版本。
mirrors.tuna.tsinghua.edu.cn/apache/flin…
解压。
这里如果下载不到11版本,使用12版本也可以,亲测有效
1.3 编译Flink-shaded
在pom文件中添加如下配置,因为要编译CDH版本,我们添加CDH的依赖源。
<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>
在Flink-shaded的根目录下使用maven进行编译
mvn -T4C clean install -DskipTests -Pvendor-repos -Dhadoop.version=3.0.0-cdh6.3.1 -Dscala-2.11 -Drat.skip=true
参数解释:
-T4C 使用CPU中4核心进行编译
-Dhadoop.version 编译对应的hadoop版本
-Dscala-2.11 Scala对应版本
出现
[INFO] BUILD SUCCESS
编译完成。
1.4 编译Flink
为了编译速度,可以在pom.xml文件中删除不必要编译的模块
<!-- <module>flink-tests</module> -->
<!-- <module>flink-end-to-end-tests</module> -->
<!-- <module>flink-test-utils-parent</module> -->
<!-- <module>flink-yarn-tests</module> -->
<!-- <module>flink-fs-tests</module> -->
<!-- <module>flink-docs</module> -->
在pom文件中添加cloudera仓库
<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>
在Flink根目录下使用maven编译Flink
mvn clean install -DskipTests -Pvendor-repos -Dhaoop.version=3.0.0-cdh-6.3.1 -Dscala-2.11 -Drat.skip=true -T6C
参数解释:
-Dfast 在flink根目录下pom.xml文件中fast配置项目中含快速设置,其中包含了多项构建时的 跳过参数. 例如apache的文件头(rat)合法校验,代码风格检查,javadoc生成的跳过等,详细可 阅读pom.xml
-Pinclude-hadoop 将 hadoop的 jar包,打入到lib/中
-Pvendor-repos 使用cdh、hdp 的hadoop 需要添加该参数
-Dscala-2.11 指定scala的版本为2.11
-Dhadoop.version=2.6.0-cdh5.7.0 指定 hadoop 的版本
出现
[INFO] BUILD SUCCESS
编译成功。
在flink-dist\target\flink-1.11.3-bin
目录下找到对应的目录flink-1.11.3
。
问题汇总
eirslett安装错误
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.6:install-node-and-npm (install node and npm) on project XXX:
解决方案:
-
去Maven的Repository目录中找到com.github.eirslett目录,删除
-
通过报错信息,我们可以知道是哪个model出的错,这里是
flink-runtime-web
,打开模块的pom文件,搜索install-node-and-npm
,在下方configuration标签中添加node与npm的镜像地址<!--配置公网的镜像地址--> <nodeDownloadRoot>http://npm.taobao.org/mirrors/node/</nodeDownloadRoot <npmDownloadRoot>http://npm.taobao.org/mirrors/npm/</npmDownloadRoot>
-
重新编译,如果不行就多试几遍。
其他各种找不到jar包的错误通过删除本地maven对应目录重新执行编译,或更换镜像地址,均可以解决。
2 制作parcel
2.1 clone flink-parcel代码
flink-parcel是GitHub上大佬封装的flink打包parcel的脚本,在此感谢大佬。
git clone https://github.com/pkeropen/flink-parcel.git
2.2 打包flink
将上一步中编译好的flink-1.11.3
打包
tar -zcvf flink-1.11.3-bin-scala_2.11.tgz flink-1.11.3
注意包名必须为flink-版本-bin-scala_scala版本.tgz
的格式。
将打包后的flink发送至flink-parcel
目录下。
mv flink-1.11.3-bin-scala_2.11.tgz flink-parcel/
2.3 修改flink-parcel.properties
#FLINK 下载地址
#由于前面以及将包放在目录下了,故此处只是设置上url,并不会真的下载
FLINK_URL=https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.11.3/flink-1.11.3-bin-scala_2.11.tgz
#flink版本号
FLINK_VERSION=1.11.3
#扩展版本号
EXTENS_VERSION=BIN-SCALA_2.11
#操作系统版本,以centos为例
#本人使用的RHEL,因为centos也是用的redhet内核,故没什么区别
OS_VERSION=7
#CDH小版本
CDH_MIN_FULL=5.2
CDH_MAX_FULL=6.3.2
#CDH大版本
CDH_MIN=5
CDH_MAX=6
2.4 生成parcel文件
./build.sh parcel
若build无执行权限,则使用chmod 755 build.sh 指令进行赋权
2.5 生成csd文件
on yarn 版本
./build.sh csd_on_yarn
standalone版本
./build.sh csd_standalone
2.6 导出需要的包
cp FLINK_ON_YARN-1.11.3.jar /opt/cloudera/parcel-repo
cp FLINK_ON_YARN-1.11.3.jar /opt/cloudera/csd
cd FLINK-1.11.3-BIN-SCALA_2.11_build
cp FLINK* /opt/cloudera/parcel-repo/
重启clouderamanager-server
3 CM安装Flink
3.1 安装parcel
在CM面板点击 集群 -> parcel -> 检查新parcel
此时看到页面上已经有FLINK的parcel
对新parcel进行 下载 -> 分配 -> 激活
添加服务中即可以看到FLINK_yarn
3.2 安装flink
按照提示操作即可。
问题汇总
启动失败
在如果集群开启了安全,需要配置security.kerberos.login.keytab
和security.kerberos.login.principal
两个参数才能正正常启动。
如未启动kerberos,则在CDH中添加FLINK服务时请清空这两个参数的内容
启动失败Redaction rules file doesn't exist
ERROR Redaction rules file doesn't exist, not redacting logs. file: redaction-rules.json, directory: /run/cloudera-scm-agent/process/2657-flink_on_yarn-FLINK_YARN
将jar包flink-shaded-hadoop-2-uber-3.0.0-cdh6.3.1-10.0.jar
(对应版本即可)添加到/opt/cloudera/parcels/FLINK/lib/flink/lib
目录
注:
flink-shaded-hadoop-2-uber-3.0.0-cdh6.3.1-10.0.jar
需要手动编译,编译过程可自行百度。
要发分发到每个节点!!!并且在每个节点配置环境变量
export HADOOP_CLASSPATH=/opt/cloudera/parcels/FLINK/lib/flink/lib