web-dev-qa-db-ja.com

ApachePigとApacheHiveの違いは何ですか?

PigとHiveの正確な違いは何ですか?同じ仕事をするために使われているので、どちらも同じ機能的な意味を持っていることがわかりました。唯一のことは、両方で異なる実装です。では、いつ、どのテクノロジーを使用するのでしょうか。適用性と性能の両方の違いを明確に示す両方の仕様はありますか?

18
Ananda

Apache PigとHiveは、Hadoopの上に階層化され、HadoopのMapReduceライブラリを使用するための高級言語を提供する2つのプロジェクトです。 Apache Pigは、データの読み取り、フィルタリング、変換、結合、書き込みなどの操作を記述するためのスクリプト言語を提供します。これは、MapReduceが最初に設計された操作とまったく同じです。これらの操作を数千行のJava MapReduceを直接使用するコードで表現するのではなく、Pigを使用すると、ユーザーはbashやPerlスクリプトと同じ言語で操作を表現できます。Pigはプロトタイピングと迅速な開発に最適です。 MapReduceジョブをJava自体でコーディングするのとは対照的に、MapReduceベースのジョブ。

Pigが「Hadoopのスクリプト」である場合、Hiveは「HadoopのSQLクエリ」です。 Apache Hiveは、HadoopでいくつかのMapReduceジョブの操作を段階的に直接スクリプト化するのではなく、Hadoopジョブを実行してデータをクエリするためのさらに具体的で高水準の言語を提供します。この言語は、設計上、非常にSQLに似ています。 Hiveは、大量のデータに対して長時間実行されるバッチ指向のクエリのツールとして引き続き使用されます。いかなる意味でも「リアルタイム」ではありません。 Hiveは、SQLのようなクエリやビジネスインテリジェンスシステムに慣れているアナリストやビジネス開発タイプにとって優れたツールです。光沢のある新しいHadoopクラスターを簡単に活用して、アドホッククエリを実行したり、上記のストレージシステムに保存されているデータ全体でレポートデータを生成したりできます。

37
Sean Owen

純粋にエンジニアリングの観点から、PIGはSQLのような言語よりも記述と保守の両方が簡単だと思います。これは手続き型であるため、データに1つずつ一連の関係を適用します。問題が発生した場合は、中間ステップで簡単にデバッグできます。また、アルゴリズムを使用してデータの照合をサンプリングする「illustrate」というコマンドを使用することもできます。あなたの関係。複雑なロジックを使用するジョブの場合、これはHiveよりも間違いなくはるかに便利ですが、単純なものの場合、ゲインはおそらく最小限です。

インターフェースに関しては、PIGはHiveと比較して多くの柔軟性を提供していることがわかりました。 PIGにはテーブルの概念がないため、ファイルを直接操作できます。ローダーを定義して、ローダーUDFを使用すると、テーブルの読み込み段階を経ることなく、ほぼすべての形式でファイルを簡単に読み込むことができます。変換。最近のバージョンのPIGには、動的な呼び出し元を使用できる優れた機能があります。つまり、UDFを記述しなくても、PIGスクリプトでほとんどすべてのJavaメソッドを直接使用できます。

パフォーマンス/最適化については、私が見てきたことから、使用する結合およびグループ化アルゴリズムのタイプをPIGで直接制御できます(それぞれに3つまたは4つの異なるアルゴリズムがあると思います)。個人的には使用したことはありませんが、要求の厳しいアルゴリズムを作成している場合、Hiveの場合のようにオプティマイザーに依存するのではなく、何をすべきかを決定できると便利です。したがって、必ずしもHiveよりもパフォーマンスが優れているとは言えませんが、オプティマイザーが間違った決定を下した場合は、使用するアルゴリズムを選択して、何が起こるかをより細かく制御することができます。

私が最近行ったクールなことの1つは分割でした。実行フローを分割し、各分割に異なる関係を適用できます。したがって、非線形データセットを作成し、フィールドに基づいて分割し、各部分に異なる処理を適用して、最終的に結果を結合することができます。これらはすべて同じスクリプトで行われます。 Hiveでこれを行うことはできないと思います。ケースごとに異なるクエリを作成する必要がありますが、私は間違っている可能性があります。

また、PIGでカウンターをインクリメントできることにも注意してください。現在、これはPIGUDFでのみ実行できます。 Hiveではカウンターを使用できないと思います。

また、PIGをHiveとインターフェースできるNiceプロジェクト(HCatalogなど)がいくつかあるため、基本的にHiveテーブルからデータを読み取ったり、Hiveテーブルにデータを書き込んだり(またはその両方)することができます。脚本。動的パーティションもサポートします。

7
Charles Menguy

PigとHiveの正確な違いは何ですか?同じ仕事をするために使われているので、どちらも同じ機能的な意味を持っていることがわかりました。

Pig Vs Hiveの比較 nut Shell from dezyreの記事をご覧ください

Hiveスコア以上[〜#〜] pig [〜#〜] in Partitions、Server、Web interface&JDBC/ODBC support

いくつかの違い:

  1. Hive構造化データ[〜#〜] pig [〜#〜]に最適です=は半構造化データに最適です

  2. Hive for reporting[〜#〜] pig [〜#〜] for プログラミング

  3. Hive宣言型SQL[〜#〜] pig [〜#〜]として使用=として使用手続き型言語

  4. Hiveサポートpartitions[〜#〜] pig [〜#〜]サポートしていません

  5. Hiveオプションで起動できますthriftベースのサーバー[〜#〜] pig [〜#〜]できません

  6. Hive事前にテーブルを定義します(schema) +スキーマ情報をデータベースに格納し、[〜#〜] pig [〜#〜]データベースの専用メタデータがありません

  7. HiveはAvroをサポートしていませんが、[〜#〜] pig [〜#〜]はサポートしています

  8. Pig追加の[〜#〜] cogroup [〜#〜]外部結合を実行する機能もサポートしていますが、Hiveはサポートしていません。しかし、両方Hive&PIGできますjoin、order&sort動的に

では、いつ、どのテクノロジーを使用するのでしょうか。

上記の違いはあなたの質問を明確にします。

Hive:構造化データ、SQLのようなクエリで、レポートの目的で使用されます

PIG:半構造化データ、MapReduceジョブの一連のアクティビティを含むワークフローをプログラムします。

ジョブのパフォーマンスに関しては、HivePIGの両方が従来のMapReduceジョブと比較して遅いです。 Reason:最後に、HiveまたはPIGスクリプトを一連のMapReduceジョブに変換する必要があります。

関連するSEの質問をご覧ください。

Pig vs Hive vs Native Map Reduce

3
Ravindra babu

Apache Pigは、大規模なデータセットを分析するためのプラットフォームです。 Pigの言語であるPigLatinは、データセットのマージ、フィルタリング、レコードまたはレコードのグループへの関数の適用などのデータ変換を表現できる単純なクエリ代数です。ユーザーは独自の関数を作成して、特別な目的の処理を行うことができます。

Pig Latinクエリは、クラスター上で分散方式で実行されます。現在の実装では、Pig LatinプログラムをMap-Reduceジョブにコンパイルし、Hadoopクラスターを使用してそれらを実行します。

https://cwiki.Apache.org/confluence/display/PIG/Index%3bjsessionid=F92DF7021837B3DD048BF9529A434FDA

Hiveは、Hadoopのデータウェアハウスシステムであり、データの要約、アドホッククエリ、およびHadoop互換ファイルシステムに格納されている大規模なデータセットの分析を容易にします。 Hiveは、このデータに構造を投影し、HiveQLと呼ばれるSQLのような言語を使用してデータをクエリするメカニズムを提供します。同時に、この言語を使用すると、従来のmap/reduceプログラマーは、HiveQLでこのロジックを表現するのが不便または非効率な場合に、カスタムマッパーとリデューサーをプラグインできます。

https://cwiki.Apache.org/Hive/

3
Infinity

主な違いは、PIGがデータフロー言語であり、Hiveがデータウェアハウスであるということです。 PIGは、ステップバイステップの手続き型言語と同様に使用できます。ただし、Hiveは宣言型言語として使用されます。 PIGは、オンラインストリーミングの非構造化データを取得するために使用できます。ただし、Hiveは構造化データにのみアクセスでき、JDBCおよびODBCドライバーを使用してSQL、NOSQLなどのRDBMSデータベースからのデータにもアクセスできます。PIGはデータをAvro形式に変換できますが、PIGはできません。 PIGはパーティションを作成できませんが、Hiveは作成できます。HiveはPIGの最上位であるため、HiveはPIGによって処理された後にのみデータにアクセスできます。構造化されたリレーショナルで作業している場合は、PIGとHiveをいつ使用する必要があるかによって異なります。データの場合はHiveを使用でき、それ以外の場合はPIGを使用できます。PIGを使用するとETLツールと通信できますが、Hiveに比べて時間がかかります。ただし、Hiveではデータを処理する前にテーブルを作成する必要があるため、HiveではなくPIGの方が簡単です。