web-dev-qa-db-ja.com

豚vsハイブvsネイティブマップリデュース

Pig、Hiveの抽象化とは何かについて、私は基本的に理解しています。しかし、私はHive、Pig、またはネイティブマップの削減を必要とするシナリオについて明確な考えがありません。

基本的に、Hiveは構造化処理用であり、Pigは非構造化処理用であることを指摘する記事をいくつか読みました。ネイティブマップの削減はいつ必要ですか? PigまたはHiveを使用して解決できないが、ネイティブマップ削減ではいくつかのシナリオを指摘できますか?

21
Maverick

ネストされたif .. else ..構造が多数ある複雑な分岐ロジックは、標準のMapReduceに実装するのが簡単かつ迅速です。構造化データを処理する場合、 Pangool を使用すると、JOINなども簡単になります。また、標準のMapReduceは、データ処理フローが必要とするMapReduceジョブの数を最小限に抑えるための完全な制御を提供します。これは、パフォーマンスにつながります。しかし、コードを記述して変更を導入するには、より多くの時間が必要です。

Apache Pigは構造化データにも適していますが、その利点は、データのBAG(キーでグループ化されたすべての行)を操作できることです。次のようなものを実装する方が簡単です。

  1. 各グループの上位N要素を取得します。
  2. 各グループごとの合計を計算し、その合計をグループ内の各行に対して配置します。
  3. 結合の最適化にはブルームフィルターを使用します。
  4. マルチクエリのサポート(PIGが単一のジョブでより多くのことを行うことによりMapReduceジョブの数を最小化しようとするとき)

Hiveはアドホッククエリに適していますが、その主な利点は、データを格納およびパーティション化するエンジンを備えていることです。しかし、そのテーブルは、Pigまたは標準のMapReduceから読み取ることができます。

もう1つ、HiveとPigは階層データでの作業にはあまり適していません。

19
alexeipab

短い答え-データを処理したい方法で非常に詳細で細かい制御が必要な場合は、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

14
Tariq

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.
10

ハイブ

長所:

Sql like Data-base guys love it。構造化データの優れたサポート。現在、データベーススキーマと構造のようなビューをサポートしています。同時マルチユーザー、マルチセッションシナリオをサポートしています。より大きなコミュニティサポート。ハイブ、ハイバーサーバー、ハイバーサーバー2、インパラ、セントリー

短所:データが大きくなりすぎてメモリのオーバーフローの問題が発生すると、パフォーマンスが低下します。それで多くをすることはできません。階層データは課題です。非構造化データはコンポーネントのようなudfを必要とします

Pig:長所:優れたスクリプトベースのデータフロー言語。

短所:

非構造化データにはコンポーネントのようなudfが必要です大きなコミュニティサポートではありません

MapReudce:長所:実装する結合の種類を理解している場合は、数行のコードで実装できる「結合機能を実現するのは難しい」に同意しないでください。ほとんどの場合、MRの方がパフォーマンスが優れています。階層データのMRサポートは、特にツリーのような構造を実装するのに最適です。データのパーティション分割/インデックス作成をより適切に制御します。ジョブチェーン。

短所:パフォーマンスなどを向上させるためにAPIをよく理解する必要があるコード/デバッグ/保守

5
kumar MI

シナリオ ここでは、Hadoop Map ReduceがHiveまたはPIGよりも優先されます

  1. 明確なドライバプログラム制御が必要な場合

  2. ジョブでカスタムパーティショナーの実装が必要な場合

  3. Javaジョブのマッパーまたはリデューサーの定義済みライブラリがすでに存在する場合

  4. 大量の大きなデータセットを組み合わせるときに十分なテスト性が必要な場合
  5. アプリケーションが物理構造を命令するレガシーコード要件を要求する場合
  6. マッパー内結合などのトリックを最大限に活用して、ジョブが処理の特定の段階で最適化を必要とする場合
  7. ジョブに分散キャッシュ(複製結合)、クロス積、グループ化、または結合のトリッキーな使用法がある場合

Comparison between Map reduce/ Pig/ Hive

豚/ハイブの長所:

  1. Hadoop MapReduceは、PigやHiveよりも多くの開発作業を必要とします。
  2. PigとHiveのコーディングアプローチは、完全に調整されたHadoop MapReduceプログラムよりも低速です。
  3. PigとHiveを使用してジョブを実行する場合、Hadoop開発者はバージョンの不一致を心配する必要はありません。
  4. PigまたはHiveでコーディングする場合、開発者がJavaレベルのバグを書き込む可能性は非常に限られています。

Pig Vs Hive の比較については、この投稿をご覧ください。

2
Ravindra babu

ここ は素晴らしい比較です。すべてのユースケースシナリオを指定します。

1
KayV

PIGとHiveを使用して実行できるすべてのことは、MRを使用して実現できます(ただし、時間がかかる場合もあります)。 PIGとHiveは、下にMR/SPARK/TEZを使用します。したがって、MRが実行できるすべてのことは、HiveとPIGで可能である場合と不可能である場合があります。

1
NewToJava