1 mapreduce
(1)Map任务的数量:由输入数据的大小决定的,如文件数量和大小、HDFS块大小以及FileInputFormat的设置等。每个MapSlot可以运行一个Map任务
(2)Reduce任务的数量(分区数):取决于reduceSlot的个数,略小于
(3)分区:如果有多个Reduce分区,每个分区都会独立地处理它的数据。这意味着每个Reduce任务都会接收到一个按键排序的键值对列表,并在其内部独立地进行reduce操作。每个Reduce任务都会生成自己的输出文件,它们的输出是独立的,并且在作业完成后,多个Reduce任务之间不会直接合并它们的结果,你可能需要其他的工具或步骤来合并或进一步处理这些输出文件。
(4)shuffle过程:每个Map任务在产生输出时,并不是直接将数据写入磁盘,而是先写入到内存中的一个缓冲区。当缓冲区中的数据量达到一定阈值时,系统会启动一个后台线程,把缓冲区中的内容溢写到磁盘中,这个过程称为Spill阶段。在每次溢写过程中,线程会根据数据最终要传递到的Reduce任务将数据划分成相应的分区,并在每个分区内部进行排序。这样,每个Map任务的输出都是按分区排序的。然后,当所有的Map任务完成后,所有Map任务的输出会被收集起来,并经过一个归并过程(每个分区内部进行)。在这个过程中,相同key的数据会被合并到一起,并且按照key进行全局排序。这个归并和排序的过程确保了最终传递给每个Reduce任务的数据都是按键排序的。
(5)总结:
- Reduce任务的个数是通过作业配置来确定的
- Reduce任务所要处理的数据则是由Map任务的输出和分区函数共同决定的。
- 分区逻辑在Map任务执行过程中应用,而Shuffle过程的归并是在所有Map任务完成之后进行的,用于合并和排序相同分区的输出。
- 一个分区有一个reduce类,相互之间独立
- 在Hadoop MapReduce中,默认情况下每行输入数据会被视为一个记录,并作为value传递给map函数,key通常是行的偏移量