CDH5.16.1 集成 Flink-1.10.0

CDH5.16.1 集成Flink-1.10.0

提示:文章所涉及到的编译前,编译后的文件在文章末尾附件下载链接、该链接所有文件的统一压缩包。时间紧急或对编译过程不感兴趣的小伙伴直接跳到文章末尾点击附件下载文件,按照第二章第三节开始就可以在CDH5.16.1成功集成Flink-1.10.0.


前言

CDH5.16.1 原生组件并不自带Flink组件,想让CM集中管理Flink,需要自己编译parcel文件。鉴于参考大量文章并踩过很多坑之后,总算大功告成,CDH成功集成Flink,特在此记录详细过程及踩坑记录。希望能帮助跟我遇到同样问题的朋友。废话不多说,直接上教程。


一、环境准备

本步骤是为后面步骤执行的基础环境准备。如果服务器已经有以下软件。那么可以直接从第二步开始。
  • JDK1.8
  • Centos 7.5
  • Maven 3.6.3
  • CDH5.16.1

二、编译parcel

1.下载Flink-parcel制作包

利用git克隆:
git clone https://github.com/pkeropen/flink-parcel.git
如果没有git环境可执行以下命令直接下载:
wget https://github.com/pkeropen/flink-parcel/archive/master.zip
如果Linux 服务器提示无法连接到github.com时。可在windows访问下列地址下载,下载后上传到服务器:
https://github.com/pkeropen/flink-parcel/archive/master.zip

2.编译Flink-parcel制作包

如果是直接下载的zip包。需要利用unzip 命令进行解压,解压之后利用命令 cd flink-parcel-master 进入目录。git克隆的制作包无需解压。

2.1 修改 flink-parcel.properties

提示:利用git 克隆代码时,建议直接在服务器上利用git命令去克隆,如果在windows上克隆并修改文件后上传到服务器,运行脚本时可能会报 -bash: xxx: /bin/bash^M: bad interpreter: No such file or directory 错误导致脚本无法直接运行。进入parcle制作包目录并修改flink-parcel.properties文件

cd flink-parcel-master
vim flink-parcel.properties

修改配置后内容如下:

#FLINK 下载地址
FLINK_URL=https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.12.tgz

#flink版本号
FLINK_VERSION=1.10.0

#扩展版本号
EXTENS_VERSION=BIN-SCALA_2.12

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

#CDH 小版本
CDH_MIN_FULL=5.2
CDH_MAX_FULL=5.16.1

#CDH大版本
CDH_MIN=5
CDH_MAX=5

2.2 在当前目录中执行脚本 ,编译生成parcel 文件

 chmod 774 build.sh 
./build.sh parcel  #生成parcel文件

提示:执行此步骤如果报错: unable to access ‘https://github.com/cloudera/cm_ext.git/’: Unable to communicate securely with peer: requested domain name does not match the server’s certificat 解决办法如下:

wget https://github.com/cloudera/cm_ext.git 
unzip cm_ext-master.zip
mv cm_ext-master cm_ext

如果利用wget命令也无法下载,复制该地址在windows上直接下载然后上传到服务器最快的解决方法之一,如果时间充足,可以去配置github代理。解决无法访问github.com的问题。
上述步骤执行完毕之后重新执行命令./build.sh parcel 生成parcel文件。

提示:在执行该脚本时,会有下载flink-1.10.0-bin-scala_2.12.tgz 的步骤,耗时可能较长。建议在本地利用迅雷访问 https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.12.tgz
直接下载后上传到服务build.sh 脚本所在的同级目录下。下载好cm_ext-master,flink-1.10.0-bin-scala_2.12.tgz文件后,服务器目录如下:

在这里插入图片描述

至此再执行 ./build.sh parcel 编译parcel文件的过程将会很顺利。

2.2 在当前目录中继续执行脚本 ,编译生成csd 文件

./build.sh csd_on_yarn

脚本执行完毕,parcel包就编译好了。此时目录如下:
在这里插入图片描述

3.CM添加Flink

3.1 拷贝csd文件到 csd文件夹

cp  FLINK_ON_YARN-1.10.0.jar /opt/cloudera/csd/

3.1 拷贝parcel文件夹下的三个文件到cm parcel-repo目录

cd FLINK-1.10.0-BIN-SCALA_2.12_build/
cp FLINK-1.10.0-BIN-SCALA_2.12-el7.parcel /opt/cloudera/parcel-repo/
cp FLINK-1.10.0-BIN-SCALA_2.12-el7.parcel.sha /opt/cloudera/parcel-repo/
cp manifest.json /opt/cloudera/parcel-repo/ 

cd /opt/cloudera-manager/cm-5.16.1/etc/init.d/
./cloudera-scm-server

3.2 登录CM界面 检查parcel

在这里插入图片描述

3.3 分配、激活 parcel

在这里插入图片描述

3.4 添加Flink服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果没有配置Kerberos 认证。下列两项内容直接配置空。否则启动会报错。如果集群开启了Kerberos 并配置了 认证,这一步则啥都不做。直接点继续即可。
在这里插入图片描述
到此Flink服务添加成功。

4.启动错误集锦

4.1 错误信息 org/apache/hadoop/yarn/exceptions/YarnException

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:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more

4.1.1 原因

/opt/cloudera/parcels/FLINK-1.10.0-BIN-SCALA_2.12/lib/flink/lib/ 目录下缺少Hadoop相关jar包。

4.1.2 解决方法

  1. 软连接 Hadoop lib包所在路径到该目录(网上其他博主在单独启动flink时的解决方法,本次解决方案博主没有测试)
  2. 设置$HADOOP_HOME (网上方法,未测试)
  3. 官网提示 flink1.11已经不需要额外导hadoop的兼容包了(flink-shaded-xx.jar),官方建议添加HADOOP_CLASSPATH即可,我使用的是CDH5.16,flink1.10 所以直接将 对应版本的flink-shaded 放到 /opt/cloudera/parcels/FLINK-1.10.0-BIN-SCALA_2.12/lib/flink/lib/ 目录即可解决(博主亲测,并用此方法解决问题)

由于官网并没有针对CDH5.16.1的 flink-shaded 包。所以博主针对自己当前的环境进行了自己编译了一次。编译方法如下:

编译flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.1-10.0.jar

第一步→配置maven

vim apache-maven-3.6.3/conf/settings.xml
添加如下配置:

<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>central</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>

第二步→下载源码

wget https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-shaded-10.0/flink-shaded-10.0-src.tgz

第三步→解压源码

tar -zxvf flink-shaded-10.0-src.tgz

第四步→修改pom文件 添加如下配置

vim flink-shaded-10.0/pom.xml
<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>

第五步→编译

cd flink-shaded-10.0/
mvn -T2C clean install -DskipTests -Pvendor-repos -Dhadoop.version=2.6.0-cdh5.16.1 -Dscala-2.12 -Drat.skip=true

编译过程中如果遇到以下问题:

[ERROR] Failed to execute goal on project flink-shaded-hadoop-2:
 Could not resolve dependencies for project org.apache.flink:flink-shaded-hadoop-2:jar:
 2.6.0-cdh5.16.1-10.0: The following artifacts could not be resolved: org.apache.hadoop:hadoop-common:jar:2.6.0-cdh5.16.1, org.apache.hadoop:hadoop-hdfs:jar:2.6.0-cdh5.16.1, org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.6.0-cdh5.16.1, org.apache.hadoop:hadoop-yarn-client:jar:2.6.0-cdh5.16.1, org.apache.hadoop:hadoop-yarn-common:jar:2.6.0-cdh5.16.1: Could not find artifact org.apache.hadoop:hadoop-common:jar:2.6.0-cdh5.16.1 in alimaven (http://maven.aliyun.com/nexus/content/repositories/central/) -> [Help 1]

上述问题的解决方法是:

自己下载对应的jar包到服务器的对应目录下,本文章将自己下载的jar包放入了/home/cs/Downloads/flink-parcel/libs/ 目录,然后运行以下maven命令。以下命令完成之后再重新编译就可以编译成功。

mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-mapreduce-client-core -Dversion=2.6.0-cdh5.16.1 -Dpackaging=jar -Dfile=/home/cs/Downloads/flink-parcel/libs/hadoop-mapreduce-client-core-2.6.0-cdh5.16.1.jar

mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-common -Dversion=2.6.0-cdh5.16.1 -Dpackaging=jar -Dfile=/home/cs/Downloads/flink-parcel/libs/hadoop-common-2.6.0-cdh5.16.1.jar

mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-yarn-api -Dversion=2.6.0-cdh5.16.1 -Dpackaging=jar -Dfile=/home/cs/Downloads/flink-parcel/libs/hadoop-yarn-api-2.6.0-cdh5.16.1.jar

mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-yarn-common -Dversion=2.6.0-cdh5.16.1 -Dpackaging=jar -Dfile=/home/cs/Downloads/flink-parcel/libs/hadoop-yarn-common-2.6.0-cdh5.16.1.jar

mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-hdfs -Dversion=2.6.0-cdh5.16.1 -Dpackaging=jar -Dfile=/home/cs/Downloads/flink-parcel/libs/hadoop-hdfs-2.6.0-cdh5.16.1.jar

mvn install:install-file -DgroupId=org.apache.zookeeper -DartifactId=zookeeper -Dversion=3.4.5-cdh5.16.1 -Dpackaging=jar -Dfile=/home/cs/Downloads/flink-parcel/libs/zookeeper-3.4.5-cdh5.16.1.jar

编译成功后

cd flink-shaded-10.0/flink-shaded-hadoop-2-parent/flink-shaded-hadoop-2-uber/target/ 
cp flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.1-10.0.jar  /opt/cloudera/parcels/FLINK-1.10.0-BIN-SCALA_2.12/lib/flink/lib/ `

至此启动org/apache/hadoop/yarn/exceptions/YarnException
成功解决!

4.2 错误信息

org.apache.flink.configuration.IllegalConfigurationException: Kerberos login configuration is invalid; keytab is unreadable
	at org.apache.flink.runtime.security.SecurityConfiguration.validate(SecurityConfiguration.java:139)
	at org.apache.flink.runtime.security.SecurityConfiguration.<init>(SecurityConfiguration.java:90)
	at org.apache.flink.runtime.security.SecurityConfiguration.<init>(SecurityConfiguration.java:71)
	at org.apache.flink.yarn.cli.FlinkYarnSessionCli.main(FlinkYarnSessionCli.java:783)

------------------------------------------------------------
 The program finished with the following exception:

org.apache.flink.configuration.IllegalConfigurationException: Kerberos login configuration is invalid; keytab is unreadable
	at org.apache.flink.runtime.security.SecurityConfiguration.validate(SecurityConfiguration.java:139)
	at org.apache.flink.runtime.security.SecurityConfiguration.<init>(SecurityConfiguration.java:90)
	at org.apache.flink.runtime.security.SecurityConfiguration.<init>(SecurityConfiguration.java:71)
	at org.apache.flink.yarn.cli.FlinkYarnSessionCli.main(FlinkYarnSessionCli.java:783)

4.2.1 原因

在添加服务时配置了Kerberos keytab路径,但是没有配置Flink Kerberos认证。

4.2.1 解决方法

由于本实验在CDH5.16.1的测试集群上进行的,测试集群没有开启Kerberos 认证,所以此次解决方法是直接将以下配置置空。然后启动成功。如果有集群配置了Kerberos 认证,欢迎跟博主交流解决方法。
在这里插入图片描述

附件

附件中包含文章所涉及的所有编译需要的资料、编译完成的aprcel文件、csd文件、shaded文件。


总结

尝试新的技术时,难免会遇到形形色色的问题。网上搜索解决方案时,不能盲目完全跟着博文去操作,需要认真思考每一步操作的意义,为什么这么操作。只有这样在自己遇到不一样的问题时,自己才能有解决问题的思路。也不能一遇到问题就着急,就去搜索问题,冷静分析问题出现的原因,不放弃每个细节,针对原因去找解决方案,只有这样问题才能被快速解决。
参考文章-感谢以下文章博主:
https://www.cnblogs.com/yaowentao/p/12317356.html
https://blog.csdn.net/molidiyi/article/details/106014972

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页