web-dev-qa-db-ja.com

「hadoop fs -head」シェルコマンドがないのはなぜですか?

HDFS上のファイルを検査する高速な方法は、 tail を使用することです。

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

これにより、ファイル内の最後のキロバイトのデータが表示され、非常に役立ちます。ただし、反対のコマンドheadは、シェルコマンドコレクションの一部ではないようです。これは非常に驚くべきことです。

私の仮説は、HDFSは非常に大きなファイルの非常に高速なストリーミング読み取り用に構築されているため、headに影響を与えるアクセス指向の問題があるということです。これは私が頭にアクセスするために何かをすることをためらいます。誰にも答えがありますか?

56
bbengfort

効率に関係していると思います-linux headコマンドでhadoop fs -catの出力をパイプすることで、簡単にヘッドを複製できます。

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

これは、目的の行数が出力された後にヘッドが基礎となるストリームを閉じるため、効率的です。

この方法でtailを使用すると、ファイル全体(すべてのHDFSブロック)をストリーミングして最終的なx行を見つける必要があるため、効率が大幅に低下します。

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

ご指摘のhadoop fs -tailコマンドは最後のキロバイトで動作します。hadoopは最後のブロックを効率的に見つけて最後のキロバイトの位置にスキップし、出力をストリーミングできます。尾を介した配管では、これを簡単に行うことはできません。

130
Chris White

バージョン3.1.0以降、次のようになりました。

使用法:hadoop fs -head URI

ファイルの最初のキロバイトを標準出力に表示します。

here を参照してください。

4
yishaiz

Hadoop v2の場合:

hdfs dfs -cat /file/path|head

Hadoop v1およびv3の場合:

hadoop fs -cat /file/path|head
2
Ani Menon
hdfs -dfs /path | head

問題を解決する良い方法です。

2
xu2mao

次のコマンドを試すことができます

hadoop fs -cat /path | head -n 

-nは、表示するレコードの数に置き換えることができます

2
Amey