在 HDFS 上检查文件的一种快速方法是使用tail:
~$ hadoop fs -tail /path/to/file
这将显示文件中最后一千字节的数据,这非常有用。但是,相反的命令head
似乎不是 shell 命令集合的一部分。我觉得这非常令人惊讶。
我的假设是,由于 HDFS 是为对非常大的文件进行非常快速的流式读取而构建的,因此存在一些面向访问的问题会影响head
. 这让我犹豫要不要做一些事情来访问头部。有人有答案吗?
我想说这更多地与效率有关 - 通过通过 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 可以有效地找到最后一个块并跳到最后一个千字节的位置,然后流式传输输出。通过尾部管道不能轻易做到这一点。
hdfs -dfs /path | head
是解决问题的好方法。
您可以尝试以下命令
hadoop fs -cat /path | head -n
where-n
可以替换为要查看的记录数
在 Hadoop v2 中:
hdfs dfs -cat /file/path|head
在 Hadoop v1 和 v3 中:
hadoop fs -cat /file/path|head