《大数据:互联网大规模数据挖掘与分布式处理》(第二版)第二章习题答案
参考书籍:《大数据:互联网大规模数据挖掘与分布式处理》(第二版)
原版英文书籍: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任务的通信开销:
- c r cr cr
- a s as as
- 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−λ(abc−k)对
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
暂时不会。