1小さなファイルの定義
小さいファイルとは、HDFSのブロックサイズ(デフォルトは128M)よりもはるかに小さいサイズのファイルを指します。Hadoopは、多数の小さなファイルではなく、少数の大きなファイルの処理に適しています。
2小さなファイルによって引き起こされる問題
- まず、HDFSでは、ブロック、ファイル、またはディレクトリはオブジェクトの形でメモリに保存され、各オブジェクトは約150バイトを占有します。10000000の小さなファイルがあり、各ファイルがブロックを占有する場合、namenodeは約2Gスペース。1億個のファイルが保存されている場合、namenodeには20Gのスペースが必要です。このように、ネームノードのメモリ容量は、クラスターの拡張を厳しく制限します。
- 第二に、多数の小さなファイルにアクセスする速度は、いくつかの大きなファイルにアクセスする速度よりもはるかに遅いです。HDFSは元々、大きなファイルへのストリーミングアクセス用に開発されました。多数の小さなファイルにアクセスする場合、あるデータノードから別のデータノードに絶えずジャンプする必要があり、パフォーマンスに深刻な影響を及ぼします。
- 最後に、多数の小さなファイルの処理は、同じサイズの大きなファイルの処理よりもはるかに低速です。各小さなファイルはスロットを占有し、タスクの起動(JVMの起動と破棄)は、タスクの開始と解放に多くの時間、またはほとんどの時間を費やします。