【问题标题】:Why is there no 'hadoop fs -head' shell command?为什么没有'hadoop fs -head' shell 命令?
【发布时间】:2013-11-15 16:28:27
【问题描述】:

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

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

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

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

【问题讨论】:

标签: hadoop hdfs


【解决方案1】:

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

用法:hadoop fs -head URI

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

here

【讨论】:

    【解决方案2】:

    在 Hadoop v2 中:

    hdfs dfs -cat /file/path|head
    

    在 Hadoop v1 和 v3 中:

    hadoop fs -cat /file/path|head
    

    【讨论】:

      【解决方案3】:

      你可以试试下面的命令

      hadoop fs -cat /path | head -n 
      

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

      【讨论】:

        【解决方案4】:
        hdfs -dfs /path | head
        

        是解决问题的好方法。

        【讨论】:

        • 你将如何保存这个结果 | head -n 进入 HDFS 中的文件?
        【解决方案5】:

        我想说这更多地与效率有关 - 可以通过 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 可以有效地找到最后一个块并跳到最后一个千字节的位置,然后流式传输输出。通过尾部管道不能轻易做到这一点。

        【讨论】:

        • 如何把这个 head hadoop 东西变成别名形式。 argpas() { hdfs dfs -cat $1 | head -$2 } alias hh=argpas 我试过了,但它不起作用
        • bash 函数调用相同的(可选通过-n {num} {hdfs_path} 给出num 行显示):hdfs-head() { [ "$1" = "-n" ] && { n=$2; shift 2; } || n=10; hdfs dfs -cat "$@" | head -n $n ; }
        猜你喜欢
        • 2013-08-11
        • 1970-01-01
        • 2021-10-17
        • 2013-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多