2016-07-04 5 views
0

HDFSの大きな問題の1つは圧縮です。ファイルを圧縮する場合、分割可能な圧縮を処理する必要があります。 HDFSでは、ファイル全体を圧縮する必要があり、代わりにHDFSブロックレベルで圧縮を実装しないのはなぜですか?ブロックレベルのHDFS圧縮

これは、64 MBのブロックが1つのチャンクに読み書きされ、圧縮するのに十分な大きさで、操作に干渉せず、分割可能な圧縮が必要であるという問題を解決します。

この実装はありますか?

答えて

1

ここでは推測していますが、いくつかの問題があります。

HDFSには、local short-circuit readsという機能が含まれています。これにより、データノードはブロックファイルを開き、セキュリティを検証し、ファイル記述子を同じノードで実行されているアプリケーションに渡すことができます。これにより、HTTPやその他の方法でHDFSからM/Rアプリケーション(またはHDFSアプリケーションがそのファイルを読み込んでいる)にファイル転送が完全にバイパスされます。実行中のクラスタでは、分割が存在する場所で処理が行われるため、短絡読み取りは例外ではなく標準です。あなたが説明していることは、ブロックを読むためにブロック圧縮を理解することを読者に要求するでしょう。

その他の考慮事項は、ブロックにまたがる分割に関連します。一般に、圧縮形式にはランダムアクセスがなく、順次アクセスが必要です。次のブロックにまたがる分割を構成するために、ブロックから最後の数バイトを読み取ると、圧縮のためにブロック全体を読み取る場合ほどコストが高くなる可能性があります。

私はブロック圧縮が不可能だと言っているわけではありませんが、私はあなたが期待しているほど複雑であると感じています。

さらに、ブロック圧縮はtransparently delegated to filesystemにすることができます。

HDFSより上のデータレイヤーでは、より良い圧縮形式が存在します。ORCParquet