私の質問は例を挙げて説明するのが一番だと思います。HDFSに画像を保存しているとしましょう。その画像は十分に大きいので、HDFSで4つの別々の小さなファイルに分割されます。その画像を返す操作を実行すると、Hadoopは元の画像に結合できる4つの小さなファイルを返しますか?または、Hadoopは4つの小さなファイルを自動的に元のファイルに再結合しますか?
ありがとうございました!
この例が、Hadoopが通常どのように使用されるかはよくわかりません。
ただし、結果が大きなファイルの場合は、小さなサブファイルとしてHDFSに保存されます。HDFSファイルシステム操作を介して取得すると、単一の論理ファイルとして返されます。
Hadoop分散ファイルシステム(HDFS)は、各ファイルを1つ以上のブロックに保存します(各ブロックは1回以上複製されます)。
すべてのファイルについて、ファイルのブロックサイズとレプリケーション係数を構成できます(指定されていない場合はデフォルト値が使用されます)。
ファイルベースの操作を行う場合、データのストリームを処理します。名前ノードは、ファイルパスをブロックとその場所(データノード)にマッピングする中央リポジトリです。
例を使用して、32MBのファイルブロックサイズと50MBのファイルがあるとします。これは2つのブロック(32MBと18MB)に分割されます。ファイルの構成済みレプリケーション係数が3の場合、NameNodeは、各ブロックがクラスター内の3つのデータノードにレプリケートされることを確認します。
このファイルから読み取ろうとすると、FSInputStreamが返されます。これは、ほとんどの入力ストリームと同様に、ファイル内の特定のバイト位置をシークできます。DFSClientは詳細からあなたを抽象化しますが、特定のバイトオフセットを認識しており、これが関連するブロックを認識し、バイトをシームレスに取得します(ブロック境界間を移動する場合でも)。
したがって、質問を要約して対処すると、HDFSから読み取るクライアントにとっては、1つの連続した入力ストリームのように見えますが、実際には、必要に応じて4つのブロックがつなぎ合わされています。