本文说明如何在已有的cdh集群上添加flink服务。分为如下几步进行说明:

1.环境说明

2.flink-parcel的制作

3.cm添加flink-parcel

4.cm上添加flink服务

5.验证

环境说明

flink 向 ck 写数据 flink cancel_jar

flink-parcel制作

前提:在制作flink-parcel的时候保证git、maven已安装并可以访问外网。

       制作分为如下步骤:

1)下载制作包

执行命令:git clone https://github.com/pecanNBU/flink-parcel.git

2)修改配置文件

修改flink-parcel.properties配置文件,修改内容如下图:

flink 向 ck 写数据 flink cancel_cloudera_02

详细内容见附件。

3)生成parcel文件

执行命令:./build.sh parcel 执行成功后会在FLINK-1.9.1-BIN-SCALA_2.11_build路径下生成如下三个文件:

FLINK-1.9.1-BIN-SCALA_2.11-el7.parcel 
FLINK-1.9.1-BIN-SCALA_2.11-el7.parcel.sha 
manifest.json

执行中可能出现的问题:

1:无法下载maven-jar-plugin等插件

因为网络的原因,检查网络或换成本地虚拟机进行生成

2:无法下载flink-1.9.1-bin-scala_2.11.tgz

flink-parcel.properties配置文件中的FLINK_UR配置项配置的url无法下载,可以通过flink官网上查找下载地址(https://flink.apache.org/downloads.html)

4)生成csd文件

on yarn 版本

执行命令:./build.sh csd_on_yarn 执行成功后会生成FLINK_ON_YARN-1.9.1.jar文件。

standalone 版本

命令:./build.sh csd_standalone

cm添加flink

1)拷贝文件

将FLINK_ON_YARN-1.9.1.jar文件拷贝到cloudera-server所在主机的/opt/cloudera/csd/路径下,不存在该路径就手动进行创建。

将FLINK-1.9.1-BIN-SCALA_2.11-el7.parcel、FLINK-1.9.1-BIN-SCALA_2.11-el7.parcel.sha、manifest.json三个文件拷贝到cloudera-server所在主机的/opt/cloudera/parcel-repo/路径下,不存在该路径就手动进行创建,如果该路径下存在manifest.json则将该文件重命名之后再进行拷贝。

2)cm管理界面添加flink-parcel

步骤如下:

flink 向 ck 写数据 flink cancel_cloudera_03

flink 向 ck 写数据 flink cancel_flink 向 ck 写数据_04

flink 向 ck 写数据 flink cancel_jar_05

分别执行“分配”、“激活”。在右侧’停用’按钮在未分配未激活前为”分配”按钮。

3)添加flink服务

分配、激活完flink-parcel之后添加flink服务,如下:

flink 向 ck 写数据 flink cancel_cloudera_06

flink 向 ck 写数据 flink cancel_cloudera_07

执行中可能出现的问题:

1:分配、激活flink-parcel之后在添加服务界面上找不到flink服务,日志提示:Range [CDH 4.0.0‥CDH 6.0.0) does not enclose compatibility range [CDH 5‥CDH 7.0.0)

因为本次搭建的cdh集群版本为5.15.1,而生成的flink-parcel文件要求的版本在[CDH 5‥CDH 7.0.0)范围内,超出了本地cdh集群运行的范围[CDH 4.0.0‥CDH 6.0.0)。

将flink-parcel.properties配置文件中的CDH 小版本和CDH 大版本配置在已存在cdh集群的范围内,重新生成parcel。

2:在重新拷贝parcel到cdh中cm界面中parcel激活一直卡住

用cm提供的api接口手动将卡住的parcel返回到激活之前的状态,操作步骤如下:

获取cdh集群名称:

curl -u ${username}:${password} 'http://${cloudera-managerIP}/api/v1/clusters'

执行回滚激活状态:

curl -u ${username}:${password} -X POST http://10.121.37.9:7180/api/v16/clusters/${clusterName}/parcels/products/${PARCEL名称}/versions/${PARCEL版本}/commands/deactivate

启动flink服务

添加完服务之后直接在cm管理界面中进行启动操作。启动成功后会在yarn上启动一个容器,如下图所示:

flink 向 ck 写数据 flink cancel_flink_08

执行中可能出现的问题:

1:启动报错,查看/var/log/flink/flink-yarn.out日志提示classnofound错误

因为缺少jar,将缺少的jar包从/opt/cloudera/parcels/CDH/jars路径拷贝到/opt/cloudera/parcels/FLINK-1.9.1-BIN-SCALA_2.11/lib/flink/lib/路径下。可能会缺少多个jar,需要反复重启->查看日志进行确定,本次搭建缺少的jar如下:

commons-configuration-1.6.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
guava-11.0.2.jar
hadoop-auth-2.6.0-cdh5.15.1.jar
hadoop-common-2.6.0-cdh5.15.1.jar
hadoop-hdfs-2.6.0-cdh5.15.1.jar
hadoop-yarn-api-2.6.0-cdh5.15.1.jar
hadoop-yarn-client-2.6.0-cdh5.15.1.jar
hadoop-yarn-common-2.6.0-cdh5.15.1.jar
htrace-core4-4.0.1-incubating.jar
log4j-1.2.17.jar
protobuf-java-2.5.0.jar
slf4j-log4j12-1.7.15.jar

验证

通过执行flink自带的workcout程序进行验证。执行如下命令:

/opt/cloudera/parcels/FLINK-1.9.1-BIN-SCALA_2.11/lib/flink/bin/flink run -yid application_1568019723575_0007 ./examples/batch/WordCount.jar -input hdfs://szpbs-bjmap-dev-app14:8020/tmp/LICENSE -output hdfs://szpbs-bjmap-dev-app14:8020/tmp/wordcount-result_1.txt

执行成功后会在hsfs的/tmp路径下生成wordcount-result_1.txt文件。

注意:

1.-yid通过yarn的webui进行查看

2.要确保hdfs上有LICENSE文件,不存在可以自行拷贝到hdfs上。

3.要确保执行该命令的用户在hdfs上的/tmp有写权限。

其他

/opt/cloudera/parcels/FLINK-1.9.1-BIN-SCALA_2.11/lib/flink/bin/flink-yarn.sh 脚本中添加其他启动参数,如下图:

flink 向 ck 写数据 flink cancel_cloudera_09

附件

flink-parcel.properties

#FLINk 下载地址
FLINK_URL=http://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.9.1/flink-1.9.1-bin-scala_2.11.tgz
 
#flink版本号
FLINK_VERSION=1.9.1
 
#扩展版本号
EXTENS_VERSION=BIN-SCALA_2.11
 
#操作系统版本,以centos为例
OS_VERSION=7
 
#CDH 小版本
CDH_MIN_FULL=5.2
CDH_MAX_FULL=6.0
 
#CDH大版本
CDH_MIN=5
CDH_MAX=5

    今天的分享就到这,有看不明白的地方一定是我写的不够清楚,所有欢迎提任何问题以及改善方法。