66

在 HDFS 上检查文件的一种快速方法是使用tail

~$ hadoop fs -tail /path/to/file

这将显示文件中最后一千字节的数据,这非常有用。但是,相反的命令head似乎不是 shell 命令集合的一部分。我觉得这非常令人惊讶。

我的假设是,由于 HDFS 是为对非常大的文件进行非常快速的流式读取而构建的,因此存在一些面向访问的问题会影响head. 这让我犹豫要不要做一些事情来访问头部。有人有答案吗?

4

5 回答 5

144

我想说这更多地与效率有关 - 通过通过 linux head 命令传输 hadoop fs -cat 的输出可以轻松复制 head。

hadoop fs -cat /path/to/file | head

这是有效的,因为 head 将在输出所需的行数后关闭底层流

以这种方式使用 tail 会大大降低效率 - 因为您必须流式传输整个文件(所有 HDFS 块)才能找到最终的 x 行数。

hadoop fs -cat /path/to/file | tail

您注意到的 hadoop fs -tail 命令适用于最后一个千字节 - hadoop 可以有效地找到最后一个块并跳到最后一个千字节的位置,然后流式传输输出。通过尾部管道不能轻易做到这一点。

于 2013-11-04T23:37:35.280 回答
7

从版本 3.1.0 开始,我们现在拥有它:

用法:hadoop fs -head URI

将文件的第一个千字节显示到标准输出。

这里

于 2018-01-02T15:43:14.207 回答
3
hdfs -dfs /path | head

是解决问题的好方法。

于 2015-04-21T08:58:37.887 回答
2

您可以尝试以下命令

hadoop fs -cat /path | head -n 

where-n可以替换为要查看的记录数

于 2017-08-13T07:18:13.043 回答
2

在 Hadoop v2 中:

hdfs dfs -cat /file/path|head

在 Hadoop v1 和 v3 中:

hadoop fs -cat /file/path|head
于 2017-12-02T11:16:51.183 回答