本次部署版本
- scala2.11
- hadoop 3.0.0
- maven
- git
依赖服务 zookeeper ,hadoop, yarn
1. maven安装配置
vim /etc/profile
文件末尾添加
export MAVEN_HOME=/usr/local/apache-maven-3.8.1
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile
验证
mvn --version
修改setting.xml
vim /usr/local/apache-maven-3.8.1/conf/settings.xml
第168行添加mirrors
:168
<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-parcel制作过程
cd /opt
git clone https://github.com/Git-Charles/flink-parcel.git(推荐)
完成后会在当前目录生成一个flink-parcel的文件
如果服务器无法下载,可上传flink-parcel离线文件夹到 /opt下
修改配置文件 flink-parcel.properties
cd ./flink-parce
vim flink-parcel.properties
#flink 下载地址
FLINK_URL=https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.13.1/flink-1.13.1-bin-scala_2.11.tgz
#flink版本号
FLINK_VERSION=1.13.1
#扩展版本号
EXTENS_VERSION=BIN-SCALA_2.11
#操作系统版本,以centos为例
OS_VERSION=7
#CDH 小版本
CDH_MIN_FULL=5.2
CDH_MAX_FULL=6.3.3
#CDH大版本
CDH_MIN=5
CDH_MAX=6
修改build.sh权限
chmod +x build.sh
生成parcel文件 执行完成后会生成FLINK-1.13.1-BIN-SCALA_2.11_build
./build.sh parcel
生成csd的jar包
on_yarn 执行完成后会生成FLINK_ON_YARN-1.13.1.jar
./build.sh csd_on_yarn
standalone 执行完成后会生成FLINK-1.13.1.jar
./build.sh csd_standalone
将上面生成的parcel文件copy至 cloudera/parcel-repo子目录下:
cd /opt/flink-parcel/FLINK-1.13.1-BIN-SCALA_2.11_build
cp FLINK-1.13.1-BIN-SCALA_2.11-el7.parcel* /opt/cloudera/parcel-repo/
将上面生成的jar包copy至 cloudera/csd子目录下:
cd /opt/cloudera/csd/
cp FLINK-1.13.1.jar FLINK_ON_YARN-1.13.1.jar /opt/cloudera/csd/
vim /opt/flink-parcel/FLINK-1.13.1-BIN-SCALA_2.11_build/manifest.json
将下面的版本信息追加到/opt/cloudera/parcel-repo/manifest.json
3.在CDH中添加flink的parcel包
重启cm-server,令其识别到本地库
systemctl restart cloudera-scm-serve
打开CDH管理界面->集群->检查parcel包->flink->分配->激活
击CDH所管理的集群添加服务,在列表中找到flink,按提示添加启动并运行。
到这里启动会报错,做如下修改:
第一步,如未启动kerberos,清空security.kerberos.login.keytab和security.kerberos.login.principal这两个参数的值
第二步,需要添加依赖的hadoop包
三台节点都要执行下面操作
cd /opt/cloudera/parcels/FLINK-1.9.0-BIN-SCALA_2.12/lib/flink/lib
wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/2.6.5-7.0/flink-shaded-hadoop-2-uber-2.6.5-7.0.jar
配置path
export HADOOP_CLASSPATH=/opt/cloudera/parcels/FLINK/lib/flink/lib
重新运行,如某个节点报下面的错,暂无解决办法
报错 line 17: rotateLogFilesWithPrefix: command not found
vim /opt/cloudera/parcels/FLINK/lib/flink/bin/flink-yarn.sh
我的方法是:取消该节点的FY服务,重新启动Flink。基本3个节点能起1到2个Flink Yarn也能用
4.测试运行wordcount
/opt/cloudera/parcels/FLINK/lib/flink/bin/flink run \
-m yarn-cluster -yjm 1024 -ytm 4096 \
/opt/cloudera/parcels/FLINK/lib/flink/examples/batch/WordCount.jar
5.在yarn的web上running application里有
几个FY服务就有几个session会话,这个是常驻的。
主界面是上面问号的,说明CM无法监控到该服务的健康状况,其实该服务是可以使用的。有强迫症的,重启cluster即可。
6.报错自查
问题追溯:
vim /opt/cloudera/cm-agent/service/csd/csd.sh
里调用$CM_CSD_SCRIPT ,上面调用了source_parcel_environment
vim /opt/cloudera/cm-agent/service/common/cloudera-config.sh
里调用source_parcel_environment(){...}
每启动一次Flink Yarn服务,就会在/var/run/cloudera-scm-agent/process生成一个文件夹,本次测试启动的是836-xxx
vim /var/run/cloudera-scm-agent/process/836-flink_on_yarn-FLINK_YARN/scripts/control.sh
set ff=unix后 执行
sh /var/run/cloudera-scm-agent/process/836-flink_on_yarn-FLINK_YARN/scripts/control.sh start
报错 line 17: rotateLogFilesWithPrefix: command not found
vim /opt/cloudera/parcels/FLINK/lib/flink/bin/flink-yarn.sh
第17行
rotateLogFilesWithPrefix "$FLINK_LOG_DIR" "$FLINK_LOG_PREFIX"
第7行 "$bin"/config.sh
/opt/cloudera/parcels/FLINK/lib/flink/bin/config.sh
constructFlinkClassPath(){...}
sed -i 's/^M//g' /opt/cloudera/parcels/FLINK/lib/flink/bin/*
仍不能解决,经查验
git clone https://github.com/pkeropen/flink-parcel.git 这个仓库的sh脚本很多是dos格式的,定位到问题。网上很多错误都是来自这个仓库,万恶之源呐。
7.新Bug
1.已经启动好的FY竟然会挂掉,并报错如下
报错 line 17: rotateLogFilesWithPrefix: command not found
暂无解决办法。只有重新启动其他节点的FY服务。但这个节点后面再启动FY又能用了。
注意监控FY实例的状态。
\