4

我想了解 hadoop 中的文件系统计数器。

以下是我运行的工作的计数器。

在我运行的每个作业中,我观察到读取的 Map 文件字节几乎等于读取的 HDFS 字节。而且我观察到映射写入的文件字节是映射器读取的文件字节和hdfs字节的总和。请帮忙!本地文件和 hdfs 是否都在读取相同的数据,并且两者都通过 Map Phase 写入本地文件系统?

                Map                        

FILE_BYTES_READ 5,062,341,139

HDFS_BYTES_READ 4,405,881,342

FILE_BYTES_WRITTEN 9,309,466,964

HDFS_BYTES_WRITTEN 0

谢谢!

4

2 回答 2

8

所以答案实际上是你注意到的是特定于工作的。与 hdfs 相比,映射器/缩减器将根据作业向本地文件写入更多或更少的字节。

在您的映射器案例中,您从本地和 HDFS 位置读取的数据量相似,那里没有问题。您的 Mapper 代码恰好需要在本地读取与从 HDFS 读取相同数量的数据。大多数情况下,Mapper 被用于分析大于其 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

于 2013-05-19T15:45:49.223 回答
2

这是作业的 HDFS 分布、Map 阶段和 Reduce 阶段的总计数器。

正如您所观察到的,这些计数器是文件字节和 hdfs 字节的总和。Hadoop 使用您的逻辑文件系统 HDFS 在集群上共享资源。

于 2013-05-19T11:57:51.367 回答