1

我阅读了 MapReduce wiki 页面,但我认为我并不完全理解。我了解查询分为 map 步骤和 reduce 步骤。因此,为了利用这一点,我们应该GROUP BY更多地使用 s 并将工作从 map 步骤转移到 reduce 步骤。我不确定这是如何工作的。这似乎太神奇了。我想知道一组编写 SQL 查询以利用 MapReduce 的指南。

我如何知道哪些子句在 map 步骤或 reduce 步骤中?它背后的理论是什么?我想了解该理论及其内部工作原理,以便我可以编写更好的查询。

4

2 回答 2

0

Hive 将尝试根据查询尽可能优化它所做的 map/reduce 的数量(以及 map 和 reduce 之间的工作)。如果你想控制 map/reduce 行为,你可以在 java 中编写自己的 map/reduce,Hive 的全部意义在于它可以让你使用熟悉的语法 (SQL) 来表达你想要得到的结果,它会创建一个有效的 map/reduce 序列来获得该结果

出于性能原因,您可能希望在映射阶段获得尽可能多的工作 - 因为通常映射器比减速器多,并且您不需要移动数据。请注意,有时聚合函数可以使用来自Hive 站点的组合器(尽管我认为 Hive 以不同方式处理)在地图端部分执行:

Group By 的地图端聚合

hive.map.aggr 控制我们如何进行聚合。默认值为假。如果设置为true,Hive会直接在map任务中做一级聚合。这通常会提供更好的效率,但可能需要更多内存才能成功运行。

设置 hive.map.aggr=true; 从表 2 中选择计数(*)

于 2013-04-10T11:22:02.820 回答
0

Map 函数是data preparation stageMapper 可以prepare and filter将数据传递给它,以便它可以像输入一样传递给reducer function. Reducer 从 Mapper 获取输入,如果在查询中指定,则尝试减少数据。例如,reducer 将count,max,min of a column根据 mapper 给出的数据计算聚合。例如我你有要求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 功能。

于 2013-04-10T05:43:35.603 回答