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

标签 hadoop hdfs

检查 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 block )才能找到最终的 x 行数。

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

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

关于hadoop - 为什么没有 'hadoop fs -head' shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778137/

相关文章:

sql - HIVe 创建不包含重复项的 Json 数组

hadoop - 如何在级联中强制 reducer ?

hadoop - 为什么在 HDFS 上运行的 Spark wordcount 应用程序中的位置级别都是 ANY?

hadoop - 从HDFS导入表到Spark

java - 使用参数运行我的 jar 时出错

hadoop - Hive - 从 zip 文件创建一个表

hadoop - 将原始数据拆分为列

mysql - 导出时出错: Mixed update/insert is not supported against the target database yet

hadoop - 将文件列表 (JSON) 转换为数据框

hadoop - 从Beefline转储HDFS目录中的数据