7

私は最近、hadoop と HDFS について調べています。ファイルを HDFS にロードすると、通常はファイルが 64MB のチャンクに分割され、これらのチャンクがクラスター全体に分散されます。ただし、gzip されたファイルは分割できないため、gzip されたファイルではこれを実行できません。これが事実である理由を完全に理解しています(gzipファイルを分割できない理由を説明する必要はありません)。しかし、なぜ HDFS はプレーン テキスト ファイルを入力として取り、それを通常のように分割してから、gzip を使用して各分割を個別に圧縮できなかったのでしょうか? スプリットにアクセスすると、その場で解凍されます。

私のシナリオでは、各分割は完全に個別に圧縮されます。分割間に依存関係がないため、分割のいずれかを解凍するために元のファイル全体を必要としません。これがこのパッチのアプローチです: https://issues.apache.org/jira/browse/HADOOP-7076 、これは私が望むものではないことに注意してください。

これはかなり基本的なようです...何が欠けていますか?なぜこれができなかったのですか?あるいは、それが可能であるなら、なぜ Hadoop 開発者はこのルートを見下ろさなかったのでしょうか? HDFS で分割された gzip されたファイルを望んでいる人々に関して私が見つけた議論の量を考えると、奇妙に思えます。

4

2 に答える 2

9

単純な理由は、「関心の分離」の設計原則です。

提案したことを行う場合、HDFS はファイルの実際のビットとバイトが何を意味するかを認識している必要があります。また、HDFS がそれについて推論できるようにする必要があります (つまり、抽出、解凍など)。一般に、この種の責任をソフトウェアで混同することは望ましくありません。

したがって、ビットが何を意味するかを理解する「唯一の」部分は、それを読み取ることができなければならないアプリケーションです。これは通常、Hadoop の MapReduce 部分を使用して記述されます。

HADOOP-7076 の Javadoc で述べられているように (私はそのことを書きました ;) ):

別のアプローチがあることを常に覚えておいてください。

HTH

于 2011-06-29T15:09:07.720 に答える