hadoop - Hadoop 中 DataNode 和 MapTask 的数量

标签 hadoop mappers

如何设置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?

如您所知,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/

相关文章:

hadoop - 在 hdfs 上格式化 namenode 后如何格式化 datanodes?

hadoop - 错误:使用Tableau在Cloudera上查询Impala时,表达式不在Group BY键中

javascript - Cytoscape.js mapData 映射器为所有顶点返回相同的颜色

hadoop - 在Hadoop MapReduce中从映射器生成多个输出文件

hadoop - 如何使用hive实现预期输出

apache-spark - 在 Google dataproc HDFS 与谷歌云存储(谷歌桶)中存储源文件

string - 如何在mapreduce中解决mapper设置方法给定的字符串值的不规则行为?

refactoring - 在多个 mapper.xml 中重用 MyBatis ResultMap

hadoop - Hadoop 总是会在节点之间平均分配工作吗?