私がCascadingの作者であることを心に留めておいてください...
私の提案は、Pig または Hive が問題に適している場合、特に Pig を使用することです。
しかし、データのビジネスに携わっていて、洞察を得るためにデータを調べているだけではない場合、カスケーディング アプローチはほとんどの問題に対して生の MapReduce よりもはるかに理にかなっていることがわかります。
未加工の MapReduce に関する最初の障害は、MapReduce で考えることです。MapReduce では些細な問題は単純ですが、問題のドメインにより簡単にマップできるモデル (これをフィルター処理し、解析し、並べ替え、残りを結合するなど) を使用できれば、複雑なアプリケーションの開発がはるかに簡単になります。
次に、Hadoop の通常の作業単位が複数の MapReduce ジョブで構成されていることに気付くでしょう。ジョブを連鎖させることは解決可能な問題ですが、アプリケーション ドメイン レベルのコードに漏れてはならず、隠して透過的にする必要があります。
さらに、マッパーとリデューサーの間で関数を継続的に移動する必要がある場合、リファクタリングと再利用可能なコードの作成が非常に難しくなります。またはマッパーから前のリデューサーへの最適化を取得します。これは、もろさの問題につながります。
カスケードは、できるだけ早く失敗することを信じています。プランナーは、Hadoop クラスターが作業を開始する前に、これらすべてのフィールド名間の依存関係を解決して満たそうとします。これは、すべての問題の 90% 以上が、実行中にジョブが見つかるのを何時間も待たずに見つかることを意味します。
Person や Document などのドメイン オブジェクトを作成することにより、未加工の MapReduce コードでこれを軽減できますが、多くのアプリケーションでは、下流のすべてのフィールドは必要ありません。すべての男性の平均年齢が必要かどうかを検討してください。バイナリの性別と数値の年齢だけが必要な場合、ネットワーク全体で Person 全体を渡すという IO ペナルティを支払いたくありません。
フェイル ファスト セマンティクスとシンクとソースのレイジー バインディングにより、カスケーディング フロー (多くの Hadoop MapReduce ジョブになる) を作成するフレームワークをカスケーディング上に構築することが非常に簡単になります。私が現在関わっているプロジェクトでは、1 回の実行で数百の MapReduce ジョブが発生し、その多くは処理中のデータからのフィードバックに基づいて実行中にオンザフライで作成されます。Cascalogを検索して、複雑なプロセスを簡単に作成するための Clojure ベースのフレームワークの例を確認してください。または、 Nutchよりもはるかにカスタマイズしやすい Web マイニング ツールキットおよびフレームワークの Bixo です。
最後に、Hadoop は単独で使用されることはありません。つまり、データは常に何らかの外部ソースから取得され、処理後に別のソースにプッシュされます。Hadoop に関する汚い秘密は、それが非常に効果的な ETL フレームワークであるということです (そのため、ETL ベンダーがツールを使用して Hadoop にデータをプッシュ/プルすることについて話しているのを聞くのはばかげています)。カスケードは、統合エンドポイントから独立して操作、アプリケーション、および単体テストを作成できるようにすることで、この問題をいくらか緩和します。カスケードは、Membase、Memcached、Aster Data、Elastic Search、HBase、Hypertable、Cassandra などのシステムをロードするために本番環境で使用されます (残念ながら、すべてのアダプターが作成者によってリリースされているわけではありません)。
よろしければ、インターフェースで発生している問題のリストを私に送ってください。私は常に API とドキュメントを改善するためのより良い方法を探しており、ユーザー コミュニティは常に助けてくれます。