CM6.3安装Flink1.11.3

1,671 阅读4分钟

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:

解决方案:

  1. 去Maven的Repository目录中找到com.github.eirslett目录,删除

  2. 通过报错信息,我们可以知道是哪个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>
    
  3. 重新编译,如果不行就多试几遍。

其他各种找不到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.keytabsecurity.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