Hadoop - HDFS阻塞和拆分(mapreduce正在运行)

时间:2016-06-07 19:16:22

标签: mapreduce hdfs

我希望得到一些澄清和确认我对块和输入拆分的理解。

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

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

    如果到目前为止我是正确的,那么硬盘上的FSImage有什么内容(其中包含哪些内容)?

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

      非常感谢 亲切的问候 纳特

1 个答案:

答案 0 :(得分:0)

  

将文件(例如1 GB)从本地文件系统复制到   HDFS使用“put”命令,具体取决于设置的块大小   hadoop的配置文件,它将被拆分(比如128 MB)到8   8个不同数据节点上的块(1024 MB文件/ 128 MB块大小)。也   根据复制因素(比如3次),它会被复制   在不同的数据节点上另外复制2份(了解一下)   数据位置)。

=>那是对的。

  

所有这些块信息(文件名,块名和数据节点在哪里   它们被存储)存储在Name节点的RAM中。此信息   没有存储在FSImage中。

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

  

硬盘上的FSImage有什么内容(其中包含哪种内容)?

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

为了完整答案,我必须补充:

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

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

=>那是对的。

相关问题