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

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

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

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

我的假设是,由于HDFS是为在非常大的文件上进行非常快速的stream式读取而构build的,因此存在一些影响head访问导向问题。 这让我犹豫不决,去做头脑。 有没有人有答案?

我想说的更多的是与效率有关 – 通过linux head命令将hadoop fs -cat的输出pipe道化,可以轻松地复制头部。

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

这是有效的,因为在输出所需数量的行之后,磁头将closures基础stream

以这种方式使用尾部将会大大降低效率,因为您必须遍历整个文件(所有HDFS块)才能find最后的x行。

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

您注意到hadoop fs -tail命令在最后一个kilobyte上工作 – hadoop可以高效地find最后一个块并跳到最后一个kilobyte的位置,然后stream式输出。 通过尾巴pipe道不能轻易做到这一点。

 hdfs -dfs /path | head 

是解决问题的好方法。

你可以尝试下面的命令

 hadoop fs -cat /path | head -n 

其中-n可以replace为要查看的logging数