flinkx standalone模式运行
一、搭建环境
本地一台Windows电脑(git、maven、idea等装备齐全),三台服务器flinkx1、flinkx2、flinkx3(数量不限,一台也行)
首先确保所有机器都已安装java8或以上,配置好环境变量JAVA_HOME;服务器之间已开启ssh免密登陆,如果是一台服务器那就不需要了
安装目标:
jobmanager:flinkx1
taskmanager:flinkx1、flinkx2、flinkx3
part1:clone flinkx代码到本地
git clone https://github.com/DTStack/flinkx.git
part2:编译打包
mvn clean package -DskipTests
对于不需要的插件,可以修改$FLINKX_HOME目录下的pom文件,将不需要的模块和flinkx-test模块注释掉,在编译时将不会编译该插件,这样可以缩短编译时间。需要注意部分module之间存在依赖关系,根据Maven报错信息取消所需module的注释
part3:下载flink
同样是在上述pom文件中,找到对应的flink版本,在flink官网下载flink
part4:配置flink
将下载好的压缩包上传到flinkx1事先创建好的目录/data下,解压缩
tar -zxvf flink-1.10.1-bin-scala_2.11.tgz
进入flink的conf目录,编辑flink-conf.yaml文件
#jobmanager RPC地址,修改为flinkx1的主机名或ip
jobmanager.rpc.address: flinkx1
#配置checkpoint,对应flinkx断点续传功能,如用到需配置,以使用hdfs为例
#
#flink状态后端用来区分状态的存储方式和存储位置,选择filesystem
state.backend: filesystem
#状态后端的存储目录
state.backend.fs.checkpointdir: hdfs://namenode:9000/flinkx110/checkpoints/backend
#存储checkpoint的数据文件和元数据的目录
state.checkpoints.dir: hdfs://namenode:9000/flinkx110/checkpoints/metadata
#savepint的存储目录
state.savepoints.dir: hdfs://namenode:9000/flinkx110/savepoints
#checkpoint的默认保留数量
state.checkpoints.num-retained: 20
#还可以设置以下配置,类加载优先级和分配jobmanager、taskmanager内存大小
# Child first classloading allows users to use different dependency/library
# versions in their application than those in the classpath. Switching back
# to 'parent-first' may help with debugging dependency issues.
classloader.resolve-order: child-first
# The heap size for the JobManager JVM
jobmanager.heap.size: 1024m
# The total process memory size for the TaskManager.
taskmanager.memory.process.size: 2048m
#其他设置有需要再添加
还是conf目录,编辑masters文件,设置jobmanager的主机名或ip
flinkx1
编辑slaves文件,设置taskmanager 主机名或ip
flinkx1
flinkx2
flinkx3
part5:下载flink shade包
下载对应Hadoop版本的flink shade包,放入$FLINK_HOME/lib目录下(从flink1.11开始官方不再提供打包好的flink shade包,需要自行下载打包)
part6:拷贝
使用scp命令将flink目录拷贝到flinkx2、flinkx3相同路径下
scp -rp /data/flink-1.10.1 remote_username@flinkx2:/data
使用scp命令将Windows中编译的插件上传至flinkx1、flinkx2、flinkx3相同路径下,需要上传的目录有:$FLINKX_HOME/bin、$FLINKX_HOME/lib、以及$FLINKX_HOME/syncplugins或$FLINKX_HOME/plugins目录
scp -rp $FLINKX_HOME/bin remote_username@flinkx1:/data/flinkx
...
同理在flinkx1、flinkx2、flinkx3相同路径下放置任务脚本json文件,任务脚本的配置规则参考github上项目的介绍页面
{
"job": {
"content": [
{
"reader": {
"parameter": {
"username": "username",
"password": "password",
"connection": [{
"jdbcUrl": ["jdbc:oracle:thin:@//127.0.0.1:1521/oracle"],
"table": ["TABLES"]
}],
"column": ["ID","NAME"],
"customSql": "",
"where": "",
"splitPk": "",
"fetchSize": 1024,
"queryTimeOut": 1000,
"requestAccumulatorInterval": 2
},
"name": "oraclereader"
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "username",
"password": "password",
"connection": [
{
"jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&characterEncoding=utf8"],
"table": ["students"]
}
],
"preSql": [],
"postSql": [],
"writeMode": "insert",
"column": ["id","name"],
"batchSize": 1024
}
}
}
],
"setting": {
"speed": {
"channel": 1,
"bytes": 0
},
"errorLimit": {
"record": 1
},
"restore": {
"maxRowNumForCheckpoint": 0,
"isRestore": false,
"restoreColumnName": "",
"restoreColumnIndex": 0
},
"log" : {
"isLogger": false,
"level" : "debug",
"path" : "",
"pattern":""
}
}
}
}
ps:由于Windows和Linux文件格式的差异,$FLINKX_HOME/bin/flinkx启动脚本在执行时会报找不到文件,需将此文件设置fileformat=unix
到此,环境搭建工作完成
二、运行任务
part1:启动集群
进入flink的bin目录运行start-cluster.sh
part2:进入web页面,flinkx1:8081(8081是flink web默认端口)
可以看到集群信息:
part3:运行任务
进入flinkx目录,运行命令:
bin/flinkx -mode standalone \
-job /data/flinkx/jobs/oraclereader_mysqlwriter.json \
-pluginRoot /data/flinkx/syncplugins \
-flinkconf /data/flink-1.10.1/conf \
-confProp "{\"flink.checkpoint.interval\":60000}"
任务运行成功,oracle数据成功写入mysql:
part4:关闭集群
进入flink的bin目录运行stop-cluster.sh