为什么没有'hadoop fs -head'hell命令?

时间:2013-11-04 22:05:55

标签: hadoop hdfs

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

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

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

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

5 个答案:

答案 0 :(得分:127)

我认为这更多地与效率有关 - 通过linux头命令管道输出hadoop fs -cat可以轻松复制头部。

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

这是有效的,因为在输出所需数量的行之后,head将关闭基础流

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

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

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

答案 1 :(得分:1)

hdfs -dfs /path | head

是解决问题的好方法。

答案 2 :(得分:1)

您可以尝试以下命令

hadoop fs -cat /path | head -n 

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

答案 3 :(得分:1)

在Hadoop v2中:

hdfs dfs -cat /file/path|head

在Hadoop v1和v3中:

hadoop fs -cat /file/path|head

答案 4 :(得分:1)

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

  

用法:hadoop fs -head URI

     

将文件的第一个千字节显示为stdout。

请参阅here