【问题标题】:Hadoop - HDFS blocks and splits (while mapreduce is running)Hadoop - HDFS 块和拆分(当 mapreduce 运行时)
【发布时间】:2016-06-07 19:16:21
【问题描述】:

我想澄清和确认我对块和输入拆分的理解。

请阅读并告诉我是否正确。

  1. 当使用“put”命令将文件(例如 1 GB 大小)从本地文件系统复制到 HDFS 时,取决于块大小 在 hadoop 的配置文件中设置,它将在 8 个不同的数据节点上拆分(例如 128 MB)为 8 个块(1024 MB 文件/128MB 块大小)。还取决于复制因子(比如 3 次),它会被复制到不同数据节点上的 2 个额外副本(了解数据局部性)。所有这些块信息(文件名、块名和存储它们的数据节点)都存储在 Name 节点的 RAM 中。此信息不存储在 FSImage 中。

到目前为止我的理解正确吗?

如果到目前为止我是正确的,那么硬盘上的FSImage有什么(里面有什么样的内容)?

  1. 当我们为此数据集运行 mapreduce 作业时,驱动程序会将存储在数据节点上的数据块拆分为多个“输入拆分”(大小在 xml 文件中配置)。 在这种情况下,假设每个输入拆分为 128 MB,那么我们有 8 个输入拆分,每个拆分都分配有一个 Mapper 进程。

我的理解正确吗?

非常感谢 亲切的问候 纳特

【问题讨论】:

    标签: mapreduce hdfs


    【解决方案1】:

    当一个文件(比如 1 GB 大小)从本地文件系统复制到 HDFS 使用“put”命令,取决于设置的块大小 hadoop 的配置文件,它将被拆分(比如 128 MB)成 8 8 个不同数据节点上的块(1024 MB 文件/128MB 块大小)。还 根据复制因子(比如 3 次),它会被复制 到不同数据节点上的 2 个附加副本(了解 数据局部性)。

    => 没错。

    所有这些块信息(文件名、块名和数据节点所在的位置 它们被存储)存储在名称节点的 RAM 中。这个情报 不存储在 FSImage 中。

    => 所有这些信息都存储在称为 EditLog 的事务日志中。

    硬盘上的FSImage有什么(里面有什么内容)?

    => 它包含文件系统的完整映像。

    为了回答的完整性,我必须补充:

    • fsimage 是一个文件,表示在对特定事务 ID 进行所有修改后的文件系统状态。
    • EditLog 是一个日志文件,其中列出了在最近的 fsimage 之后所做的每个文件系统更改(文件创建、删除或修改)。
    • 检查点是合并最新 fsimage 的内容与合并 fsimage 后应用的所有编辑以创建新 fsimage 的过程。检查点由配置策略自动触发或由 HDFS 管理命令手动触发。
    • 启动 Namenode 时,它​​会将 fsimage 加载到内存中以更快地处理查询。

    当我们为此数据集运行 mapreduce 作业时,驱动程序将 将存储在数据节点上的数据块拆分为多个“输入” splits”(大小在 xml 文件中配置)。在这种情况下,说每个 输入拆分为 128 MB,那么我们有 8 个输入拆分,每个拆分为 分配了一个 Mapper 进程。

    => 没错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多