理解Hadoop文件系统计数器

4

我希望了解Hadoop中的文件系统计数器。

以下是我运行的一个作业的计数器。

在我运行的每个作业中,我观察到Map文件字节读取量几乎等于HDFS字节读取量。我还观察到,Map阶段写入的文件字节是Mapper读取的文件字节和HDFS字节的总和。请帮忙!是否同时从本地文件和HDFS读取相同的数据,并且Map阶段将两者都写入本地文件系统?

                Map                        

文件字节读取量:5,062,341,139

HDFS字节读取量:4,405,881,342

文件字节写入量:9,309,466,964

HDFS字节写入量:0

谢谢!

2个回答

8
因此,答案实际上是取决于具体工作的。根据工作的不同,mapper/reducer将会写入更多或更少的字节到本地文件,相比于HDFS。

在您的mapper情况下,从本地和HDFS位置读取的数据量大致相同,这里没有问题。您的Mapper代码碰巧需要从本地读取与从HDFS读取相同数量的数据。大多数时候,Mappers被用于分析大于其RAM的数据量,因此可能会看到它将从HDFS获取的数据写入本地驱动器。从HDFS和本地读取的字节数并不总是看起来像它们加起来等于本地写入大小(即使在您的情况下也不是如此)。

以下是使用TeraSort的示例,有100G数据和10亿个键/值对。

    File System Counters
            FILE: Number of bytes read=219712810984
            FILE: Number of bytes written=312072614456
            FILE: Number of read operations=0
            FILE: Number of large read operations=0
            FILE: Number of write operations=0
            HDFS: Number of bytes read=100000061008
            HDFS: Number of bytes written=100000000000
            HDFS: Number of read operations=2976
            HDFS: Number of large read operations=0

注意事项。从HDFS读取和写入的字节数几乎完全是100G。这是因为100G需要进行排序,而最终排序的文件需要被写入。还要注意,它需要大量的本地读/写来存储和排序数据,读取的数据量增加了2倍和3倍!
最后需要注意的是,除非你只想运行一个不关心结果的作业,否则HDFS写入的字节数永远不应该为0,而你的是HDFS_BYTES_WRITTEN 0

2
这是关于你的作业在HDFS分发、Map阶段和Reduce阶段的总计数器。
这些计数器,正如你所观察到的那样,是文件字节和HDFS字节的总和。Hadoop使用逻辑文件系统HDFS在集群上共享资源。

我刚刚粘贴了地图阶段的计数器。我对文件字节读取很感兴趣...我认为这是本地文件系统读取的字节数。但为什么每次运行作业时它几乎与HDFS字节读取相同? - Mahalakshmi Lakshminarayanan
1
由于Hadoop尝试针对本地读取进行优化,因此它将您的代码分发到数据所在的位置。这就是为什么您的HDFS读取是本地读取的原因。 - Thomas Jungblut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接