我阅读了 MapReduce wiki 页面,但我认为我并不完全理解。我了解查询分为 map 步骤和 reduce 步骤。因此,为了利用这一点,我们应该GROUP BY
更多地使用 s 并将工作从 map 步骤转移到 reduce 步骤。我不确定这是如何工作的。这似乎太神奇了。我想知道一组编写 SQL 查询以利用 MapReduce 的指南。
我如何知道哪些子句在 map 步骤或 reduce 步骤中?它背后的理论是什么?我想了解该理论及其内部工作原理,以便我可以编写更好的查询。
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 中选择计数(*)
Map 函数是data preparation stage
Mapper 可以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 功能。