Hadoop 复习 ---- chapter07【洗牌游戏】
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Hadoop 复习 ---- chapter07【洗牌游戏】
需求现有一把牌除去大小王还剩 52 张这 52 张牌是无序的。现有要求大家将牌按照花色升序的顺序进行归档。
注意每张花色代表 10M。我们的每个 reduceTask 的对内存。现在我们进行设计。
hadoop = MapReduce + hdfs + common
hdfs = namenode + datanode + secondaryNameNode + client == 海量的数据存储
namenode管理系统文件的命名空间
datanode真实的存储数据
secondaryNameNode辅助 namenode 进行数据恢复
client对 hdfs 进行操作
MapReduce = map +shuffle+ reduce
shuffle = map 端的 shuffle + reduce 端的 shuffle
client切片 – map – shuffle – reduce – 归档
-
文件的大小 52*10 = 520M这个文件是可以切分的。如何切分。是谁负责切分
split切分分片。切片。
问题一是谁负责切分
client 负责切分。客户端选择 FileInputFormat 的具体实现类进行分片
如何切分按照书上的规定块的大小为 300M
第一片0-128M
第二片128-256M
第三片256-384M
第四片384-512M
第五片512-520M
规定块的大小为 300M对于我们的牌30张
第一片30张
第二片22张 -
问题二我们需要开启几个 mapTask
因为分片的数量决定 mapTask 的数量。 -
问题三我们的环形缓存区多大
100M = 10张 -
问题四我们的环形缓存区的阀值是多少
是 0.8那么这个阀值内存 == 80M == 8 张 -
问题五环形缓存区的个数是谁决定的
mapTask 的数量 == 环形缓存区的数量 == 2 个 -
问题六我们应该设置几个分区
四个花色 == 四个分区 == 4 个 ReduceTask
黑桃partition0=ReduceTask0
红桃partition1=ReduceTask1
方片partition2=ReduceTask2
梅花partition3=ReduceTask3 -
问题七牌在什么阶段进行的分区
在写入环形缓存区的时候分区。环形缓存区进行的分区。 -
问题八在溢写之前需要进行排序这个排序按照什么排序
先分区排序再按照 key 排序先按照花色排序然后按照每个花色中的数字的大小排序 -
这个 combiner 过程我们是可选的我们不选了。
-
我们这个游戏每个环形缓存区一共需要溢写几次以第一片为例300M
0-8 9-16 17-24 25-30
要溢写四次每次溢写都要进行排序和溢写
要溢写四次生成四次溢写文件
spill0.out spill1.out spill2.out spill3.out
spill0.index.out spill1.index.out spill2.index.out spill3.index.out -
需不需要归并 merge
需要归并。归并完成生成 spill.out 和spill.index.out -
生成最终归并文件的数量是谁决定的
是环形缓存区决定的mapTask 的数量决定 == 是 client 决定
我们有两个 mapTask == 两个环形缓存区 == 两个 spill.out 文件。 -
reduce 阶段的 shuffle 过程
copyreduceTask 主动的拉取 spill.out 中的属于当前区的数据。
ReduceTask0 主动的拉取两个 spill.out 的黑桃。 -
我们一把牌一共有几个黑桃呢
13 张 == 130M -
reduce 拷贝的数据存储在哪里呢
缓存区中 -
这个缓存区多大呢
设置每个 ReduceTask 的堆内存 = 500M
那么这个缓存区 == 55*0.7 = 350M -
这个缓存区也是有阀值的 == 0.66
350 * 0.66 = 213M == 230M == 23 张 -
每个 reduceTask 要溢写几次呢
1 次 -
在本地生成一个溢写文件所以归并过程没了。
-
这个溢写文件作为 reduce 的输入。
-
reduce 过程完成。写入到本地。