HDFS上のファイルを検査する高速な方法として、tailを使用する方法があります。
~$ hadoop fs -tail /path/to/file
これはファイル中の最後の1キロバイトのデータを表示するもので、非常に便利です。しかし、反対のコマンドである head
はシェルのコマンドコレクションに含まれていないようです。これは非常に驚くべきことだと思います。
私の仮説では、HDFSは非常に大きなファイルの高速なストリーミング読み込みのために構築されているので、head
に影響を与えるアクセス指向の問題があるのだと思います。このため、私はheadにアクセスするために何かをすることを躊躇しています。誰か答えを持っていますか?
hadoopのfs -catの出力をlinuxのheadコマンドでパイプすれば、簡単にheadを複製することができるのです。
hadoop fs -cat /path/to/file | head
これは、希望する行数が出力された後に head が基礎となるストリームを終了させるので効率的です。
この方法でtailを使用すると、ファイル全体(すべてのHDFSブロック)をストリームして最終的なX行数を見つけなければならないので、かなり効率が悪くなります。
hadoop fs -cat /path/to/file | tail
hadoop fs -tail コマンドは最後の1キロバイトで動作します。hadoop は効率的に最後のブロックを見つけ、最後の1キロバイトの位置までスキップし、出力をストリームすることができます。tail によるパイピングはこれを容易に行うことができません。