如何设置Hadoop中DataNode的个数?是由代码、配置还是环境决定的。 同样在浏览文章期间,当有人说“每个节点的首选 map 数量约为 10-100 个 map ”时,这里的“节点”是指 NameNode 还是 DataNode?
而且在谈到MapTasks的数量时,有人说等于splits的数量,有人说等于blocks的数量,还有人说是由框架决定的,可能不会给出确切的splits或blocks的数量,那么哪个是他们的权利?
最佳答案
问题:如何设置Hadoop中DataNode的个数?
用于设置或计算DataNode的数量。首先估算Hadoop 存储 (H) :
H=crS/(1-i)
哪里:
c = 平均压缩率。这取决于使用的压缩类型(Snappy、LZOP 等)和数据大小。当不使用压缩时,c=1。
r = 复制因子。在生产集群中通常为 3。
S = 要移动到 Hadoop 的数据大小。这可能是历史数据和增量数据的组合。增量数据可以是每日,也可以是一段时间内(例如 3 年)的预测。
i = 中间因素。通常为 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) 数量的公式:
n= H/d = crS/(1-i)*d
哪里:
d = 每个节点可用的磁盘空间。
问题:“每个节点的首选映射数量大约为 10-100 个映射”,所以这里的“节点”是指 NameNode 还是 DataNode?strong>
如您所知,MapReduce 作业会去处理数据,但反之亦然。所以这里的“节点”就是数据节点。
问题:有多少张 map ?
The number of maps is usually driven by the total size of the inputs, that is, the total number of blocks of the input files.
The right level of parallelism for maps seems to be around 10-100 maps per-node, although it has been set up to 300 maps for very cpu-light map tasks. Task setup takes a while, so it is best if the maps take at least a minute to execute.
如果您有 10TB 的输入数据和 128MB 的 block 大小,您最终将得到 82,000 张 map ,除非 Configuration.set(MRJobConfig.NUM_MAPS, int)
(它只提供提示framework ) 用于将其设置得更高。
关于hadoop - Hadoop 中 DataNode 和 MapTask 的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40834643/