Flink的RocksDBStateBackend一些使用经验

Flink的RocksDBStateBackend一些使用经验

一、idea依赖

RocksDBStateBackend是Flink中内置的第三方状态管理器,和其他两种(MemoryStateBackend和FsStateBackend)不同,使用时需添加相关依赖:

  <dependency>
         <groupId>org.apache.flink</groupId>
         <artifactId>flink-statebackend-rocksdb_2.11</artifactId>
         <version>1.7.0</version>
  </dependency>

二、flink配置文件
1.全局配置:
flink可以通过flink-conf.yaml 配置原因全局配置state backend。
使用 state.backend 选项进行state backend类型配置:可选值包括: jobmanager (MemoryStateBackend), filesystem (FsStateBackend), rocksdb (RocksDBStateBackend)。
使用state.checkpoints.dir选项设置checkpoints数据和元数据文件。

要打开它可以在flink-conf.yaml中配置:

# The backend that will be used to store operator state checkpoints
state.backend: rocksdb
# Directory for storing checkpoints
state.checkpoints.dir: hdfs://JT-1-60:9000/statebackend/rocksDB
Hdfs地址:hdfs://JT-1-60:9000/statebackend/rocksDB
#开启增量checkpoints机制
state.backend.incremental: true

一些配置参数及注释:

state.backend.rocksdb.checkpoint.transfer.thread.num: 1
#本地存储地址,在task节点上
state.backend.rocksdb.localdir: /opt/rockdb/flink/checkpoints
state.backend.rocksdb.timer-service.factory: HEAP

state.backend.rocksdb.checkpoint.transfer.thread.num: 用于指定同时可以操作RocksDBStateBackend的线程数量,默认是1,如果状态量比较大可以将此参数适当增大。
state.backend.rocksdb.localdir:用于指定RocksDB存储状态数据的本地文件路径,在每个TaskManager提供该路径节点中的状态存储。
state.backend.rocksdb.timer-service.factory:用于指定定时器服务的工厂类实现类,默认为“HEAP”,也可以指定为“RocksDB”
将配置选项设置state.backend.rocksdb.timer-service.factory为heap(而不是默认值rocksdb)以将计时器存储在堆上。
注意:标红为必配配置。
2.单任务配置
单任务配置
官方建议是配置全局的状态后端管理,若配置单任务(通过env.setStateBackend(…)单独调整state backend配置)这种方式会覆盖全局配置。
三、一些踩坑的总结
1.开启检查点
在这里插入图片描述
2.单任务配置已过时,不推荐使用,本地运行会报错,所以使用时放到集群运行,配置全局配置。
3.关于配置profile文件
在这里插入图片描述
参照官网解读,整合hadoop的使用大致如下
(https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/hadoop.html)

为了使用Hadoop功能(例如YARN,HDFS),必须为Flink提供所需的Hadoop类,因为默认情况下未捆绑这些类。
这可以通过以下步骤来完成:
1)将Hadoop类路径添加到Flink
2)将所需的jar文件放入Flink发行版的/ lib目录中
选项1)只需很少的工作,可以与现有的Hadoop设置很好地集成在一起,应该是首选方法。但是,Hadoop的依赖项占用量很大,这增加了发生依赖项冲突的风险。如果发生这种情况,请参阅选项2)。

具体操作:

(1)添加Hadoop类路径
Flink将使用环境变量HADOOP_CLASSPATH来增加启动Flink组件(例如Client,JobManager或TaskManager)时使用的类路径。默认情况下,大多数Hadoop发行版和云环境不会设置此变量,因此,如果Flink选择Hadoop类路径,则必须在运行Flink组件的所有计算机上导出环境变量。
export HADOOP_CLASSPATH=hadoop classpath
请注意,这hadoop是hadoop二进制文件,并且classpath是一个参数,它将使它打印配置的Hadoop类路径。
将Hadoop配置与Hadoop库放在相同的类路径中,使Flink可以选择该配置。
(2)将Hadoop添加到/ lib
Flink项目发布了特定版本的Hadoop发行版,该发行版重新定位或排除了多个依赖项,以减少依赖项冲突的风险。这些可以在下载页面的“ 其他组件”部分中找到。对于这些版本,下载相应的Pre-bundled Hadoop组件并将其放入/libFlink分发目录中就足够了。
如果下载页面上未列出使用的Hadoop版本(可能由于是特定于供应商的版本),则有必要针对该版本构建flink阴影。您可以在下载页面的“ 其他组件”部分中找到该项目的源代码。
注意如果你想建立flink-shaded对供应商特定的Hadoop版本,您必须首先描述配置特定供应商的Maven仓库在本地Maven安装在这里。
运行以下命令以flink-shaded针对所需的Hadoop版本(例如version 2.6.5-custom)进行构建和安装:
mvn clean install -Dhadoop.version=2.6.5-custom
完成此步骤后,将flink-shaded-hadoop-2-uberjar放入/libFlink分发目录中。
flink-shaded-hadoop-2-uberjar下载地址:
https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/
或者官网:
https://flink.apache.org/downloads.html#additional-components其他组件中下载。
目前只整合到Hadoop2.8.3和flink1.10.0版本。
Hadoop其他版本可以直接执行maven命令进行操作。添加完如下:在flink的lib下:
在这里插入图片描述

四、使用
使用时,jar包运行时,可查看namenode:50070地址查看hdfs路径下的文件变化
Rocksdb一般时先在本地路径下进行存储,再进行flush到hdfs中
本地:
在这里插入图片描述
Hdfs下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
五、故障恢复
1.手动添加保存点savepoint
Savepoint是checkpoint的一种特殊实现,可用于在升级和维护集群过程中保存系统的状态。
(1)TargetDirectory配置
在flink配置文件flink-conf.yaml中配置
在这里插入图片描述
Savepoint目录构成:
在这里插入图片描述
注意:在手动恢复时,指定路径到JobID即可,系统会自动获取内部metadata文件进行解析处理。例:
./flink run -s hdfs://jt-1-60:9000/savepoints/rocksDB/savepoint-cc4e9d-5de0e2088f20 -c com.clue.dimension.service.state.stateDimensionTest /opt/module/dimensionTest-1.0-SNAPSHOT-jar-with-dependencies.jar
(2)命令行操作
①手动触发savepoint
bin/flink savepoint jobid [targetDirectory]
Jobid:每个job生成时的唯一id
targetDirectory:保存点路径,如果全局已经配置,可以不指定,会默认使用全局配置路径
②取消任务并触发savepoint
Bin/flink cancel -s [targetDirectory] jobid
Jobid:每个job生成时的唯一id
targetDirectory:保存点路径,如果全局已经配置,可以不指定,会默认使用全局配置路径
③手动从savepoint恢复任务
Bin/flink run -s savepointPath [runArgs]
-s 后面指定保存点路径
后面可加运行jar的参数

例:

./flink run  -s hdfs://jt-1-60:9000/savepoints/rocksDB/savepoint-cc4e9d-5de0e2088f20 -c com.clue.dimension.service.state.stateDimensionTest  /opt/module/dimensionTest-1.0-SNAPSHOT-jar-with-dependencies.jar

注意:恢复后和恢复前可能状态中算子会产生改变(例如修改或者删除某个算子),这时就会出现任务不能恢复的情况,此时可以通过加入参数 --n(–allowNonRestoredState)设置忽略状态无法匹配的问题。
(3)指定算子唯一ID
Operator id配置
在这里插入图片描述
2.手动从checkpoint恢复
这里与savepoint类似,但是目录构成有些差别
在这里插入图片描述
增量状态数据存入在chk-*的文件下

所以恢复时也要多一级目录
例:

./flink run  -s hdfs://jt-1-60:9000/checkpoints/rocksDB/8be09fd065541e0e5c8027af4ee12912/chk-50 -c com.clue.dimension.service.state.stateDimensionTest  /opt/module/dimensionTest-1.0-SNAPSHOT-jar-with-dependencies.jar

俩种手动方式都可以实现,集群挂机后重新读取状态数据进行恢复任务。

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值