mapreduce
hadoop将数据存储在hdfs文件系统上。处理数据时,将数据提取、预处理的工作交由map任务完成,生成键值对之后传输给reduce任务执行。一般一个分片,由一个map任务来做。 map和reduce任务执行在集群中的节点。map任务输出文件一般先存在本地,再由网络传送到reduce所在的节点上进行最终处理。这个传输过程可能很费时间,为了减少传输数据量我们可以在map任务生成的结果集传输前,通过combinter 对其进行进一步处理。
- map:数准备,过滤阶段 。
- reduce:对处理过的数据进一步加工成目标数据。
- mapreduce:对reduce结果进行进一步的加工整合。
横向扩展性:
- HDFS上的每个块(基本处理单位)默认是128M,每个块是hafs操作的最小单位。
- 每个块都会由一个Map任务去处理。
- map任务会将中间计算结果,输出到本地磁盘。
- reduce 的结果会被存储在HDFS上(需要占用网络带宽)
场景:用一台性能较好的计算机,假设我们要处理许多年的气象数据,每一年的数据量分别存储的不同的文件中。
-
方式1:启动多个线程进行处理不同文件,最终汇总。因为数据文件大小不一,任务完成速度取决于最后完成的线程。当一个任务量较小的线程完成之后,只能进入等待,等待任务量较大的线程处理完成。
-
方法2:我们将输入