我正在学习Mapreduce概念。并遇到了一个我想了解的学习案例研究。

假设我有过去50年的5个城市(A,B,C,D,E)温度的数据,那么 map 缩小将如何在此查询中起作用?他们认为我认为需要多个级别的 reducer 组才能获得最终结果。 (在Hadoop map reduce框架中正确吗?)

脚步:

最近50年的所有50个城市数据(HDFS)

分为三个块(映射器1,映射器2,映射器3,这些是集群中的不同节点,对吗?)

随机排序(在这个位置上我也有一个问题,代码在数据块上执行的地方吗?),它可以从特定数据块中了解最高温度的城市。

reducer -diff排序和混洗产生的最高温度的城市将出现在 reducer 中。

所以我的问题是,同一个 reducer 也将找出最高温度的城市,或者出现另外一个 reducer 来接上最高温度的城市?

第二我的问题是,在什么时候(Mapper或Sort Shuffle或Else)代码开始对数据起作用?

最佳答案

让Mapper输出最近50年的所有城市数据。如果您使用的是Pig或Spark,则可以使用filter命令。 HIVE将是WHERE子句。否则,它是代码中的简单if-else

从理论上讲,您可以让一个 reducer 收集过去50年中所有温度的所有城市,然后对其全部进行扫描,但是这不利于MapReduce的并行性。多个map / reduce阶段没有错。实际上,Pig,Hive,Cascading以及所有其他更高级别的MR工具都可以做到这一点。

因此,(第一个)Reducer将被交给任何给定城市的温度集合。它需要做的就是找到最大值,然后输出(城市,最大值)元组。每个 reducer 将为每个城市每行输出一个元组。

一个(第二个)映射器可以使用与以前相同的InputFormat,但是这次,Reducer可以用来收集所有城市,就像以前避免的那样。这段时间效率更高,因为周围有更少的数据被随机播放。然后,可以找到绝对最大值。

在Hive中,只需添加ORDER BY temp DESC LIMIT 1即可得到答案。



映射任务可以在相同的节点上运行,并且理想情况下可以在存在数据的HDFS块的任何地方运行。映射器的数量由块大小,InputSplits和输入文件的大小控制。

代码在每个阶段都在数据上运行。 The output of the mapper will optionally be sent to a Combiner, a Partitioner, then shuffled and sorted to a Reducer

关于hadoop - 寻找过去50年来温度最高的城市,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46514400/

10-12 23:03