《大数据:互联网大规模数据挖掘与分布式处理》(第二版)第二章习题答案

参考书籍:《大数据:互联网大规模数据挖掘与分布式处理》(第二版)

原版英文书籍:Mining of Massive Datasets

注:答案为本人自己做的,并非标准答案,仅供参考。
如有错误,请私信我,我将及时修改。

《大数据:互联网大规模数据挖掘与分布式处理》(第二版)第二章习题答案

注:本书包含大量习题,较难的习题或习题中较难的部分都会用!标记,最难的习题用!!标记。

习题2.2.1

在这里插入图片描述( a )

不同的Reducer的时间差异会很大,因为在Map任务中不使用组合器的话,所有Map任务的输出都是键-值对:(w1,1), (w2,1),…,(wn,1),在Shuffle操作后,相同键的键-值对完成分区,排序、分组后作为中间文件成为Reduce任务的输入,通常来说不同键的值表大小差距很大(频繁词汇和冷门词汇),导致不同的Reducer的时间差异会很大。

( b )

如果将Reducer组合成随机的10个任务,时间差距不会十分显著,因为通过使用比Reducer数目更少的Reduce任务,可以减少偏斜性(skew)带来的影响。通过使用比计算节点数目更多的Reduce任务,可以进一步减少偏斜性(skew),在这种情况下,长的Reduce任务可能占满某个计算节点,而几个更短的Reduce任务可以在单个计算节点上串行运行;而如果将Reducer组合成10000个Reduce任务,首先,增加Reduce任务数目会增加整个框架的开销,其次,每一个Reduce任务都要对应一个中间文件,这也会增加存储空间的开销,最后,通常来说不同键的值表大小差距很大,如果每一个Reducer都用一个单独的Reduce任务来完成,那么任务本身会表现出偏斜性(skew),即任务的完成时间差异很大。

( c )

假设我们在100个Map任务中使用组合器,那么上述时间的差异不会很显著。因为我们在对键-值对(w1,1), (w2,1),…,(wn,1)进行分组和聚合之前就应用了Reduce函数,单个Map任务产生的包含键w的键-值对可以组合成一个对(w,m),其中m为w在该Map任务所处理文档集中的出现次数。由此可见,组合器通过减少需要发送到Reduce的数据量和所需时间来帮助提高MapReduce的效率。

习题2.3.1

在这里插入图片描述
( a ) 假定对关系R(B)施加运算γMAX(B)( R )。

Map函数:对每个元组(b),生成键-值对(1, b)。
Reduce函数:每个键1代表一个分组,即对与键1关联的字段B的值表[b1, b2, … , bn]施加MAX操作。输出结果是(1, x)对,其中x是b1, b2, … , bn中的最大值。

( b ) 假定对关系R(B)施加运算γAVG(B)( R )。

Map函数:对每个元组(b),生成键-值对(1, b, 1)。
Reduce函数:每个键1代表一个分组,即对与键1关联的字段B的值表[b1, b2, … , bn]施加AVG操作,将b1, b2, … , bn进行求和,记为sum,将第三个元素进行求和,记为n。输出结果是(b, x)对,其中x=sum/n。

( c ) 假定对关系R(B)施加运算γθ(B)( R )。

Map函数:对每个元组(b),生成键-值对(b, 1)。
Reduce函数:每个键b代表一个分组,将与键b关联的字段B的值表[1, 1, … , 1]变为1。输出结果是(b, 1)对。

最后,将Reduce函数的输出结果的键提取出来,就每个整数只出现一次的整数集合。

( d ) 假定对关系R(B)施加运算γθ(B)( R )。

Map函数:对每个元组(b),生成键-值对(b, 1)。
Reduce函数:每个键b代表一个分组,将与键b关联的字段B的值表[1, 1, … , 1]里面的值进行求和,记为conut_b。输出结果是(b, count_b)对。

习题2.3.2

在这里插入图片描述

设矩阵Mr×c,其第i行第j列的元素记为mij

设有一个c维列向量v,其第j个元素记为vj

于是,矩阵M和向量v的乘积结果是一个n维列向量x,其第i个元素为xi

在这里插入图片描述
设矩阵M在DFS中是显式存储的三元组(i, j, mij)。

Map函数:首先以一个整体的方式读入v,每个Map任务将整个向量v和矩阵M的一个文件块作为输入。对每个矩阵元素mij,Map任务会产生键-值对(i, mijvj)。因此,计算xi的所有n个求和项mijvj的键值都相同。

Reduce函数:Reduce函数简单地将所有与给定键i关联的值相加即可得到结果(i, xi)。

!习题2.3.3

在这里插入图片描述

(a) 假设关系R和S具有相同的模式。

Map函数:将每个输入元组t转变为键-值对(t,1)。
Reduce函数:每个键t代表一个分组,将与键t关联的值表[1, 1, … , 1]里面的值进行求和,记为conut。输出结果是(t, count)对。count就是元组t在R和S中出现次数的总和。

(b) 假设关系R和S具有相同的模式。

Map函数:将每个关系R输入元组t转变为键-值对(t,(R,1)),每个关系S输入元组t转变为键-值对(t,(S,1))。
Reduce函数:每个键t代表一个分组,将与键t关联且同为R或S的值表[1, 1, … , 1]里面的值进行求和,记为count_R或count_S。输出结果是(t, (R,count_R))对或(t, (S,count_S))。最后,得到键t相同的键-值对(t,count),其中count为count_R和count_S之间的较小值,即count=MIN(count_R,count_S)。

© 假设关系R和S具有相同的模式。

Map函数:将每个关系R输入元组t转变为键-值对(t,(R,1)),将每个关系S输入元组t转变为键-值对(t,(S,1))。
Reduce函数:每个键t代表一个分组,将与键t关联且同为R或S的值表[1, 1, … , 1]里面的值进行求和,记为count_R或count_S。输出结果是(t, (R,count_R))对或(t, (S,count_S))。然后,得到键t相同的键-值对(t,count),其中count为count_R和count_S的差值,即count=count_R-count_S。最后,只输出count>0的键值对(t,count)。

!习题2.3.4

在这里插入图片描述

选择运算σCR的MapReduce实现:

Map函数:对R中的每个元组t,检测它是否满足C。如果满足,则产生一个键-值对(t,t)。

Reduce函数:对任意Map任务产生的每个键t,将存在一个或多个键-值对(t,t),Reduce函数将(t,[t,t,t,…,t])转变为(t,t)。这样就保证了无重复输出。

习题2.3.5

在这里插入图片描述
Map函数:生成键-值对((b,c),((R,a),(S,d))),对每一个键-值对检测它是否满足b<c。如果满足,则输出给Reduce函数。

Reduce函数:对任意Map任务产生的每个键-值对((b,c),((R,a),(S,d))),Reduce函数将其转变为((b,c),(a,d))。最终输出为(a,b,c,d)。

!习题2.4.1

在这里插入图片描述

设总执行事件为T,则:

在这里插入图片描述

!习题2.4.2

在这里插入图片描述

设一次超步的执行时间为t,设在两次建立检查点之间运行x次超步。

则两次检查点之间的期望执行时间为:
在这里插入图片描述
要使ET最小,则x=pc。

注:猜的。

习题2.5.1

在这里插入图片描述
( a ) 设矩阵Mn×n的规模是 n 2 n^2 n2。n维向量v的规模是 n n n

M和v的每个文件块传递给一个Map任务,因此所有Map任务的通信开销之和是 n 2 + n n^2+n n2+n
Map任务的输出经过集群的互连传递给Reduce任务,该通信的开销是 O ( n 2 + n ) O(n^2+n) O(n2+n)

总开销: n 2 + n + O ( n 2 + n ) n^2+n+O(n^2+n) n2+n+O(n2+n)

( b ) 设关系R和S的规模分别是 r r r s s s

总开销: r + s + O ( r + s ) r+s+O(r+s) r+s+O(r+s)

( c ) 设关系R的规模分别是 r r r

总开销: r + O ( r ) r+O(r) r+O(r)

( d ) 设矩阵Mm×n的规模是 m × n m×n m×n,矩阵Mn×s的规模是 n × s n×s n×s

总开销: m × n + n × s + O ( m × n + n × s ) m×n+n×s+O(m×n+n×s) m×n+n×s+O(m×n+n×s)

!习题2.5.2

在这里插入图片描述

Map任务的通信开销: r + s + t r+s+t r+s+t

Reduce任务的通信开销:

  1. c r cr cr
  2. a s as as
  3. b t bt bt

满足限制条件 a b c = k abc=k abc=k,并且使 c r + a s + b t cr+as+bt cr+as+bt最小。

令函数 c r + a s + b t − λ ( a b c − k ) cr+as+bt-\lambda(abc-k) cr+as+btλ(abck) a a a, b b b, c c c的偏导数为0,即求解方程组:
在这里插入图片描述

得到: s = λ b c s=\lambda bc s=λbc, t = λ a c t=\lambda ac t=λac, r = λ a b r=\lambda ab r=λab

将3个等式对应的左边与左边相乘,右边与右边相乘有 r s t = λ 3 a 2 b 2 c 2 rst=\lambda^3 a^2b^2c^2 rst=λ3a2b2c2。又由于 a b c = k abc=k abc=k,于是得到 r s t = λ 3 k 2 rst=\lambda^3 k^2 rst=λ3k2,求得 λ = r s t k 2 3 \lambda=\sqrt[3]{\frac{rst}{k^2}} λ=3k2rst

因此,当 a = k t 2 r s 3 a=\sqrt[3]{\frac{kt^2}{rs}} a=3rskt2 , b = k r 2 s t 3 b=\sqrt[3]{\frac{kr^2}{st}} b=3stkr2 , c = k s 2 r t 3 c=\sqrt[3]{\frac{ks^2}{rt}} c=3rtks2 时通信开销取最小值。

将上述取值代入公式 c r + a s + b t cr+as+bt cr+as+bt得到 k t 2 s 2 r 3 + k r 2 t 2 s 3 + k s 2 r 2 t 3 \sqrt[3]{\frac{kt^2s^2}{r}}+\sqrt[3]{\frac{kr^2t^2}{s}}+\sqrt[3]{\frac{ks^2r^2}{t}} 3rkt2s2 +3skr2t2 +3tks2r2 。这就是Reduce任务的通信开销,然后加上Map任务的通信开销 r + s + t r+s+t r+s+t。因此,总的通信开销是 r + s + t + k t 2 s 2 r 3 + k r 2 t 2 s 3 + k s 2 r 2 t 3 r+s+t+\sqrt[3]{\frac{kt^2s^2}{r}}+\sqrt[3]{\frac{kr^2t^2}{s}}+\sqrt[3]{\frac{ks^2r^2}{t}} r+s+t+3rkt2s2 +3skr2t2 +3tks2r2

!习题2.5.3

在这里插入图片描述

a 1 = a 2 = . . . = a n = k a_1=a_2=...=a_n=k a1=a2=...=an=k

习题2.6.1

在这里插入图片描述
( a )

设矩阵Mn×n,其第i行第j列的元素记为mij

设有一个c维列向量v,其第j个元素记为vj

于是,矩阵M和向量v的乘积结果是一个n维列向量x,其第i个元素为xi

输入为:mij和vj

输出为:xi

输入输出关系为:xi与mij(1<=j<=n)和所有vj(1<=j<=n)连接。

( b )

设属性A,其第i个元素记为ai,其中1<=i<=a。
设属性B,其第i个元素记为bj,其中1<=j<=b。
设属性C,其第i个元素记为ck,其中1<=k<=c。

输入为:ai(1<=i<=a), bj(1<=j<=b), ck(1<=k<=c)。

输出为:(ai,bj,ck) (1<=i<=a, 1<=j<=b, 1<=k<=c)。

输入输出关系为:(ai,bj,ck)与ai,bj, bj’ ,ck连接。其中,1<=i<=a,1<=j<=b,1<=j‘<=b,1<=k<=c,且bj=bj’

( c )

设属性A,其第i个元素记为ai,其中1<=i<=a。
设属性B,其第i个元素记为bj,其中1<=j<=b。

输入为:ai(1<=i<=a), bj(1<=j<=b)。

输出为:(ai,max_b) (1<=i<=a)。

输入输出关系为:(ai,max_b)与所有和ai相等的输入及其对应bj连接。

!习题2.6.2

在这里插入图片描述
(a)

单个Reducer覆盖的输出数目不可能超过

在这里插入图片描述

(b)

在这里插入图片描述

!!习题2.6.3

在这里插入图片描述

暂时不会。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值