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