CDH6.2+集成Flink
集成环境
系统/组件 | 版本 |
---|---|
CentOs | 6.9 |
Scala | scala_2.11 |
Python | 2.7+(系统默认的2.6.6后续编译存在问题,建议用2.7+) |
JDK | jdk1.8.0.181 |
Flink | flink-1.12.0-bin-scala_2.11 |
CDH | cdh6.2.1 |
flink与cdh的版本根据需要可以自行调整。
1.安装maven
后续编译需要,如果已经安装有,可以跳过此步骤。
- 下载maven;
https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
- 解压安装修改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的相关配置,如下清空即可
作者自己构建并整理网上其他资源而来,如果需转载使用,请备注来源,谢谢~~