HDFS では、ブロックはアクティブなノード/スレーブ間で分散されます。ブロックの内容は単純なテキストなので、各データノードに存在するブロックの読み取りまたはアクセスを確認する方法はありますか?
3 に答える
ファイル全体として、または単一のブロック (ブロック番号 3 など) を順不同で読み取るには?
Java API を含むさまざまなメカニズムを介してファイルを読み取ることができますが、ファイルの途中 (ブロック 3 の開始時など) で読み取りを開始することはできません。
データノードへの ssh アクセス (および適切なパーミッション) があると仮定するとcd
、ブロックが格納されているパスにアクセスして、そのノードに格納されているブロックを読み取ることができます (たとえば、 を実行しますcat BLOCK_XXXX
)。ブロックが格納されている場所を示す構成パラメータは でdfs.datanode.data.dir
、デフォルトはfile://${hadoop.tmp.dir}/dfs/data
です。詳細はこちら。
警告: ブロック名は、内部ブロック ID に応じて HDFS によってコード化されます。それらの名前を見ただけでは、ブロックがどのファイルに属しているかを知ることはできません。
最後に、デバッグの目的で、または単に好奇心を満たすためにこれを行いたいと思います。通常、これを行う理由はなく、HDFS Web UI またはコマンドライン ツールを使用してファイルの内容を確認する必要があります。
Hadoop はデータのブロックを読み取り、各行をマッパーにフィードしてさらに処理します。また、Hadoop クライアントは、連結する前に、異なるデータ ノードからファイルに関連するブロックを取得します。したがって、特定のブロックからデータを取得できるはずです。
Hadoop クライアントは、コードを確認するのに適した場所かもしれません。ただし、HDFS はファイル システムの抽象化を提供します。特定のブロックからデータを読み取るための要件が何であるかはわかりません。