我阅读了MapReduce wiki页面,我认为我并不完全理解。我知道查询被分成了一个map步骤和一个reduce步骤。因此,为了利用这一点,我们应该更多地使用GROUP BY
并将工作从map步骤移到reduce步骤。我不确定这是如何工作的。看起来很神奇。我想知道一组编写SQL查询的指南,以利用MapReduce。
我如何知道地图步骤或缩小步骤中的哪些子句?它背后的理论是什么?我想理解这个理论及其内部运作,以便我可以写出更好的查询。
答案 0 :(得分:0)
地图功能为data preparation stage
,其中Mapper可以prepare and filter
数据,以便它可以将输入传递给reducer function
。
Reducer从Mapper获取输入,并尝试在查询中指定时减少数据。
例如,reducer将从mapper给出的数据中计算像count,max,min of a column
这样的聚合。
例如,我需要finding word count for the words not in set a,an and the
。
not filtering is done by mapper.
counting is done by by reducer.
根据我的理解,Hive查询中的三件事将导致reducer功能。
1.group by
2.join
3.multi row function
其余大部分将导致Mapper功能。
答案 1 :(得分:0)
Hive会尽可能地根据查询来优化map /的数量(以及map和reduce之间的工作)。如果你想控制map / reduce行为你可以在java中编写自己的map / reduce,Hive的全部意义在于它会让你使用熟悉的语法(SQL)来表达你想要的结果,它会创建一个有效的map / reduce序列来获得该结果
出于性能原因,您可能希望在映射阶段尽可能多地完成工作 - 因为通常有更多的映射器而不是reducer,并且您不需要移动数据。请注意,有时聚合函数可以使用组合器在地图端部分执行(尽管我认为Hive处理方式不同) 来自Hive site:
分组的地图侧聚合
hive.map.aggr控制我们如何进行聚合。默认值为false。 如果设置为true,Hive将执行第一级聚合 直接在地图任务中。这通常可以提供更好的效率,但是 可能需要更多内存才能成功运行。
set hive.map.aggr = true; SELECT COUNT(*)FROM table2