Skip to content

文件系统

wangqi edited this page Jun 18, 2022 · 6 revisions

文件系统

在大数据体系中,需要稳定可靠、高吞吐、廉价的存储系统支持海量数据的存储和访问,而 HDFS 和对象存储以其海量、弹性、低价的高性能存储支撑了大数据、机器学习体系,为数据的管理、分析、归档、备份提供可靠支持。

在 flink 中,文件系统负责承担了很多重要的功能,如 checkpoint 和 savepoint,读取和存储数据。flink 提供了文件系统抽象和实现,如本地机器的文件系统,HDFS 兼容的存储系统,对象存储如 S3、OSS 等。

scaleph 系统也需要文件系统存储任务程序,如 jar 包,sql 文件,udf 等。

scaleph 集成 flink 的 FileSystem 抽象和其实现以满足自身的存储需要。

flink

checkpoint

flink checkpoint 的实现有 2 个:

  • JobManagerCheckpointStorage。存储在 JobManager 的堆内存中,当未配置 checkpoint 存储路径时启用。
  • FileSystemCheckpointStorage
state.checkpoints.dir: hdfs:///checkpoints/

state backends

state backend 的实现也有 2 个:

  • HashMapStateBackend。默认启用,将 state 数据存储在堆内存中。
  • EmbeddedRocksDBStateBackend。支持增量 checkpoint,将数据存储在 RocksDB 中。

hashmap 配置:

state.backend: hashmap
state.checkpoints.dir: file:///checkpoint-dir/

rocksdb 配置:

state.backend: rocksdb
state.backend.incremental: true
state.checkpoints.dir: hdfs:///checkpoints/

savepoints

state.savepoints.dir: hdfs:///flink/savepoints

HA

high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory
high-availability.storageDir: s3://flink/recovery

scaleph

flink

  • checkpoint。{home}/flink/namespaces/{namespace}/jobs/{projectId}/{jobId}/checkpoints/
  • state backends。{home}/flink/namespaces/{namespace}/jobs/{projectId}/{jobId}/state-backends/
  • savepoint。{home}/flink/namespaces/{namespace}/jobs/{projectId}/{jobId}/savepoints/
  • ha。{home}/flink/namespaces/{namespace}/jobs/{projectId}/{jobId}/ha/

release

flink,seatunnel 等 release 包存储目录:

  • flink。{home}/release/flink/
  • seatunnel。{home}/release/seatunnel/

dependency

任务和 flink 运行依赖,如 jdbc 驱动。

  • dependency。{home}/dependency/

job

任务存储。比如 artifact 包任务,sql + udf 任务。

  • artifact。{home}/job/artifact/
  • sql。{home}/job/sql/
  • udf。{home}/job/udf/

todo

  • 多文件系统支持。目前 scaleph 以 s3, hdfs 这种分布式,持久存储的支持为主,对于文件系统中存储的数据,往往需要先下载到本地,使用完毕后删除。文件系统现需要同时支持远端和本地,当本地存在时,自动使用本地存储的文件,不存在时尝试从远端下载。
  • 云原生文件系统支持。ceph,juicefs,alluxio,curve 等云原生文件系统支持。通过 posix 标准接口直接将远端文件挂载到容器中。