CDH6.2+集成Flink

集成环境

系统/组件版本
CentOs6.9
Scalascala_2.11
Python2.7+(系统默认的2.6.6后续编译存在问题,建议用2.7+)
JDKjdk1.8.0.181
Flinkflink-1.12.0-bin-scala_2.11
CDHcdh6.2.1

flink与cdh的版本根据需要可以自行调整。

1.安装maven

后续编译需要,如果已经安装有,可以跳过此步骤。

  1. 下载maven;

https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

  1. 解压安装修改conf/settings.xml
    将如下代码添加到改文件的<mirrors></mirrors>配置里
<!--maven-->
<!-- flink 源码编译-->
<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>

2.编译Flink-shaded(flink1.12以后版本后面需要)

1.下载代码
注意:最多下载10版本的,后面的版本取消了所需要编译的文件,也可以编译这个后面改配置,后面会提到

https://archive.apache.org/dist/flink/flink-shaded-10.0/flink-shaded-10.0-src.tgz

2.解压

cd flink-shaded-10.0

3.修改配置pom文件

vim pom.xml

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

4)开始编译(根据自己需要编译的版本和scala版本修改参数)

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

成功如下图:
在这里插入图片描述
后续cm上部署flink启动报错时,需放在 /opt/cloudera/parcels/FLINK/lib/flink/lib目录

cp ./flink-shaded-hadoop-2-parent/flink-shaded-hadoop-2-uber/target/flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.1-10.0.jar /opt/cloudera/parcels/FLINK-1.12.0-BIN-SCALA_2.11/lib/flink/lib/

也需要发送到其他服务器该目录下面

3.编译所需flink

也可以直接用官方的包,官方下载地址如下:

https://archive.apache.org/dist/flink/flink-1.12.0/flink-1.12.0-bin-scala_2.11.tgz

1.下载源码

https://archive.apache.org/dist/flink/flink-1.12.0/flink-1.12.0-src.tgz

解压

tar –zxvf flink-1.12.0-src.tgz
cd flink-1.12.0

2.编译(根据自己需要编译的版本和scala版本修改参数)编译需要比较久时间

mvn clean install -DskipTests -Dfast -Drat.skip=true -Dhaoop.version=3.0.0-cdh6.2.1 -Pvendor-repos -Dinclude-hadoop -Dscala-2.11 -Dskip.npm -T10C

编译后的文件在目录下,后续第四步拿来做源,编译好的文件在:

cd . /flink-dist/target/flink-1.12.0-bin

直接打包即可

tar -czvf flink-1.12.0-bin-scala_2.11.tgz flink-1.12.0

3.注意:编译改包前需要先编译对应版本的flink-shaded-12.0包(编译过程如第二步),如果不先编译该包,后续的这个包编译会报错,编译失败

4.安装parcel

1)下载制作工具(完成后会在当前目录生成一个flink-parcel的文件,证明下载成功):

git clone https://github.com/pkeropen/flink-parcel.git

2)修改配置文件

cd ./flink-parce
vim flink-parcel.properties

进行相应修改,内容如下:

#FLINK 下载地址(需要修改,自带源需要翻墙才能正常下载,根据需要修改版本,也可以使用自己编译的,自己编译的详情见第三步里面,将文件放在/var/www/html/flink文件夹下面。重启http即可得到一个共享地址,重启命令service httpd restart)
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

#操作系统版本,以centos为例(根据实际情况修改)
OS_VERSION=6

#CDH 小版本 (根据需要修改范围)
CDH_MIN_FULL=5.13
CDH_MAX_FULL=6.3

#CDH大版本 (基本不用修改,看实际情况)
CDH_MIN=5
CDH_MAX=6

5.构建安装包

1.编译

chmod 777 build.sh
./build.sh  parcel

构建成功如下图
在这里插入图片描述

注意:此处需要用到Python2.7以上的版本,否则编译会出现以下问题(python版本语法不兼容导致的),虽然编译成功,但是下面有脚本报错,最终FLINK-1.11.3-BIN-SCALA_2.11_build目录下面缺少.sha与.json的文件
注意:如果集成flink-1.13以上的版本需要在下载的flink包里面的bin目录下放上脚本 start-scala-shell.sh该脚本可以在1.13及其以下的flink官方包中找到,由于该文件在1.14版本以后被优化去掉了,但是制作parcel的时候需要检查使用该文件,所以不放置会报错

在这里插入图片描述

如果无法修改python版本,按照我的当时Python2.6.6的版本,处理方式如下

cd ./cm_ext/make_manifest
vi make_manifest.py

修改其中with tarfile.open(fullpath, ‘r’) as tar:该行(79行)代码写法修改为如下:
tar=tarfile.open(fullpath, ‘r’) 修改后注意下面的缩进,一直到pass位置的缩进都需要注意(下面我粘贴的代码块已经带上了缩进):

    tar=tarfile.open(fullpath, 'r')
    #with tarfile.open(fullpath, 'r') as tar:
    try:
      json_member = tar.getmember(os.path.join(_get_parcel_dirname(f),
                                    'meta', 'parcel.json'))
    except KeyError:
      print("Parcel does not contain parcel.json")
      continue
    try:
      parcel = json.loads(tar.extractfile(json_member).read().decode(encoding='UTF-8'))
    except:
      print("Failed to parse parcel.json")
      continue
    _safe_copy('depends', parcel, entry)
    _safe_copy('replaces', parcel, entry)
    _safe_copy('conflicts', parcel, entry)
    _safe_copy('components', parcel, entry)
    _safe_copy('servicesRestartInfo', parcel, entry)
    try:
      notes_member = tar.getmember(os.path.join(_get_parcel_dirname(f),
                                     'meta', 'release-notes.txt'))
      entry['releaseNotes'] = tar.extractfile(notes_member).read().decode(encoding='UTF-8')
    except KeyError:
        # No problem if there's no release notes
      pass

同理修改该文件的最后两行第88行

  #with open(os.path.join(path, 'manifest.json'), 'w') as fp:
  fp=open(os.path.join(path, 'manifest.json'), 'w')
  fp.write(manifest)

第88行如下修改,去掉字符编码,没有汉字不会影响

      #parcel = json.loads(tar.extractfile(json_member).read().decode(encoding='UTF-8'))
      parcel = json.loads(tar.extractfile(json_member).read())

构建成功如下图:
在这里插入图片描述

如果未修改第一步中的源地址则会报如下错误
在这里插入图片描述

如果未修改第二步中的后面两行源码会导致manifest.json该文件里面只有个时间戳
在这里插入图片描述

下载并打包完成后会在当前目录生成FLINK-1.12.0-BIN-SCALA_2.11_build文件
注意:该目录下会有三个文件,如下图(如果没有或不正常需要检查编译,建议直接使用python2.7+编译):
在这里插入图片描述
将该文件名字修改为如下名字(该文件需要最后追加在原始的manifest.json里面):
flink.manifest.json

mv manifest.json flink.manifest.json

2.构建flink-yarn csd包

./build.sh csd_on_yarn

如果需要安装flink独立集群则执行./build.sh csd_standalone
构建成功如下图
在这里插入图片描述
执行完成后会生成FLINK_ON_YARN-1.12.0.jar

3.将FLINK-1.12.0-BIN-SCALA_2.11_build打包

tar -cvf ./FLINK-1.12.0-BIN-SCALA_2.11.tar ./FLINK-1.12.0-BIN-SCALA_2.11_build/

4.将FLINK-1.12.0-BIN-SCALA_2.11.tar FLINK_ON_YARN-1.12.0.jar下载,这两个包就是目标包

sz FLINK-1.12.0-BIN-SCALA_2.12.tar FLINK_ON_YARN-1.12.0.jar

全部构建成功后目录下存在如下文件:
在这里插入图片描述

6.安装包集成Cloundera Manager(可跳过此步骤,直接安装)

将上传的FLINK-1.12.0-BIN-SCALA_2.11.tar进行解压到/var/www/html

tar -xvf FLINK-1.12.0-BIN-SCALA_2.11.tar -C /var/www/html

重命名

mv FLINK-1.12.0-BIN-SCALA_2.11_build flink
cd /var/www/html/flink
createrepo .

配置局域网flink的yum

cd /etc/yum.repo.d
vim ./flink.repo

输入如下内容(注意这个yum源ip就是当前服务器ip,例如我当时就是10.xxx.xxx.15,后面的文件夹和上面mv修改的文件夹名称一致,例如我这里都是flink)

[flink]
name=flink
baseurl=http://yum源ip/flink/
enabled=1
gpgcheck=0

然后执行(注意如果该目录下有其他repo,需要进行改名字后缀进行屏蔽,不然可能导致报错,系统相关的CentOs不处理,如有系统相关报错请修改对应repo源里面的地址,是国外源地址连接异常导致,修改使用其他源即可

yum clean all
yum makecache

重启http服务

service httpd restart

登录cm
在parcel配置界面添加flink的parcel源
然后进行下载→分配→解压→激活

然后登录服务器,将FLINK_ON_YARN-1.12.0.jar上传到cm主节点的/opt/cloudera/csd/目录下(目的是让cm识别)

4 出现的问题及解决思路

flink启动报错找不到yarn的jar包
官网的说法是flink1.11版本之后的版本都不需要单独编译hadoop的适配包了,只需要配置

HADOOP_CLASSPATH=`hadoop classpath`

即可,但是我配置后问题也没有解决,只好添加适配包,但经过编译1.12.0版本的shad后,并没有相关的包,所以我采用的是1.10版本的适配包(自行搜索下载即可)

cd /opt/cloudera/parcels/FLINK/lib/flink/lib
#(所有flink节点都需要添加)
rz flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

添加完成后再重试还会报一个与Kerberos相关的错误,由于我的集群并没有开启Kerberos,所以需要到flink的配置界面中把Kerberos相关的配置删除,完后再重启就能够正常启动了。

启动后flink在cm界面的显示状态为问题
在cm界面重启cm服务即可解决

7.直接安装

将之前编译的jar移动到对应的cm主节点的目录下

cp /home/wangmu/flink/flink-parcel/FLINK_ON_YARN-1.12.0.jar /opt/cloudera/csd/
cp /home/wangmu/flink/flink-parcel/FLINK-1.12.0-BIN-SCALA_2.11_build/FLINK-1.12.0-BIN-SCALA_2.11-el6.parcel /opt/cloudera/parcel-repo/

此时需要到cm目录下

cd /opt/cloudera/parcel-repo/

发现此时应该少一个对应的FLINK-1.12.0-BIN-SCALA_2.11-el6.parcel.sha文件(按照正常编译不会由此问题,如果出现该问题,检查第五步构建安装包的时候)
观察发现该文件只是一个sha校验文件所以按照如下执行

sha1sum FLINK-1.12.0-BIN-SCALA_2.11-el6.parcel

执行结果第一段就是值,如下图
在这里插入图片描述

于是自己手动建一个即可

vi FLINK-1.12.0-BIN-SCALA_2.11-el6.parcel.sha

将上述的第一行sha值放进去保存,然后到前端cm界面刷新即可出现
在这里插入图片描述

通过此方式刷新,分配激活即可

建立软连接获取全局变量执行

cd /etc/alternatives/
ln -s /opt/cloudera/parcels/FLINK-1.12.0-BIN-SCALA_2.11/lib/flink/bin/flink flink
cd /usr/bin/
ln -s /etc/alternatives/flink flink

注意:启动后flink在cm界面的显示状态为?问题
在cm界面重启cm服务即可解决

8. 可能遇到的问题

1) 启动后flink在cm界面的显示状态为?问题
在cm界面重启cm服务即可解决
2) 角色日志java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnException
在这里插入图片描述

由于缺少第2步骤编译的包。将该包移动到每台节点的/opt/cloudera/parcels/FLINK/lib/flink/lib目录下即可

3) 报错org.apache.flink.configuration.IllegalConfigurationException: Kerberos login configuration is invalid; keytab is unreadable由于默认自动填写了k8s的相关配置,如下清空即可
在这里插入图片描述

作者自己构建并整理网上其他资源而来,如果需转载使用,请备注来源,谢谢~~

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值