Hadoop 如何在cluster map reduce环境中合并数据
我是hadoop的新手。当MapReduce在集群环境中时,我在理解它方面有问题 以单词计数示例代码为例,假设我有三个节点,每个节点都有一个映射任务。地图之后: 机器A:Hadoop 如何在cluster map reduce环境中合并数据,hadoop,mapreduce,Hadoop,Mapreduce,我是hadoop的新手。当MapReduce在集群环境中时,我在理解它方面有问题 以单词计数示例代码为例,假设我有三个节点,每个节点都有一个映射任务。地图之后: 机器A: hello 1 word 1 data 1 ... 机器B: hello 1 xu 2 ... 地图的输出保存在和机器中的本地文件中。 我的问题是,在进入reduce阶段之前,如何合并多台机器上的这些数据?例如,reduce statge接收 hello <1, 1> xu 1 你好 徐1 在本例中,
hello 1
word 1
data 1
...
机器B:
hello 1
xu 2
...
地图的输出保存在和机器中的本地文件中。
我的问题是,在进入reduce阶段之前,如何合并多台机器上的这些数据?例如,reduce statge接收
hello <1, 1>
xu 1
你好
徐1
有关MapReduce的更多详细信息,请参见此一旦为某个作业完成映射任务,则输出将保存,然后传输到此类。该类负责根据还原器分离数据。例如,在您的例子中,您有3台机器正在运行2个reducer。然后partitioner类的getpartition()方法负责分割该2个reducer的映射输出Ex-> 你好1//1 字1//2 数据1//1 因此,现在将为每个reducer创建两个单独的文件。在每个mapper节点上创建的这些文件的数量取决于map输出是否包含每个reducer的数据,请记住,到目前为止,所有这些文件仍在mapper节点上 调用该类后,该类负责对2个文件中的每个文件中的数据进行排序,并负责对它们进行分组。完成后,生成的文件就可以发送到集群中的各个节点 在执行此洗牌和排序后,所有映射节点在各自的reducer节点上发送生成的输出文件,然后在reducer上合并从所有映射器接收的文件并进行排序Ex->,因此有2个映射器和2个reducer,一个映射器为reducer 1和reducer 2生成数据,另一个仅生成一个输出文件,用于reducer 1,然后reducer 1将获得两个文件,reducer 2将获得一个文件 合并和排序后,将在这些文件上运行Reducer,并生成最终输出
一旦为作业完成映射任务,则保存输出,然后将其传输到该类。该类负责根据减缩器分离数据。例如,在您的例子中,您有3台机器正在运行2个reducer。然后partitioner类的getpartition()方法负责分割该2个reducer的映射输出Ex-> 你好1//1 字1//2 数据1//1 因此,现在将为每个reducer创建两个单独的文件。在每个mapper节点上创建的这些文件的数量取决于map输出是否包含每个reducer的数据,请记住,到目前为止,所有这些文件仍在mapper节点上 调用该类后,该类负责对2个文件中的每个文件中的数据进行排序,并负责对它们进行分组。完成后,生成的文件就可以发送到集群中的各个节点 在执行此洗牌和排序后,所有映射节点在各自的reducer节点上发送生成的输出文件,然后在reducer上合并从所有映射器接收的文件并进行排序Ex->,因此有2个映射器和2个reducer,一个映射器为reducer 1和reducer 2生成数据,另一个仅生成一个输出文件,用于reducer 1,然后reducer 1将获得两个文件,reducer 2将获得一个文件 合并和排序后,将在这些文件上运行Reducer,并生成最终输出
映射器输出按关键字(在您的情况下按单词)进行局部排序,然后将其划分为几个块(如果此特定映射器输出没有特定还原器的关键字,则块的数量等于或小于还原器的数量)。在这之后,每个块都会进入相应的reducer(它也会从其余的映射器接收数据块),在那里它会与来自其他映射器的其他块合并,然后所有的块都会作为reducer的输入 映射器输出按关键字(在您的示例中按单词)进行局部排序,然后将其划分为多个块(如果此特定映射器输出没有特定还原器的关键字,则块的数量等于或小于还原器的数量)。在这之后,每个数据块都会转到相应的reducer(它也会接收数据piec)