Flink RocksDBStateBackend 问题

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Flink RocksDBStateBackend 问题

lvwenyuan
请教各位:
       RocksDBStateBackend 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答



 
Reply | Threaded
Open this post in threaded view
|

Re: Flink RocksDBStateBackend 问题

戴嘉诚
FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
FileSystem的吞吐就会比rocksdb会高

lvwenyuan <[hidden email]> 于2019年8月6日周二 上午11:39写道:

> 请教各位:
>        RocksDBStateBackend
> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: Flink RocksDBStateBackend 问题

athlon512@gmail.com
你说的是memsystem的状态数据存在jm内存中的filesystem是存到文件系统上的



[hidden email]
 
发件人: 戴嘉诚
发送时间: 2019-08-06 11:42
收件人: user-zh
主题: Re: Flink RocksDBStateBackend 问题
FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
FileSystem的吞吐就会比rocksdb会高
 
lvwenyuan <[hidden email]> 于2019年8月6日周二 上午11:39写道:
 
> 请教各位:
>        RocksDBStateBackend
> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>
>
>
>
Reply | Threaded
Open this post in threaded view
|

答复: Re: Flink RocksDBStateBackend 问题

戴嘉诚
        不是,文档上有说,filesystem是会把正在运行的数据存储在tm的内存中,然后触发checkpoint后,才会写入文件系统上,而rocksdb是直接把运行中的数据写到了rocksdb上,看样子是不占用运行中的tm的内存。

 https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/state/state_backends.html#the-fsstatebackend

`The FsStateBackend holds in-flight data in the TaskManager’s memory. Upon checkpointing, it writes state snapshots into files in the configured file system and directory. Minimal metadata is stored in the JobManager’s memory (or, in high-availability mode, in the metadata checkpoint).`

发件人: [hidden email]
发送时间: 2019年8月6日 11:53
收件人: user-zh
主题: Re: Re: Flink RocksDBStateBackend 问题

你说的是memsystem的状态数据存在jm内存中的filesystem是存到文件系统上的



[hidden email]
发件人: 戴嘉诚
发送时间: 2019-08-06 11:42
收件人: user-zh
主题: Re: Flink RocksDBStateBackend 问题
FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
FileSystem的吞吐就会比rocksdb会高
lvwenyuan <[hidden email]> 于2019年8月6日周二 上午11:39写道:
> 请教各位:
>        RocksDBStateBackend
> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Re: Flink RocksDBStateBackend 问题

Yun Tang
@lvwenyuan<mailto:[hidden email]>
首先需要明确的一点是,你这里的“FileSystem”指的究竟是checkpoint时存储数据的file system,还是FsStateBackend,建议下次提问前可以把需要咨询的内容表述清楚一些。

  *   如果指的是存储checkpoint数据的远程file system,在incremental checkpoint场景下,这些数据与RocksDB的创建checkpoint时刷写到本地的sst文件和meta文件是二进制相同的,只是文件名会重命名。如果是savepoint或者全量checkpoint场景下,这些数据是RocksDB中逐个有效entry的序列化内容。
  *   如果指的是FsStateBackend,对于Flink而言存储的数据内容在逻辑上肯定都是一样的,否则就不符合语义了。但是二者在数据存储格式上是有区别的。FsStateBackend所创建的HeapKeyedStateBackend的数据内容都是存储在Java heap内的,基本数据格式是StateTable[1]和其中存储数据的StateMap[2]。而RocksDB存储的数据主要是RocksDB native内存中的writer buffer(memtable),block cache,index&filter[3]和已经刷写到磁盘上默认采用snappy压缩的不可变sst文件构成。

[1] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateTable.java
[2] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateMap.java
[3] https://github.com/facebook/rocksdb/wiki/Memory-usage-in-RocksDB


祝好
唐云

________________________________
From: 戴嘉诚 <[hidden email]>
Sent: Tuesday, August 6, 2019 12:01
To: [hidden email] <[hidden email]>
Subject: 答复: Re: Flink RocksDBStateBackend 问题

        不是,文档上有说,filesystem是会把正在运行的数据存储在tm的内存中,然后触发checkpoint后,才会写入文件系统上,而rocksdb是直接把运行中的数据写到了rocksdb上,看样子是不占用运行中的tm的内存。

 https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/state/state_backends.html#the-fsstatebackend

`The FsStateBackend holds in-flight data in the TaskManager’s memory. Upon checkpointing, it writes state snapshots into files in the configured file system and directory. Minimal metadata is stored in the JobManager’s memory (or, in high-availability mode, in the metadata checkpoint).`

发件人: [hidden email]
发送时间: 2019年8月6日 11:53
收件人: user-zh
主题: Re: Re: Flink RocksDBStateBackend 问题

你说的是memsystem的状态数据存在jm内存中的filesystem是存到文件系统上的



[hidden email]
发件人: 戴嘉诚
发送时间: 2019-08-06 11:42
收件人: user-zh
主题: Re: Flink RocksDBStateBackend 问题
FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
FileSystem的吞吐就会比rocksdb会高
lvwenyuan <[hidden email]> 于2019年8月6日周二 上午11:39写道:
> 请教各位:
>        RocksDBStateBackend
> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re:Re: Re: Flink RocksDBStateBackend 问题

lvwenyuan
唐老师您好:
         我这里指的是checkpoint时存储数据的file system,这里我用的是HDFS。
        按照老师的说法,我可不可以这样理解(在Flink on yarn 以及 使用 RocksDBStateBackend 的场景下):
               1.做增量checkpoint的时候,taskmanager默认异步的将数据写入rocksdb和hdfs中(数据是相同的)。
               当taskmanager异常退出时,会启动另一个taskmanager去做task,那么新起的taskmanager是否会去hdfs上同步数据。
               那么这个rocksdb的意义是在哪里?数据反正HDFS上都有,而且HDFS本身也多副本。
               2.在做savepoint的时候,一般会将数据保存在HDFS上,那么这个是,我的命令是  flink cancel -s  。做完savepoint就退出,那么这个时候rocksdb还需要去写数据吗?因为做完savepoint,整个任务就结束了。


  望解答,谢谢老师!







在 2019-08-06 13:44:18,"Yun Tang" <[hidden email]> 写道:

>@lvwenyuan<mailto:[hidden email]>
>首先需要明确的一点是,你这里的“FileSystem”指的究竟是checkpoint时存储数据的file system,还是FsStateBackend,建议下次提问前可以把需要咨询的内容表述清楚一些。
>
>  *   如果指的是存储checkpoint数据的远程file system,在incremental checkpoint场景下,这些数据与RocksDB的创建checkpoint时刷写到本地的sst文件和meta文件是二进制相同的,只是文件名会重命名。如果是savepoint或者全量checkpoint场景下,这些数据是RocksDB中逐个有效entry的序列化内容。
>  *   如果指的是FsStateBackend,对于Flink而言存储的数据内容在逻辑上肯定都是一样的,否则就不符合语义了。但是二者在数据存储格式上是有区别的。FsStateBackend所创建的HeapKeyedStateBackend的数据内容都是存储在Java heap内的,基本数据格式是StateTable[1]和其中存储数据的StateMap[2]。而RocksDB存储的数据主要是RocksDB native内存中的writer buffer(memtable),block cache,index&filter[3]和已经刷写到磁盘上默认采用snappy压缩的不可变sst文件构成。
>
>[1] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateTable.java
>[2] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateMap.java
>[3] https://github.com/facebook/rocksdb/wiki/Memory-usage-in-RocksDB
>
>
>祝好
>唐云
>
>________________________________
>From: 戴嘉诚 <[hidden email]>
>Sent: Tuesday, August 6, 2019 12:01
>To: [hidden email] <[hidden email]>
>Subject: 答复: Re: Flink RocksDBStateBackend 问题
>
>        不是,文档上有说,filesystem是会把正在运行的数据存储在tm的内存中,然后触发checkpoint后,才会写入文件系统上,而rocksdb是直接把运行中的数据写到了rocksdb上,看样子是不占用运行中的tm的内存。
>
> https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/state/state_backends.html#the-fsstatebackend
>
>`The FsStateBackend holds in-flight data in the TaskManager’s memory. Upon checkpointing, it writes state snapshots into files in the configured file system and directory. Minimal metadata is stored in the JobManager’s memory (or, in high-availability mode, in the metadata checkpoint).`
>
>发件人: [hidden email]
>发送时间: 2019年8月6日 11:53
>收件人: user-zh
>主题: Re: Re: Flink RocksDBStateBackend 问题
>
>你说的是memsystem的状态数据存在jm内存中的filesystem是存到文件系统上的
>
>
>
>[hidden email]
>发件人: 戴嘉诚
>发送时间: 2019-08-06 11:42
>收件人: user-zh
>主题: Re: Flink RocksDBStateBackend 问题
>FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
>FileSystem的吞吐就会比rocksdb会高
>lvwenyuan <[hidden email]> 于2019年8月6日周二 上午11:39写道:
>> 请教各位:
>>        RocksDBStateBackend
>> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>>
>>
>>
>>
>
Reply | Threaded
Open this post in threaded view
|

Re: Re:Re: Re: Flink RocksDBStateBackend 问题

Yun Tang

  1.  你对增量checkpoint的理解以及taskmanager和RocksDB之间的关系理解不太对。RocksDBKeyedStateBackend使用RocksDB存储state数据,可以理解成其是taskmanager的一部分,实际上是单机的概念。增量checkpoint的时候,RocksDB会在同步阶段将其所有数据刷写到磁盘上,Flink框架选择之前没有上传的sst文件,异步上传到HDFS。如果没有开启local recovery,那么新启动的taskmanager会从hdfs上下载全量的数据文件进行恢复。
  2.  作业cancel了,task都会cancel,RocksDBKeyedStateBackend自然也会退出。

祝好
唐云
________________________________
From: lvwenyuan <[hidden email]>
Sent: Tuesday, August 6, 2019 14:53
To: [hidden email] <[hidden email]>
Subject: Re:Re: Re: Flink RocksDBStateBackend 问题

唐老师您好:
         我这里指的是checkpoint时存储数据的file system,这里我用的是HDFS。
        按照老师的说法,我可不可以这样理解(在Flink on yarn 以及 使用 RocksDBStateBackend 的场景下):
               1.做增量checkpoint的时候,taskmanager默认异步的将数据写入rocksdb和hdfs中(数据是相同的)。
               当taskmanager异常退出时,会启动另一个taskmanager去做task,那么新起的taskmanager是否会去hdfs上同步数据。
               那么这个rocksdb的意义是在哪里?数据反正HDFS上都有,而且HDFS本身也多副本。
               2.在做savepoint的时候,一般会将数据保存在HDFS上,那么这个是,我的命令是  flink cancel -s  。做完savepoint就退出,那么这个时候rocksdb还需要去写数据吗?因为做完savepoint,整个任务就结束了。


  望解答,谢谢老师!







在 2019-08-06 13:44:18,"Yun Tang" <[hidden email]> 写道:

>@lvwenyuan<mailto:[hidden email]>
>首先需要明确的一点是,你这里的“FileSystem”指的究竟是checkpoint时存储数据的file system,还是FsStateBackend,建议下次提问前可以把需要咨询的内容表述清楚一些。
>
>  *   如果指的是存储checkpoint数据的远程file system,在incremental checkpoint场景下,这些数据与RocksDB的创建checkpoint时刷写到本地的sst文件和meta文件是二进制相同的,只是文件名会重命名。如果是savepoint或者全量checkpoint场景下,这些数据是RocksDB中逐个有效entry的序列化内容。
>  *   如果指的是FsStateBackend,对于Flink而言存储的数据内容在逻辑上肯定都是一样的,否则就不符合语义了。但是二者在数据存储格式上是有区别的。FsStateBackend所创建的HeapKeyedStateBackend的数据内容都是存储在Java heap内的,基本数据格式是StateTable[1]和其中存储数据的StateMap[2]。而RocksDB存储的数据主要是RocksDB native内存中的writer buffer(memtable),block cache,index&filter[3]和已经刷写到磁盘上默认采用snappy压缩的不可变sst文件构成。
>
>[1] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateTable.java
>[2] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateMap.java
>[3] https://github.com/facebook/rocksdb/wiki/Memory-usage-in-RocksDB
>
>
>祝好
>唐云
>
>________________________________
>From: 戴嘉诚 <[hidden email]>
>Sent: Tuesday, August 6, 2019 12:01
>To: [hidden email] <[hidden email]>
>Subject: 答复: Re: Flink RocksDBStateBackend 问题
>
>        不是,文档上有说,filesystem是会把正在运行的数据存储在tm的内存中,然后触发checkpoint后,才会写入文件系统上,而rocksdb是直接把运行中的数据写到了rocksdb上,看样子是不占用运行中的tm的内存。
>
> https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/state/state_backends.html#the-fsstatebackend
>
>`The FsStateBackend holds in-flight data in the TaskManager’s memory. Upon checkpointing, it writes state snapshots into files in the configured file system and directory. Minimal metadata is stored in the JobManager’s memory (or, in high-availability mode, in the metadata checkpoint).`
>
>发件人: [hidden email]
>发送时间: 2019年8月6日 11:53
>收件人: user-zh
>主题: Re: Re: Flink RocksDBStateBackend 问题
>
>你说的是memsystem的状态数据存在jm内存中的filesystem是存到文件系统上的
>
>
>
>[hidden email]
>发件人: 戴嘉诚
>发送时间: 2019-08-06 11:42
>收件人: user-zh
>主题: Re: Flink RocksDBStateBackend 问题
>FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
>FileSystem的吞吐就会比rocksdb会高
>lvwenyuan <[hidden email]> 于2019年8月6日周二 上午11:39写道:
>> 请教各位:
>>        RocksDBStateBackend
>> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>>
>>
>>
>>
>