Pig、Hiveの抽象化とは何かについて、私は基本的に理解しています。しかし、私はHive、Pig、またはネイティブマップの削減を必要とするシナリオについて明確な考えがありません。
基本的に、Hiveは構造化処理用であり、Pigは非構造化処理用であることを指摘する記事をいくつか読みました。ネイティブマップの削減はいつ必要ですか? PigまたはHiveを使用して解決できないが、ネイティブマップ削減ではいくつかのシナリオを指摘できますか?
ネストされたif .. else ..構造が多数ある複雑な分岐ロジックは、標準のMapReduceに実装するのが簡単かつ迅速です。構造化データを処理する場合、 Pangool を使用すると、JOINなども簡単になります。また、標準のMapReduceは、データ処理フローが必要とするMapReduceジョブの数を最小限に抑えるための完全な制御を提供します。これは、パフォーマンスにつながります。しかし、コードを記述して変更を導入するには、より多くの時間が必要です。
Apache Pigは構造化データにも適していますが、その利点は、データのBAG(キーでグループ化されたすべての行)を操作できることです。次のようなものを実装する方が簡単です。
Hiveはアドホッククエリに適していますが、その主な利点は、データを格納およびパーティション化するエンジンを備えていることです。しかし、そのテーブルは、Pigまたは標準のMapReduceから読み取ることができます。
もう1つ、HiveとPigは階層データでの作業にはあまり適していません。
短い答え-データを処理したい方法で非常に詳細で細かい制御が必要な場合は、MapReduceが必要です。場合によっては、PigおよびHiveクエリの観点から正確に必要なものを表現するのはあまり便利ではありません。
PigReduceを使用して、PigまたはHiveでできることは、完全に不可能ではありません。 PigとHiveによって提供される柔軟性のレベルにより、なんとかして目標を達成することができますが、それほどスムーズではない可能性があります。 UDFを作成するか、何かを実行してそれを実現できます。
これらのツールの使用法には、明確な区別はありません。それは完全にあなたの特定のユースケースに依存します。データと処理の種類に基づいて、要件に適切に適合するツールを決定する必要があります。
編集:
少し前に、地震データを収集して分析を実行しなければならないユースケースがありました。このデータを保持するファイルの形式は、少し奇妙でした。データの一部は [〜#〜] ebcdic [〜#〜] エンコードされていましたが、残りのデータはバイナリ形式でした。それは基本的に、区切り記号のないフラットなバイナリファイルでした。 PigまたはHiveを使用してこれらのファイルを処理する方法を見つけるのに苦労しました。その結果、私はMRと落ち着かなければなりませんでした。最初は時間がかかりましたが、基本的なテンプレートを用意したら、MRは本当にSwiftであるため、徐々にスムーズになりました。
先ほど言ったように、基本的にはユースケースに依存します。たとえば、データセットの各レコードを反復処理することは、Pig(単なるforeach)では本当に簡単ですが、foreach nが必要な場合はどうでしょうか?したがって、データの処理方法を「その」レベルで制御する必要がある場合は、MRの方が適しています。
別の状況としては、データが行ベースではなく階層的である場合や、データが高度に構造化されていない場合があります。
ジョブチェーンとジョブマージを含むメタパターンの問題は、Pig/Hiveを使用するよりも、MRを直接使用する方が簡単に解決できます。
また、Pig/Hiveを使用するよりも、xyzツールを使用して特定のタスクを実行する方が非常に便利な場合があります。私見、MRはそのような状況でもより良いことがわかりました。たとえば、BigDataで統計分析を行う必要がある場合、Hadoopストリーミングで使用されるRがおそらく最良の選択肢です。
HTH
Mapreduce:
Strengths:
works both on structured and unstructured data.
good for writing complex business logic.
Weakness:
long development type
hard to achieve join functionality
ハイブ:
Strengths:
less development time.
suitable for adhoc analysis.
easy for joins
Weakness :
not easy for complex business logic.
deals only structured data.
豚
Strengths :
Structured and unstructured data.
joins are easily written.
Weakness:
new language to learn.
converted into mapreduce.
ハイブ
長所:
Sql like Data-base guys love it。構造化データの優れたサポート。現在、データベーススキーマと構造のようなビューをサポートしています。同時マルチユーザー、マルチセッションシナリオをサポートしています。より大きなコミュニティサポート。ハイブ、ハイバーサーバー、ハイバーサーバー2、インパラ、セントリー
短所:データが大きくなりすぎてメモリのオーバーフローの問題が発生すると、パフォーマンスが低下します。それで多くをすることはできません。階層データは課題です。非構造化データはコンポーネントのようなudfを必要とします
Pig:長所:優れたスクリプトベースのデータフロー言語。
短所:
非構造化データにはコンポーネントのようなudfが必要です大きなコミュニティサポートではありません
MapReudce:長所:実装する結合の種類を理解している場合は、数行のコードで実装できる「結合機能を実現するのは難しい」に同意しないでください。ほとんどの場合、MRの方がパフォーマンスが優れています。階層データのMRサポートは、特にツリーのような構造を実装するのに最適です。データのパーティション分割/インデックス作成をより適切に制御します。ジョブチェーン。
短所:パフォーマンスなどを向上させるためにAPIをよく理解する必要があるコード/デバッグ/保守
シナリオ ここでは、Hadoop Map ReduceがHiveまたはPIGよりも優先されます
明確なドライバプログラム制御が必要な場合
ジョブでカスタムパーティショナーの実装が必要な場合
Javaジョブのマッパーまたはリデューサーの定義済みライブラリがすでに存在する場合
豚/ハイブの長所:
Pig Vs Hive の比較については、この投稿をご覧ください。
ここ は素晴らしい比較です。すべてのユースケースシナリオを指定します。
PIGとHiveを使用して実行できるすべてのことは、MRを使用して実現できます(ただし、時間がかかる場合もあります)。 PIGとHiveは、下にMR/SPARK/TEZを使用します。したがって、MRが実行できるすべてのことは、HiveとPIGで可能である場合と不可能である場合があります。