HDFS上のファイルを検査する高速な方法は、 tail を使用することです。
~$ hadoop fs -tail /path/to/file
これにより、ファイル内の最後のキロバイトのデータが表示され、非常に役立ちます。ただし、反対のコマンドhead
は、シェルコマンドコレクションの一部ではないようです。これは非常に驚くべきことです。
私の仮説は、HDFSは非常に大きなファイルの非常に高速なストリーミング読み取り用に構築されているため、head
に影響を与えるアクセス指向の問題があるということです。これは私が頭にアクセスするために何かをすることをためらいます。誰にも答えがありますか?
効率に関係していると思います-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は最後のブロックを効率的に見つけて最後のキロバイトの位置にスキップし、出力をストリーミングできます。尾を介した配管では、これを簡単に行うことはできません。
Hadoop v2の場合:
hdfs dfs -cat /file/path|head
Hadoop v1およびv3の場合:
hadoop fs -cat /file/path|head
hdfs -dfs /path | head
問題を解決する良い方法です。
次のコマンドを試すことができます
hadoop fs -cat /path | head -n
-n
は、表示するレコードの数に置き換えることができます