signed

QiShunwang

“诚信为本、客户至上”

flink编译parcel包并集成至cdh6.3.2

2021/6/3 13:07:03   来源:

flink-1.12 parcel编译

本文主要将flink集成至cdh-6.3.2

1 编译环境准备

1.1 安装JDK1.8

1.2 安装git

yum install git -y

1.3 安装maven

  • 安装maven
# 如果网络不通,可以手动下载上传
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar xzvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
mv /usr/local/apache-maven-3.6.3/ /usr/local/maven
vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin:
source /etc/profile
mvn -v

maven 版本

  • 配置存储路径以及mvn库
vim /usr/local/maven/conf/setting.xml
# 修改此配置
<localRepository>/home/hadoop-wd@gridsum.com/guobin/flink-parcel/maven_repo</localRepository>
# 添加配置
<mirrors>
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>*,!cloudera</mirrorOf>
    </mirror>
    <mirror>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
      <id>repo2</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://repo2.maven.org/maven2/</url>
    </mirror>
    <mirror>
      <id>ibiblio</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
    </mirror>
    <mirror>
      <id>jboss-public-repository-group</id>
      <mirrorOf>central</mirrorOf>
      <name>JBoss Public Repository Group</name>
      <url>http://repository.jboss.org/nexus/content/groups/public</url>
    </mirror>
    <mirror>
      <id>google-maven-central</id>
      <name>Google Maven Central</name>
      <url>https://maven-central.storage.googleapis.com</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
    <!-- 中央仓库在中国的镜像 -->
    <mirror>
      <id>maven.net.cn</id>
      <name>oneof the central mirrors in china</name>
      <url>http://maven.net.cn/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

1.4 安装Node

编译flink-runtime-web模块

wget https://nodejs.org/dist/v12.19.0/node-v12.19.0-linux-x64.tar.xz
tar -xvf node-v12.19.0-linux-x64.tar.xz

ln -s /opt/build_flink/node-v12.19.0-linux-x64/bin/npm   /usr/local/bin/ 
ln -s /opt/build_flink/node-v12.19.0-linux-x64/bin/node   /usr/local/bin/
node -v
npm -v

在这里插入图片描述

2 flink源码编译

2.1 flink-shaded

2.1.1 下载flink-shade包

在此可选用release-10.0版本,release-9.0版本在flink1.11版本的集成中缺少相关的common包,release-11.0版本已经移除掉了flink-shaded-hadoop-2模块FLINK-17685

wget https://github.com/apache/flink-shaded/archive/release-10.0.zip
tar -xvf release-10.0.zip
cd flink-shaded-release-10.0/

2.1.2 修改pom包

修改pom依赖

vim 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>

执行编译

mvn -T4C clean install -DskipTests -Pvendor-repos -Dhadoop.version=3.0.0-cdh6.3.2 -Dscala-2.11 -Drat.skip=true

生成文件在当前目录下的flink-shaded-hadoop-2-parent/flink-shaded-hadoop-2-uber/target/

在这里插入图片描述

2.2 flink

2.2.1 下载flink包

下载flink对应版本,手动下载

wget https://github.com/apache/flink/archive/release-1.12.4.zip

而后解压

unzip release-1.12.4.zip

2.2.2 修改pom

修改flink pom.xml

cd flink-release-1.12.4/
vim pom.xml # 加入如下配置
<repositories>
		<repository>
			<id>cloudera</id>
			<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
		</repository>
	</repositories>

在这里插入图片描述

修改flink-runtime-web pom.xml配置,在标签中,修改groupId为com.github.eirslett的标签下的值为下文提供的值

cd flink-runtime-web
vim pom.xml 
<groupId>com.github.eirslett</groupId>
                                <artifactId>frontend-maven-plugin</artifactId>
                                <version>1.6</version>
                                <executions>
                                        <execution>
                                                <id>install node and npm</id>
                                                <goals>
                                                        <goal>install-node-and-npm</goal>
                                                </goals>
                                                <configuration>
                                                        <nodeDownloadRoot>http://npm.taobao.org/mirrors/node/</nodeDownloadRoot>
                                                        <npmDownloadRoot>https://registry.npmjs.org/npm/-/</npmDownloadRoot>
                                                        <nodeVersion>v10.9.0</nodeVersion>
                                                </configuration>
                                        </execution>
                                        <execution>
                                                <id>npm install</id>
                                                <goals>
                                                        <goal>npm</goal>
                                                </goals>
                                                <configuration>
                                                        <arguments>install -registry=https://registry.npm.taobao.org --cache-max=0 --no-save</arguments>
                                                        <environmentVariables>
                                                                <HUSKY_SKIP_INSTALL>true</HUSKY_SKIP_INSTALL>
                                                        </environmentVariables>
                                                </configuration>
                                        </execution>


在这里插入图片描述

2.2.3 开始编译

cd ../ # 回到flink-release-1.12.4
mvn clean install -DskipTests -Dfast -Drat.skip=true -Dhaoop.version=3.0.0-cdh6.3.2 -Pvendor-repos -Dinclude-hadoop -Dscala-2.11 -T4C

在这里插入图片描述

2.2.4 添加依赖包

# 需要给编译之后的包添加依赖包,添加到$PATH/flink-release-1.12.4/flink-dist/target/flink-1.12.4-bin/flink-1.12.4/lib
# libfb303-0.9.3.jar(自行准备)、hive-exec-2.1.1-cdh6.3.2.jar(自行准备)
# flink-connectors/flink-connector-hive/target/flink-connector-hive_2.11-1.12.4.jar(flink-release-1.12.4目录下)
# flink-shaded-hadoop-2-uber-3.0.0-cdh6.3.2-10.0.jar(上一步打包生成的)
# flink-libraries/flink-state-processing-api/target/flink-state-processor-api_2.11-1.12.4.jar(flink-release-1.12.4目录下)

2.2.5 打包

将编译后的flink包打包,后面即可在制作flink-parcel中使用

cd $PATH/flink-release-1.12.4/flink-dist/target/flink-1.12.4-bin/
tar zvcf flink-1.12.4-bin_scala-2.11.tgz flink-1.12.4/

在这里插入图片描述

3 parcel制作

3.1 准备

  • 下载flink-parcel打包工具
git clone https://github.com/EvenGui/flink-parcel-master
# 进入此目录

在这里插入图片描述

  • 修改配置

在此之前先将[2.2.5]打包生成的flink包拷贝至flink-parcel-master目录下

vim flink-parcel.properties
#FLINk 下载地址
FLINK_URL=  ./flink-1.12.4-bin_scala-2.11.tgz

#flink版本号
FLINK_VERSION=1.12.4

#扩展版本号
EXTENS_VERSION=BIN_SCALA-2.11

#操作系统版本,以centos为例
OS_VERSION=7

#CDH 小版本
CDH_MIN_FULL=5.16.2
CDH_MAX_FULL=6.4

#CDH大版本
CDH_MIN=5
CDH_MAX=6

3.2 开始制作flink-parcel

sh build.sh parcel

编译成功

在这里插入图片描述

3.3 编译csd

sh build.sh csd

在这里插入图片描述

此编译包即可在cdh集群安装使用了。

3.4 将所有包打包成zip包

mkdir -p flink-parcel-1.12.4
mv FLINK-1.12.4-BIN_SCALA-2.11_build/* flink-parcel-1.12.4/
mv FLINK_ON_YARN-1.12.4.jar flink-parcel-1.12.4/
zip flink-parcel-1.12.4.zip -r flink-parcel-1.12.4/

4 安装

如果此次是升级,可以先保存对应任务的savepoint,从集群中卸载老版本(略),重新添加新版本。

4.1 给集群上传对应parcel包

上传[3.4](#3.4 将所有包打包成zip包)的包到cdh集群中cm-server节点的/opt/cloudera/parcel-repo中(备份原有的manifest.json),而后解压

unzip flink-parcel-1.12.4.zip

将解压后的flink parcel包相关移到/opt/cloudera/parcel-repo中,另外FLINK_ON_YARN-1.12.4.jar移到/opt/cloudera/csd,而后修改权限

chown cloudera-scm:cloudera-scm -R /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm -R /opt/cloudera/csd

在这里插入图片描述

在这里插入图片描述

4.2 激活parcel包

在cm可视化界面操作

  • 检测新parcel

在这里插入图片描述

  • 分配激活

在这里插入图片描述

4.3 新增服务

  • 在添加服务前需要重启cm-server

在cm-server机器上执行:

systemctl restart cloudera-scm-server

  • 添加服务

在这里插入图片描述

而后选择flink点继续,hive后面配置,因此这里绑定非hive版本

在这里插入图片描述

自定义角色

Dashboard选择一台机器,gateway选所有机器,点继续

审核更改,点继续

在这里插入图片描述

而后点击启动即完成。

4.4 配置调整

  • 配置环境变量

这个是因为需要配置此组件的环境变量:

返回cm主界面—>选择flink-yarn组件—>选择配置—>搜索”环境”,添加如下配置

HADOOP_CONF_DIR=/etc/hadoop/conf
HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/jars/*
HADOOP_USER_NAME=flink

在这里插入图片描述

  • 配置statebackend

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwwm6ego-1622691791878)(在这里插入图片描述
    )]

在这里插入图片描述

  • Keytab

如果没有启动kerberos认证,去掉此配置中的值

在这里插入图片描述

  • 资源配置

采用默认配置,有需要时根据实际调整,具体每个任务的资源在启动时配置

4.4.1 配置hive

在这里插入图片描述

在这里插入图片描述

5 测试

  • 配置执行环境(所有机器)
vi /etc/profile

# 添加如下内容
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/jars/*
export HADOOP_USER_NAME=flink
 # 添加完成后执行以下命令生效
 source /etc/profile

  • 测试

执行一个wordcount:

cd /opt/cloudera/parcels/FLINK/lib/flink/

# 执行word count测试

./bin/flink run -Dclassloader.check-leaked-classloader=false examples/batch/WordCount.jar 

提交之后输出如下即说明完成
在这里插入图片描述
如果执行测试最后出现类似异常:
在这里插入图片描述
可以配置classloader.check-leaked-classloader=false
在这里插入图片描述