我是hadoop的新手,我也有同样的问题。
这是我在hadoop中所理解的。
1)当用hadoop编写任何文件时,它以块的形式存储在所有数据节点上(默认为64MB)
2)当我们运行MR作业时,将从该块创建拆分,并在每个数据节点上处理拆分。
3)从每个拆分记录读取器将用于在映射器侧生成键/值对。
问题:
1)一个数据节点一次可以处理多个拆分吗?如果数据节点容量更大会怎么样?
我认为这是MR1的限制,而MR2 YARN我们有更好的资源利用率。
2)是否会在数据节点以串行方式读取拆分,还是可以并行处理以生成键/值对? [通过随机访问数据节点拆分中的磁盘位置]
3)map / reduce架构中的'slot'术语是什么?我正在阅读其中一篇博客,并表示YARN将在Datanode中提供更好的插槽利用率。
答案 0 :(得分:7)
首先让我谈谈what I have understood in hadoop
部分。
存储在Hadoop文件系统上的文件 NOT 存储在所有数据节点上。是的,它被拆分为块(默认为64MB),但存储这些块的DataNode数量取决于a.File Size
b.Current Load on Data Nodes
c.Replication Factor
和d.Physical Proximity
。在决定哪些dataNode将存储文件块时,NameNode会考虑这些因素。
同样,每个数据节点可能不处理拆分。首先,DataNode仅负责管理数据存储,而不是执行作业/任务。 TaskTracker是负责在各个节点上执行任务的从节点。其次,只有那些包含该特定Job所需数据的节点才会处理拆分,除非这些节点上的负载太高,在这种情况下,拆分中的数据被复制到另一个节点并在那里处理。
现在回答问题,
同样,dataNodes不负责处理作业/任务。我们通常将dataNode + taskTracker的组合称为节点,因为它们通常位于同一节点上,处理不同的职责(数据存储和运行任务)。给定节点一次可以处理多个拆分。通常将单个拆分分配给单个Map任务。这转换为在单个节点上运行的多个Map任务,这是可能的。
输入文件中的数据以串行方式读取。
节点的处理能力由Slots
的数量定义。如果一个节点有10个插槽,则意味着它可以并行处理10个任务(这些任务可能是Map / Reduce任务)。考虑到该节点的物理配置,集群管理员通常会为每个节点配置插槽数,例如内存,物理存储,处理器核心数等。