代码之家  ›  专栏  ›  技术社区  ›  Ged

使用S3处理HDFS时缺少数据节点位置-最终一致性

  •  0
  • Ged  · 技术社区  · 6 年前

    读完后这里两点 https://wiki.apache.org/hadoop/AmazonS3

    1. 不知道如何理解下面的内容。 … 最终一致性:一个应用程序所做的更改(创建、更新和删除)直到某个未定义的时间才可见。 …

    一些未定义的时间?这对于编写Spark应用程序意味着什么?如果我有n个工作,那可能是一些还看不见的东西?

    1. Spark默认分区是如何应用于S3数据的?
    1 回复  |  直到 6 年前
        1
  •  0
  •   stevel    6 年前

    那个Hadoop文档有点过时了;我会在谷歌上搜索“Spark and Object Stores”,以获取更多最新的内容。

    这个 spark documentation 有一些火花的具体细节。

    一些未定义的时间?这对于编写Spark应用程序意味着什么?

    好问题。美国焊接学会从不给出硬数据;最好的实证研究是 Benchmarking Eventual Consistency: Lessons Learned from Long-Term Experimental Studies

    这表明一致性延迟依赖于总的AWS负载,并且有一些其他模式。因为它的变量很大,所以没人敢给出“未定义时间”的好值。

    我的一般期望是

    • 通常情况下,列表不一致可能需要几秒钟,但在负载下,情况可能会更糟。
    • 如果S3没有出现任何问题,那么几分钟就足够解决列出的不一致问题。
    • 所有S3连接器都通过列出路径下的所有文件、复制和删除它们来模拟重命名,在进程写入它们之后立即重命名目录可能会丢失数据。
    • 因为spark作业将其输出提交到文件系统的方式取决于 rename() , 使用它们提交任务的输出是不安全的 .

    如果我有n个工作,那可能是一些还看不见的东西?

    比这更糟。您不能依赖单个作业中的重命名操作来正确地进行重命名。

    这就是为什么Amazon使用dynamodb提供一致的emrfs选项来列出一致性,而Hadoop2.9+有一个特性S3guard,它使用dynamodb进行相同的操作。不过,这两种方法都不能解决更新不一致的问题,这也是Hadoop3.1的“S3A提交者”默认为新文件生成唯一的文件名的原因。

    如果您使用ApacheS3A连接器使用普通文件系统将工作提交到S3 FileOutputCommitter 然后,如果没有S3guard,您将面临丢失数据的风险。

    别担心锁链工作;担心那件事。

    顺便问一下:我不知道Databricks在这里做什么。向他们询问细节。

    Spark默认分区是如何应用于S3数据的?

    分区基于对象存储连接器组成的块大小。例如,对于S3A连接器,它是 fs.s3a.blocksize