我目前正在使用 Hadoop。我想知道是否可以获得有关给定作业的地图任务是从自己的节点还是从其他节点读取数据的信息。我知道 HDFS 分布在所有节点之间,但是是否有任何计数器/指标可以说明,对于给定的作业和给定的 map 任务,从 amp 任务正在运行的同一节点读取了多少数据,以及多少数据是通过网络读取的。
问问题
300 次
1 回答
0
Hadoop 没有计数器来告诉您本地读取了多少数据以及通过网络读取了多少数据。
您唯一能做的就是组合不同的标准计数器,并在此基础上获得本地和网络读取数据的近似值。
DATA_LOCAL_MAPS:作业中映射任务的数量,使用本地数据(机器本地)。
RACK_LOCAL_MAPS:与输入数据在同一机架中的节点上运行的映射任务的数量。
OTHER_LOCAL_MAPS:在与其输入数据所在的机架不同的机架中的节点上运行的任务数。
MAP_INPUT_BYTES:告诉您所有地图任务(整个作业)总共消耗了多少数据
*(您应该检查您的 hadoop 分配的计数器的确切名称)
考虑到EACH map 处理一个输入拆分并且默认输入拆分大致相等,您可以使用以下公式找到本地处理的数据总量:
DATA_LOCAL_MAPS * MAP_INPUT_BYTES/(DATA_LOCAL_MAPS + RACK_LOCAL_MAPS +
OTHER_LOCAL_MAPS)
乘法的第二项给出每个映射任务的输入字节数
于 2012-08-15T00:19:58.737 回答