Vector Multiplication with Map-Reduce

本文探讨了在N非常大的情况下,如何利用Map-Reduce解决向量乘法问题。Map阶段通过行号作为key标记数据,Shuffle阶段进行数据归组,Reduce阶段计算乘积并累加。此外,还讨论了计算成本,包括Map输出的数量、Shuffle的次数,以及通过Combine或使用索引范围减少Shuffle的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vector Multiplication

  • Task: multiply 2 arrays of N numbers
    A 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 Multiplication
    How 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

    平衡计算花费:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值