mapreduce的工作原理 mapreduce原理图
一、reduce和map的区别
reduce和map是JavaScript中用于数组处理的两个操作,它们具有不同的作用和用法。
行为不同
reduce:不适用于处理数组中的每个元素,而是用于将数组中的所有元素合并为一个值。reduce函数接收一个回调函数作为参数,该函数接受两个参数,第一个参数是数组中的当前元素,第二个参数是上一次调用回调函数的结果。
map:适用于处理数组中的每个元素,将数组中的每个元素应用于一个回调函数,并返回一个新的数组,其中包含对原始数组中每个元素应用回调函数的结果。map函数接收一个回调函数作为参数,该函数接受一个参数,即数组中的当前元素,并返回一个新的元素。
示例
使用reduce函数实现求和操作:
letsum=[1,2,3,4,5].reduce((a,b)=>a+b,0);
console.log(sum);//输出15
使用map函数实现数组元素的平方操作:
letsquares=[1,2,3,4,5].map(x=>x*x);
console.log(squares);//输出[1,4,9,16,25]
性能
reduce函数的性能比map函数慢,因为reduce函数需要迭代整个数组来处理每个元素,而map函数可以并行处理数组中的每个元素。因此,当处理大型数组时,使用map函数可能会更有效。
二、map reduce性能差的主要原因是
影响MapReduce输入数据处理时间的因素很多。其中之一是实现map和reduce函数时使用的算法。其他外部因素也可能影响MapReduce性能。根据我们的经验和观察,可能影响MapReduce的主要因素有以下几个。
硬件(或者资源)因素,如CPU时钟、磁盘I/O、网络带宽和内存大小。
底层存储系统。输入数据、分拣(shuffle)数据以及输出数据的大小,这与作业的运行时间紧密相关。
作业算法(或者程序),如map、reduce、partition、combine和compress。有些算法很难在MapReduce中概念化,或者在MapReduce中效率可能会降低。
三、hadoop的发展及原理
Hadoop的发展历史
2004年—最初的版本(现在称为HDFS和MapReduce)由DougCutting和MikeCafarella开始实施。
2005年12月—Nutch移植到新的框架,Hadoop在20个节点上稳定运行。
2006年1月—DougCutting加入雅虎。
2006年2月—ApacheHadoop项目正式启动以支持MapReduce和HDFS的独立发展。
2006年2月—雅虎的网格计算团队采用Hadoop。
2006年4月—标准排序(10GB每个节点)在188个节点上运行47.9个小时。
…………
Hadoop的工作原理是:
Hadoop由许多元素构成。其最底部是HadoopDistributedFileSystem(HDFS),它存储Hadoop集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。………