Pig と Hive の正確な違いは何ですか? どちらも同じ作業に使用されるため、どちらも同じ機能的意味を持っていることがわかりました。唯一のことは、両方で異なる実装です。では、いつ、どのテクノロジーを使用するのでしょうか? 適用性とパフォーマンスの点で両者の違いを明確に示す両方の仕様はありますか?
5 に答える
Apache Pig と Hive は、Hadoop の上層にある 2 つのプロジェクトであり、Hadoop の MapReduce ライブラリを使用するための高水準言語を提供します。Apache Pig は、データの読み取り、フィルタリング、変換、結合、書き込みなどの操作を記述するためのスクリプト言語を提供します。まさに MapReduce が最初に設計された操作です。MapReduce を直接使用する何千行もの Java コードでこれらの操作を表現するのではなく、Pig を使用すると、ユーザーは bash や perl スクリプトと同様の言語で操作を表現できます。Pig は、Java 自体で MapReduce ジョブをコーディングするのではなく、MapReduce ベースのジョブのプロトタイピングと迅速な開発に優れています。
Pig が「Hadoop のスクリプト」である場合、Hive は「Hadoop の SQL クエリ」です。Apache Hive は、Hadoop 上のいくつかの MapReduce ジョブの操作を段階的に直接スクリプト化するのではなく、Hadoop ジョブを実行してデータをクエリするための、さらに具体的で高レベルの言語を提供します。この言語は、設計上、非常に SQL に似ています。Hive は依然として、大量のデータに対する長時間実行されるバッチ指向のクエリ用のツールとして意図されています。いかなる意味でも「リアルタイム」ではありません。Hive は、SQL に似たクエリやビジネス インテリジェンス システムに慣れているアナリストやビジネス開発タイプにとって優れたツールです。ピカピカの新しい Hadoop クラスターを簡単に活用して、アドホック クエリを実行したり、上記のストレージ システムに保存されているデータに対してレポート データを生成したりできます。
純粋にエンジニアリングの観点から、PIG は SQL に似た言語よりも記述と保守が容易であることがわかります。これは手続き型であるため、一連のリレーションを 1 つずつデータに適用し、何かが失敗した場合は中間ステップで簡単にデバッグできます。また、アルゴリズムを使用してデータの一致をサンプリングする「illustrate」というコマンドもあります。あなたの関係。複雑なロジックを持つジョブの場合、これは間違いなく Hive よりもはるかに便利ですが、単純なものの場合、利益はおそらく最小限です。
インターフェイスに関しては、PIG は Hive に比べて柔軟性が高いことがわかりました。PIG にはテーブルの概念がないため、ファイルを直接操作し、ローダーを定義して、ローダー UDF を使用してほとんどすべての形式に簡単にロードできます。変換。最近のバージョンの PIG には、動的インボーカーを使用できる優れた機能があります。つまり、ほとんどすべての Java メソッドを PIG スクリプトで直接使用でき、UDF を作成する必要はありません。
パフォーマンス/最適化のために、私が見たものから、使用する結合およびグループ化アルゴリズムのタイプを PIG で直接制御できます (それぞれに 3 つまたは 4 つの異なるアルゴリズムがあると思います)。私は個人的にそれを使用したことはありませんが、要求の厳しいアルゴリズムを作成しているため、Hive の場合のようにオプティマイザーに依存する代わりに、何をすべきかを決定できると便利かもしれません。したがって、必ずしも Hive よりもパフォーマンスが優れているとは言えませんが、オプティマイザーが間違った決定を下した場合、使用するアルゴリズムを選択して、何が起こるかをより細かく制御できます。
私が最近行ったクールなことの 1 つは分割です。実行フローを分割し、各分割に異なるリレーションを適用できます。したがって、非線形データセットを取得し、フィールドに基づいて分割し、各部分に異なる処理を適用し、最終的に結果を結合することができます。これらすべてを同じスクリプトで行うことができます。Hive でこれを行うことはできないと思います。ケースごとに異なるクエリを作成する必要がありますが、間違っている可能性があります。
注意すべきことの 1 つは、PIG でカウンターをインクリメントできることです。ただし、現在、これは PIG UDF でのみ実行できます。Hive でカウンターを使用することはできないと思います。
また、PIG を Hive とインターフェースできる (HCatalog のような) いくつかの優れたプロジェクトがあるため、基本的には、ローダーを変更するだけで、Hive テーブルからデータを読み取ったり、Hive テーブルにデータを書き込んだり (またはその両方) できます。脚本。動的パーティションもサポートします。
Pig と Hive の正確な違いは何ですか? どちらも同じ作業に使用されるため、どちらも同じ機能的意味を持っていることがわかりました。
記事のナットシェルでのPig Vs Hiveの比較をご覧くださいdezyre
Hiveは、パーティション、サーバー、Web インターフェイス、および JDBC/ODBC サポートでPIGを上回りました。
いくつかの違い:
Hiveは構造化データに最適で、 PIGは半構造化データに最適です
レポートに使用されるHiveとプログラミングに使用されるPIG
宣言型 SQLとして使用されるHiveと手続き型言語として使用されるPIG
Hiveはパーティションをサポートしますが、PIGはサポートしません
Hiveはオプションの倹約ベースのサーバーを起動できますが、PIGは起動できません
Hiveは事前にテーブルを定義(スキーマ) + スキーマ情報をデータベースに保存し、PIGにはデータベースの専用メタデータがありません
Hiveは Avro をサポートしていませんが、PIGはサポートしています
Pigは、外部結合を実行するための追加の COGROUP機能もサポートしていますが、Hive はサポートしていません。ただし、Hive と PIGはどちらも動的に結合、並べ替え、ソートできます
では、いつ、どのテクノロジーを使用するのでしょうか?
上記の違いにより、クエリが明確になります。
HIVE
: 構造化データ、SQL のようなクエリ、レポート目的で使用
PIG
: 半構造化データ、Map Reduce ジョブの一連のアクティビティを含むワークフローをプログラムします。
ジョブのパフォーマンスに関しては、HIVE
との両方PIG
が従来の Map Reduce ジョブに比べて遅いです。Reason
: 最後に、Hive または PIG スクリプトを一連の Map Reduce ジョブに変換する必要があります。
関連するSEの質問を見てください:
Apache Pig は、大規模なデータ セットを分析するためのプラットフォームです。Pig の言語である Pig Latin は単純なクエリ代数であり、データ セットのマージ、フィルタリング、レコードまたはレコード グループへの関数の適用などのデータ変換を表現できます。ユーザーは、専用の処理を行う独自の関数を作成できます。
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 でこのロジックを表現することが不便または非効率的である場合に、カスタム マッパーとリデューサーをプラグインすることもできます。
主な違いは、PIG はデータ フロー言語であり、Hive はデータ ウェアハウスです。PIG は、段階的な手続き型言語と同様に使用できます。しかし、HIVE は宣言型言語として使用されます。PIG は、オンライン ストリーミングの非構造化データを取得するために使用できます。ただし、HIVE は構造化データにしかアクセスできず、JDBC および ODBC ドライバーを使用して、SQL、NOSQL などの RDBMS データベースからのデータにもアクセスできます。PIG はデータを Avro 形式に変換できますが、PIG はできません。PIG はパーティションを作成できませんが、HIVE は作成できます。HIVE は PIG のトップであるため、HIVE は PIG によって処理されたデータにのみアクセスできます。構造化されたリレーショナル データを使用している場合は PIG と HIVE をいつ使用する必要があるかによって異なります。それ以外の場合は、PIG を使用できます。PIG では ETL ツールと通信できますが、Hive に比べて時間がかかります。