【问题标题】:How to put the reduce partitions into designed machines in hadoop cluster?如何将reduce分区放入hadoop集群中的设计机器中?
【发布时间】:2016-08-06 16:12:35
【问题描述】:
例如:
减少结果:part-00000, part-00001 ... part-00008,
集群有 3 个数据节点,我想要
- 将
part-00000、part-00001 和part-00002 放入slave0
- 将
part-00003、part-00004 和part-00005 放入slave1
- 将
part-00006、part-00007 和part-00008 放入slave2
我该怎么做?
【问题讨论】:
标签:
hadoop
mapreduce
hdfs
reduce
partition
【解决方案1】:
它不是那样工作的。 HDFS 中的文件不存储在任何特定的数据节点中。每个文件由块组成,每个块被复制到多个节点(默认为 3 个)。因此每个文件实际上存储在不同的节点中,因为组成它的块存储在不同的节点中。
引用official documentation,我建议您阅读:
HDFS 公开文件系统命名空间并允许将用户数据存储在文件中。在内部,一个文件被分成一个或多个块,这些块存储在一组 DataNode 中。 NameNode 执行文件系统命名空间操作,例如打开、关闭和重命名文件和目录。它还确定块到 DataNode 的映射。 DataNode 负责处理来自文件系统客户端的读取和写入请求。 DataNode 还根据 NameNode 的指令执行块创建、删除和复制。
看到您问题中的分区标记,可能值得说明的是,分区器定义了每个键将在哪个分区(而不是数据节点)中结束。例如,知道您有 9 个 reduce 任务(9 个分区),您可能希望平均分配每个此类任务的工作负载。为了做到这一点,您可以定义,例如,以字母“s”开头的键应该发送到分区 0,以字母“a”或“b”开头的键应该发送到分区 1,等等。(只是一个愚蠢的例子来说明分区器的作用)。