主要是以下几个步骤
Input - > Splitting - > Map - > Combine - > Shuffle/Sort - > Reduce - > output
先将文件进行分割后,进行 map 操作,后面进行 shuffle 操作,分为 map 端 shuffle 和 reduce端 shuffle。
map 输出结果放在缓冲区,当缓存区到达一定阈值时,将其中数据 spill (也就是溢写)到磁盘,然后进行 partition, sort, combine 操作,这样多次 spill 后,磁盘上就会有多个文件,merge 操作将这些文件合并成一个文件。
reduce 端 shuffle 从 map 节点拉取数据文件,如果在内存中放得下,就直接放在内存中,每个 map 对应一块数据,当内存占用量达到一定程度时,启动内存时 merge,把内存中的数据输出到磁盘的一个文件上如果在内存中放不下的话,就直接写到磁盘上。
一个 map 数据对应一个文件,当文件数量达到一定阀值时,开始启动磁盘文件 merge,把这些文件合并到一个文件中。最后,把内存中的文件和磁盘上的文件进行全局 merge,形成一个最终端文件,做为 reduce 的输入文件。
当然 merge过程中会进行 sort,combine 操作。
1)将文件拆分成splits,每个文件为一个split,并将文件按行分割形成
2)将分割好的
3)得到map方法输出的
4)Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的
主要学艺不精,还是得多回头看看老师当时用Java敲的WordCount代码
MapReduce使用combiner优化性能:mapreduce优化:在map阶段先做一次本地聚合——Combine
机制的意义就在于使Map端输出更紧凑,使得写到本地磁盘和传给Reduce端的数据更少
Combine作用在Mapper的本地节点,Reducer作用在集群上。
ne作用在Mapper的本地节点,Reducer作用在集群上。
hive作用和优点·Provides a simple & optimized model with less coding than MR (提供简单和优化的模型,编码少于MR)
只需要写SQL,底层会自动转化为mapreduce
·HQL and SQL have similar syntax and high productivity (HQL和SQL具有类似的语法和高生产率)
都是基于SQL92标准
·Hive supports running on different computing frameworks (Hive支持在不同的计算框架上运行) mapreduce
Tez(比mapreduce的性能快了50倍)
·Hive supports ad hoc querying data on HDFS and Hbase (Hive支持在HDFS和Hbase上进行临时查询数据)
· Hive supports user-defined functions, scripts, customized format (Hive支持用户定义的函数,脚本和自定义格式)
提问:同样功能的代码是hive的运行效率快还是mapreduce快
答案:mapreduce快,因为hive是on mapreduce,还要再转一次。



