Vector Multiplication with Map-Reduce
2016-07-05 10:06
183 查看
Vector Multiplication
Task: multiply 2 arrays of N numbersA basic mathematical operation
Let’s assume N is very large
向量乘法问题描述:
当N非常大时,如何使用map-reduce解决?
所以,先回想一下map之前,是不是先要将文件spilt一下?
但是问题来了,spilt之后,如何知道哪个跟哪个是对应的呢?因为这个切分后的文件里面都只有数值,并没有标号,也就是没有<key,value>中的key,只有value
Hadoop提供解决方法:
Map阶段对数据进行标记,以行号作为key,值作为value,mapper的主要作用是标记数据
Shuffle阶段:
Reduce阶段:
我们已经知道每行对应的数值了,比如说(1,5),(1,2.7)对应的是A的第一行的5,和B的第一行的2.7,那么他们的乘积也就可得了,以此类推,得到的结果进行累加,即可得到A,B向量乘法的结果了
Computational Costs
For Vector MultiplicationHow many <index,number> are output from map()?
2个向量,一个key,一个value,N行,显而易见,会输出2N个<index,number>
How many<index> groups have to be shuffled?
Can we reduce shuffling?
Try: ‘combine’ map indices in mapper (works better for Wordcount)
hadoop中的combine函数,本质上是一个本地的reducer。其设计初衷是在本地将需要reduce操作的数据就行合并,以减少不必要的通信代价,combine可以提高hadoop的运行性能。
因为combine的输入是map的输出,combine的输出是reduce的输入, 而map的输出和reduce的输出是一致的,所以,我们需要确保combine的输入和输出是一样的, 另外还要考虑本地的reduce对最终的结果是否有影响,比如wordcount,他在本地做累加对最终的结果是没有影响,可以使用combine; 但是计算平均数就不行了,主要这个过程有信息的丢失。
Or Try: use index ranges of length R
将原先的N行数据,分为N/R行。
比如说原先的第一行数据5,这时候由<1,5>变为<1,1,5>
此时如何计算向量乘法呢?
可以这样想,先通过index bin定位到具体的bin中,在具体的bin中,通过original-index定位到具体的行号,然后进行计算。
此时的shuffling的花费取决于N/R个group
平衡计算花费:
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- C++ Vector用法详解
- 详解C++编程中的vector类容器用法
- 详解C++中的vector容器及用迭代器访问vector的方法
- hadoop常见错误以及处理方法详解
- 大家注意vector, list, set, map成员函数erase
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- java中vector与hashtable操作实例分享
- C++ vector删除符合条件的元素示例分享
- C++中vector容器的常用操作方法实例总结
- 使用C语言实现vector动态数组的实例分享
- C++ Vector用法深入剖析
- vector与map的erase()函数详细解析
- 深入理解C++中的vector类的用法及特性