天天看点

Vector Multiplication with Map-Reduce

Vector Multiplication

  • Task: multiply 2 arrays of N numbers

    A basic mathematical operation

    Let’s assume N is very large

    向量乘法问题描述:

    Vector Multiplication with Map-Reduce

    当N非常大时,如何使用map-reduce解决?

    所以,先回想一下map之前,是不是先要将文件spilt一下?

    Vector Multiplication with Map-Reduce

    但是问题来了,spilt之后,如何知道哪个跟哪个是对应的呢?因为这个切分后的文件里面都只有数值,并没有标号,也就是没有 <key,value> <script id="MathJax-Element-994" type="math/tex"> </script>中的key,只有value

    Hadoop提供解决方法:

    Vector Multiplication with Map-Reduce
    Map阶段对数据进行标记,以行号作为key,值作为value,mapper的主要作用是标记数据
    Vector Multiplication with Map-Reduce
    Shuffle阶段:
    Vector Multiplication with Map-Reduce

    Reduce阶段:

    我们已经知道每行对应的数值了,比如说(1,5),(1,2.7)对应的是A的第一行的5,和B的第一行的2.7,那么他们的乘积也就可得了,以此类推,得到的结果进行累加,即可得到A,B向量乘法的结果了

    Vector Multiplication with Map-Reduce

Computational Costs

  • For Vector Multiplication

    How many <index,number> <script id="MathJax-Element-988" type="math/tex"> </script> are output from map()?

    2个向量,一个key,一个value,N行,显而易见,会输出2N个 <index,number> <script id="MathJax-Element-989" type="math/tex"> </script>

    Vector Multiplication with Map-Reduce
    How many <index> groups have to be shuffled?
    Vector Multiplication with Map-Reduce
    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
    Vector Multiplication with Map-Reduce
    将原先的N行数据,分为N/R行。
    Vector Multiplication with Map-Reduce

    比如说原先的第一行数据5,这时候由 <1,5> <script id="MathJax-Element-991" type="math/tex"><1,5></script>变为 <1,1,5> <script id="MathJax-Element-992" type="math/tex"><1,1,5></script>

    此时如何计算向量乘法呢?

    可以这样想,先通过index bin定位到具体的bin中,在具体的bin中,通过original-index定位到具体的行号,然后进行计算。

    此时的shuffling的花费取决于N/R个group

    Vector Multiplication with Map-Reduce
    平衡计算花费:
    Vector Multiplication with Map-Reduce

继续阅读