如何在Hadoop中设置DataNode的数量?是通过代码,配置还是环境决策。 当有人说“每个节点大约10-100个地图的地图的首选数量”时,在浏览文章期间,所以“节点”在这里意味着NameNode或DataNode?
当谈到MapTasks的数量时,有人说它等于分割数量,另一个说是块的数量,而另一些人说它是由框架确定的,可能不会给出确切数量的分割或块,那么哪个是正确的呢?
答案 0 :(得分:1)
问题:如何在Hadoop中设置DataNode的数量?
用于设置或计算DataNode的数量。首先估算 Hadoop存储 ( H ):
其中:
c =平均压缩比。它取决于使用的压缩类型(Snappy,LZOP,...)和数据大小。如果不使用压缩,则c = 1.
r =复制因子。在生产集群中通常为3。
S =要移至Hadoop的数据大小。这可以是历史数据和增量数据的组合。增量数据可以是每天例如并且在一段时间内预测(例如3年)。
我 =中间因素。通常是1/3或1/4。 Hadoop的工作空间专门用于存储Map阶段的中间结果。
示例:没有压缩,即c = 1,复制因子为3,中间因子为.25 = 1/4
H= 1*3*S/(1-1/4)=3*S/(3/4)=4*S
根据上述假设,Hadoop存储估计是初始数据大小的4倍。
现在估算 数据节点数 (n)的公式:
其中:
d =每个节点可用的磁盘空间。
问题:“每个节点大约10-100个地图的首选地图数量”所以“节点”在这里表示NameNode或DataNode? strong>
如您所知,MapReduce作业会转到处理数据,反之亦然。所以这里“节点”是数据节点。
问题:有多少地图?
地图数量通常由输入的总大小驱动, 也就是输入文件的总块数。
地图的正确并行度似乎约为10-100张地图 每个节点,虽然它已被设置为300个非常cpu-light的地图 地图任务。任务设置需要一段时间,因此最好是地图采用 至少要执行一分钟。
如果您拥有10TB的输入数据和128MB的块大小,那么最终会得到82,000个地图,除非使用Configuration.set(MRJobConfig.NUM_MAPS, int)
(仅提供framework的提示)来设置它甚至更高。