Flink|《Flink 官方文档 - 内幕 - 文件系统》学习笔记

这篇具有很好参考价值的文章主要介绍了Flink|《Flink 官方文档 - 内幕 - 文件系统》学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习文档:内幕 - 文件系统

学习笔记如下:


Flink 文件系统

Flink 通过 org.apache.flink.core.fs.FileSystem 实现了文件系统的抽象。这种抽象提供了一组通用的操作,以支持使用各类文件系统。

为了支持众多的文件系统,FileSystem 的可用操作集非常有限。例如,不支持对现有文件进行追加或修改。

文件系统会添加一个 “文件系统方案” 标识,如 file://HDFS:// 等。

Flink 支持以下文件系统:

  • file:机器的本地文件系统

其他通过 Apache Hadoop 组件连接的文件系统包括但不限于:HDFS;s3、s3n、s3a(亚马逊 S3 文件系统)、gcs(谷歌云存储)……

如果 Flink 在类路径或 fs.hdfs.hadoopconf 中找到了 Hadoop 配置,那么它就会加载 Hadoop 的文件系统。

持久化保证(Persistence Guarantees)

Flink 文件系统用于持久化存储数据,包括存储应用程序的结果以及容错和恢复。

持久化保障的定义

写入输出流的是持久的,要求满足以下两个条件:

  1. 可见性(Visibility)要求:只要给出绝对文件路径,那么其他访问该文件的进程、机器、虚拟机、容器均能得到一致的数据。但是对于一些最终一致的文件系统来说,对文件父目录的更新并不要求可见性。
  2. **持久性(Durability)要求:**在何种程度上能够保证数据不会丢失。例如,当出现硬件或系统崩溃时,本地文件系统无法保证,而复制分布式文件系统(例如 HDFS)通常在存在 n 个并发节点故障的情况下保证,其中 n 是复制因子。

一旦调用 FSDataOutputStream.close() 返回,那么 FSDataOutputStream 就必须保证写入字节数据的持久性。

容错的分布式文件系统

对于容错分布式文件系统,数据一旦被文件系统接收并确认,通常通过复制到一定数量的机器(持久性要求),此外,绝对文件路径必须对所有其他可能访问该文件的机器可见(可见性要求)。

数据在存储节点上如何实现持久性取决于特定文件系统的具体保障方法。

文件父目录的元数据更新不需要实现一致。只要所有节点都可以通过绝对路径访问文件,在列出父目录的内容时,允许一些机器看到文件,而其他机器看不到。

本地文件系统

对于本地文件系统,必须支持 POSIX 的 close-to-open(flush-on-close)一致性语义。由于本地文件系统没有任何容错保证,因此没有进一步的要求。

对于本地文件系统的角度来说,已保存的文件可能仍然在操作系统的缓存中。因此,会导致操作系统缓存丢失的崩溃都是致命的,Flink的本地文件系统也不能保证避免这个问题。

这意味着,只写入本地文件系统的计算结果、检查点和保存点不能保证在本地机器发生故障时可以恢复,这使得本地文件系统不适合生产环境。

更新文件内容

许多文件系统要么根本不支持覆盖现有文件的内容,要么在这种情况下不支持更新内容的一致可见性。因此,Flink 的文件系统不支持向现有文件中追加内容,也不支持在输出流中查找以在同一个文件中更改以前写入的数据。

覆盖文件内容

覆盖文件通常是可行的。一个文件的覆盖可以通过删除它然后再创建一个新文件。但是,有些文件系统无法使这样的更改对所有有权访问改文件的各方同步可见。例如,Amazon S3 仅保证文件替换可见性的最终一致性,有些机器会看到旧文件,有些机器会看到新文件。

为了避免这些一致性问题,Flink 中故障 / 恢复机制的实现严格避免同一文件路径被多次写入。

线程安全

文件系统必须是线程安全的:同一个 FileSystem 实例会被 Flink 的多个线程共享,因此必须能够支持同时创建输入 / 输出流和列出文件元数据。

FSDataInputStream FSDataOutputStream 的实现严格来说不是线程安全的。在读取或写入操作之间,流的实例也不应在线程之间传递,因为无法保证操作在线程之间的可见性。文章来源地址https://www.toymoban.com/news/detail-774384.html

到了这里,关于Flink|《Flink 官方文档 - 内幕 - 文件系统》学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink|《Flink 官方文档 - DataStream API - 算子 - 窗口》学习笔记

    学习文档:《Flink 官方文档 - DataStream API - 算子 - 窗口》 学习笔记如下: 窗口(Window):窗口是处理无界流的关键所在。窗口可以将数据流装入大小有限的 “桶” 中,再对每个 “桶” 加以处理。 Keyed Windows 在 Keyed Windows 上使用窗口时,要调用 keyBy(...) 而后再调用 window(..

    2024年01月18日
    浏览(48)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 Flink 进程的内存》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 配置 Flink 进程的内存》 学习笔记如下: Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)

    2024年01月21日
    浏览(50)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》 学习笔记如下: Flink 中每条消息都会被放到网络缓冲(network buffer) 中,并以此为最小单位发送到下一个 subtask。 Flink 在传输过程的输入端和输出端使用了网络缓冲队列,即每个 subtask 都有一个输入队列来接收

    2024年01月21日
    浏览(57)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 TaskManager 内存》学习笔记

    学习文档:Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 TaskManager 内存》学习笔记 学习笔记如下: Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。其中,Flink 总内存(Total Flink Memory)包括 JV

    2024年03月15日
    浏览(46)
  • Flink|《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》 学习笔记如下: 当前,用户可以通过 CLI 提交 PyFlink 作业。对于通过 flink run 提交的 Python 作业,Flink 会执行 python 命令。因此,在启动 Python 作业前,需要先确定当前环境中的 python 命令指向 3.7+ 版本的 Pyt

    2024年02月22日
    浏览(65)
  • Flink|《Flink 官方文档 - DataStream API - 状态与容错 - 使用状态》学习笔记

    学习文档:Flink 官方文档 - DataStream API - 状态与容错 - 使用状态 相关文档: 有状态流处理背后的概念:Flink|《Flink 官方文档 - 概念透析 - 有状态流处理》学习笔记 Redis 过期 key 的删除机制:Redis|过期 key 的删除机制 学习笔记如下: 如果要使用键控状态,则必须要为 DataS

    2024年02月03日
    浏览(44)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记

    学习文档: 《Flink 官方文档 - 部署 - 内存配置 - 调优指南》 《Flink 官方文档 - 部署 - 内存配置 - 常见问题》 学习笔记如下: 独立部署模式(Standalone Deployment)下的内存配置 通常无需配置进程总内存,因为不管是 Flink 还是部署环境都不会对 JVM 开销进行限制,它只与机器的

    2024年02月19日
    浏览(45)
  • Flink|《Flink 官方文档 - DataStream API - 用户自定义 Functions》学习笔记 + 源码分析

    学习文档:Flink 官方文档 - DataStream API - 用户自定义 Functions 学习笔记如下: 用户可以通过实现接口来完成自定义 Functions。 实现接口并使用的样例: 使用匿名类实现的样例: 使用 Lambda 表达式实现(Java 8)样例: 所有的 Flink 函数类都有其 Rich 版本,在 Rick function 中,可以获

    2024年01月18日
    浏览(48)
  • 学习笔记-elstaciElasticSearch7.17官方文档

    特征 适用于所有 Elasticsearch API 的强类型请求和响应。 所有 API 的阻塞和异步版本。 在创建复杂的嵌套结构时,使用流畅的构建器和功能模式允许编写简洁但可读的代码。 通过使用对象映射器(例如 Jackson 或任何 JSON-B 实现)无缝集成应用程序类。 将协议处理委托给一个 h

    2024年02月14日
    浏览(46)
  • Flink学习笔记(三):Flink四种执行图

    Flink 中的执行图可以分成四层: StreamGraph - JobGraph - ExecutionGraph - Physical Graph 。 StreamGraph(数据流图) :是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。 JobGraph(作业图) :StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主

    2024年01月17日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包