豚とハイブの違いは?なぜ両方あるの?[閉まっている]


256

私の経歴-Hadoopの世界で生後4週間。ClouderaのHadoop VMを使用して、Hive、Pig、Hadoopに少し手を加えました。Map-ReduceとGFSに関するGoogleのペーパー(PDFリンク)を読んでいること。

という事は承知しています-

  • Pigの言語Pig Latinは、宣言的なプログラミングスタイルのようなSQLからのシフト(プログラマーの考え方に適合)であり、Hiveのクエリ言語はSQLによく似ています。

  • 豚はHadoopの上に座っており、原則としてドライアドの上に置くこともできます。私は間違っているかもしれませんが、HiveはHadoopと密接に関連しています。

  • Pig LatinコマンドとHiveコマンドの両方がコンパイルされ、MapジョブとReduceジョブが実行されます。

私の質問-1つ(たとえば、Pig)が目的を果たすことができるときに両方を持つことの目標は何ですか?それは、PigがYahoo! FacebookのHiveですか?


24
Hiveは構造化データ用です。Pigは非構造化データ用です。
デッドプログラマ、

回答:


151

Yahoo!のPigアーキテクトであるAlan Gatesによるこの投稿をご覧ください。PigではなくHiveのようなSQLを使用する場合を比較しています。彼は、Pig(vs.宣言型SQL)などの手続き型言語の有用性と、データフロー設計者にとってのその有用性について、非常に説得力のある主張をしています。


Alanは、以下のj03mで共有されているように、Hiveを具体的に説明する記事も執筆しています。彼からの良いもの!
Dolan Antenucci

14
Hiveは構造化データ用です。Pigは非構造化データ用です。
デッドプログラマ、

7
よくわかりません。「ブタのような手続き言語の有用性」と言うつもりですか?なぜなら、この記事は「豚ラテン語は手続き型である」と繰り返し主張しているためです。
Matt Fenwick 2013年

4
一時的なものかどうかはわかりませんが、記事がなくなっているようです。リンクを更新できますか(クイック検索で見つけられませんでした)?
Peter Klipfel 14年

1
アラン・ゲイツ氏のポストは、それを通過してください.. ..ここにあるdeveloper.yahoo.com/blogs/hadoop/...
Mr.Chowdary

57

Hiveは、SQLに慣れているコミュニティにアピールするように設計されています。その哲学は、さらに別のスクリプト言語を必要としないことでした。Hiveは、ユーザーが選択した言語(SQL句に埋め込むことができます)で変換スクリプトをマップおよび削減することをサポートしています。SQLに慣れているアナリストや、Pythonでプログラミングするデータマイナーによって、Facebookで広く使用されています。PigでのSQL互換性の取り組みはAFAIKから放棄されたため、2つのプロジェクトの違いは非常に明確です。

SQL構文をサポートすることは、Microstrategyなどの既存のBIツールと統合できることも意味します。HiveにはODBC / JDBCドライバーがあり(これは進行中の作業です)、これにより近い将来これが可能になります。また、このような環境で一般的なドリルダウンクエリのサポートを可能にするインデックスのサポートを追加し始めています。

最後に、これは質問には直接関係ありません。Hiveは分析クエリを実行するためのフレームワークです。その主な用途はフラットファイルのクエリですが、他のストアをクエリできない理由はありません。現在、HiveはHbase(ほとんどのRDBMSの根本にあるようなKey-Valueストア)に格納されているデータをクエリするために使用でき、HadoopDBプロジェクトはHiveを使用して連合RDBMS層をクエリしています。


37

私はこれが最も役に立ちました(ただし、1年前です)-http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

具体的には、Pig vs Hive、およびYahooで採用されている時期と場所について説明しています。これは非常に洞察に満ちたものでした。いくつかの興味深いメモ:

データセットの増分変更/更新について:

代わりに、新しい増分データに対して結合し、その結果を前の完全結合の結果と一緒に使用するのが正しいアプローチです。これには数分しかかかりません。標準のデータベース操作は、Pig Latinでこの段階的な方法で実装でき、Pigをこのユースケースに適したツールにしています。

ストリーミング経由で他のツールを使用する場合:

Pigとストリーミングの統合により、研究者は既に小さなデータセットでデバッグしたPerlまたはPythonスクリプトを簡単に取得して、巨大なデータセットに対して実行することもできます。

データウェアハウジングにHiveを使用する場合:

どちらの場合も、リレーショナルモデルとSQLが最適です。実際、データウェアハウジングは、その歴史の多くを通じて、SQLのコアユースケースの1つでした。アナリストが使用したい種類のクエリとツールをサポートするための適切な構成要素があります。また、ツールとフィールドのユーザーの両方がすでに使用しています。

HadoopサブプロジェクトHiveは、Hadoop用のSQLインターフェースとリレーショナルモデルを提供します。Hiveチームは、ODBCなどのインターフェースを介してBIツールと統合する作業を開始しました。


1
+1は、Pigの最初の作成者、または少なくとも非常に大きな支持者であるYahooとの比較を見るのに最適です。編集: -とても素晴らしいシェア:)上記ヤコブから、私は著者(アラン・ゲイツ)はヤフーで豚・アーキテクトであることを確認
ドーランAntenucci

3
リンクが切れています。この時点での正しいURLは、https//developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.htmlです。
agarie 14

1
上記のリンクを更新
j03m 2014


上記で共有された2つのリンクはもう見つかりません。
Keshav Pradeep Ramanath 2017

28

「dezyre」の記事のナットシェルPig Vs Hiveの比較をご覧ください

Hiveは、パーティション、サーバー、Webインターフェイス、JDBC / ODBCサポートの点でPIGより優れています。

いくつかの違い:

  1. ハイブは、のために最善である構造化データPIGのために最善である半構造化データ

  2. ハイブが使用され、レポートPIGのためのプログラミング

  3. Hive手続き型言語として宣言型SQLおよびPIGとして使用されます

  4. ハイブは、サポートされていたパーティションをPIGはありません

  5. ハイブは、オプションを開始することができ倹約ベースのサーバーPIGができません

  6. Hiveは事前にテーブルを定義しますスキーマ)+スキーマ情報をデータベースに保存します&PIGはデータベースの専用メタデータを持っていません

  7. HiveAvroをサポートしていませんが、PIGはサポートしています。編集:HiveはAvroをサポートし、serdeをorg.apache.hadoop.hive.serde2.avroとして指定します

  8. Pigは、外部結合を実行するための追加のCOGROUP機能もサポートしていますが、ハイブはサポートしていません。ただし、HiveとPIGはどちらも動的に結合、並べ替え、並べ替えができます。


17

私はあなたの質問に対する本当の答えはそれらが独立したプロジェクトである/であったことであり、中央で調整された目標がなかったと信じています。彼らは早い段階で別のスペースにいて、両方のプロジェクトが拡大するにつれて時間と重なるように成長しました。

Hadoop O'Reillyの本から言い換えると:

Pig:非常に大きなデータセットを探索するためのデータフロー言語と環境。

Hive:分散データウェアハウス


22
HiveはRDBMSのようなものではありません。Pigと同じようにフラットファイルを処理します。基本的にはどちらも同じことを行います。ジョブをコンパイルするときに使用するオプティマイザを見てください。これが最も大きな違いです。
Steve Severance、2010

12

pig / hiveクエリでも同様の結果を得ることができます。主な違いは、クエリの理解、記述、作成の方法にあります。

Pigはデータのフローを作成する傾向があります。小さなステップごとに
Hiveがデータを操作するSQLのような言語を提供するため、RDBMSからの変換ははるかに簡単です(Pigは、以前に経験したことがない人にとっては簡単です) SQLを使用)

Hiveの場合、このデータ(HUEの場合はBeeswax、またはHive Webインターフェース)を操作するための優れたインターフェースがあり、データ(スキーマなど)に関するメタストアを提供することも注目に値します。データに関する中心的な情報。

異なるクエリに対してHiveとPigの両方を使用します(クエリをより速く/より簡単に記述できるものを使用します。ほとんどの場合、この方法でアドホッククエリを実行します)。同じデータを入力として使用できます。しかし、現在私は蜜蝋を通して多くの仕事をしています。


12

Pigでは、パイプラインの任意の時点でデータとユーザーコードを読み込むことができます。これは、データがストリーミングデータである場合、たとえば衛星や計測器からのデータである場合に特に重要です。

RDBMSベースのHiveでは、最初にデータをインポート(またはロード)し、その後データを処理する必要があります。したがって、ストリーミングデータにHiveを使用している場合、バケット(またはファイル)にデータを入力し続け、他のバケットを使用して新たに到着したデータを保存し続ける一方で、入力された各バケットにHiveを使用する必要があります。

Pigも遅延評価を使用します。これにより、プログラミングが非常に簡単になり、HiveのようなSQLのような言語よりも自由にさまざまな方法でデータを分析できます。したがって、持っているいくつかの非構造化データの行列やパターンを分析したい場合、およびそれらに対して興味深い計算をしたい場合、Pigを使用するとかなりの距離を移動でき、Hiveを使用すると結果を再生するために別のものが必要になります。

Pigはデータのインポートでは高速ですが、実際の実行ではHiveのようなRDBMSフレンドリーな言語よりも低速です。

Pigは並列化に適しているため、データセットが巨大なシステム、つまり、レイテンシ(結果の特定のデータを取得する時間)よりも結果のスループットを重視するシステムに有利です。


10

ハイブ対豚

Hiveは、SQLに精通したユーザーまたはTableu / Microstrategyなどのその他のツールや、SQLインターフェースを備えたその他のツールや言語を許可するSQLインターフェースです。

PIGは、ETLパイプラインに似ています。変数の宣言、ループ、反復、条件ステートメントなどのステップバイステップコマンドを使用します。

複雑な段階的なロジックを記述したい場合は、ハイブQLよりもPigスクリプトを記述する方が好みです。データをプルするための単一のSQLを書きたい場合は、Hiveを使用します。ハイブの場合は、クエリの前にテーブルを定義する必要があります(RDBMSで行うように)

両方の目的は異なりますが、内部的にはどちらも同じことを行い、map reduceプログラムに変換します。また、Apacheオープンソースコミュニティは、両方のプロジェクトに機能をどんどん追加しています



7
  1. Pig-latinはデータフロースタイルであり、ソフトウェアエンジニアに適しています。sqlは、sqlに慣れている分析担当者に適しています。複雑なタスクの場合、ハイブの場合、中間データを格納する一時テーブルを手動で作成する必要がありますが、豚の場合は必要ありません。

  2. Pig-latinは、複雑なデータ構造(小さなグラフなど)に適しています。タプルのコレクションであるDataBagと呼ばれるブタのデータ構造があります。複数のタプルを含むメトリックを計算する必要がある場合があります(タプル間に非表示のリンクがあり、この場合はグラフと呼びます)。この場合、UDFを記述して、複数のタプルを含むメトリックを計算するのは非常に簡単です。もちろん、ハイブで行うこともできますが、ブタの場合ほど便利ではありません。

  3. 私の意見では、豚でUDFを書くのはHiveよりもはるかに簡単です。

  4. Pigはメタデータをサポートしていません(またはオプションであり、将来的にはhcatalogを統合する可能性があります)。Hiveには、データベースに保存されているテーブルのメタデータがあります。

  5. ローカル環境で豚のスクリプトをデバッグできますが、ハイブがそれを行うのは難しいでしょう。その理由はポイント3です。ローカル環境でハイブメタデータをセットアップする必要があり、非常に時間がかかります。




4

リンクから: http //www.aptibook.com/discuss-technical ? uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive

Hiveは完全なデータベースではありません。HadoopとHDFSの設計上の制約と制限により、Hiveが実行できることが制限されます。

Hiveは、データウェアハウスアプリケーションに最適です。

1)比較的静的なデータが分析され、

2)速い応答時間は必要ありません。

3)データが急速に変化していない場合。

Hiveは、OLTP、オンライントランザクション処理に必要な重要な機能を提供していません。これは、OLAPツールであるオンライン分析処理に近いものです。そのため、Hiveは、データウェアハウスアプリケーションに最適で、洞察やレポートなどのために大規模なデータセットが維持およびマイニングされます。


4

簡単に言うと、Pigは、Hadoopで使用されるMapReduceプログラムを作成するための高レベルのプラットフォームであり、大量のデータを目的の形式に処理するpigスクリプトを使用します。

処理されたデータが取得されると、この処理されたデータはHDFSに保持され、後で処理して目的の結果を得ることができます。

保存された処理済みデータに加えて、HIVE SQLコマンドを適用して目的の結果を取得します。内部的には、このHive sqlコマンドがMAP Reduceプログラムを実行します。


これは、知識ベースに意味のある追加ではありません。さらに情報を追加してみてください
agconti 2014年

4

簡単に言えば、両方の非常に高レベルの概要を説明します。

1)Pigはhadoop上の関係代数です

2)Hiveは、Hadoop上のSQL(Pigの1レベル上)です。


代数の比較が興味深い
Ravindra babu

3

PIGでは不可能なHIVEの機能

分割はHIVEを使用して行うことができますが、PIGではできません。これは出力をバイパスする方法です。

HIVEでは不可能なPIGの機能は何ですか?

位置参照-フィールド名がない場合でも、$ 0のような位置を使用して参照できます-最初のフィールドには$ 1、2番目には$ 1など。

もう1つの根本的な違いは、PIGは値を書き込むためにスキーマを必要としないが、HIVEはスキーマを必要とすることです。

JDBCなどを使用して任意の外部アプリケーションからHIVEに接続できますが、PIGでは接続できません。

注:どちらもHDFS(hadoop分散ファイルシステム)上で実行され、ステートメントはMap Reduceプログラムに変換されます。


3

Hadoopある意味で使用している場合、それは巨大なデータ処理を試みていることを意味します。データ処理の最終目標は、コンテンツ/レポートを生成することです。

したがって、内部的には2つの主要なアクティビティで構成されています。

1)データ処理の読み込み

2)コンテンツを生成し、レポート作成などに使用します。

読み込み/データ処理-> Pigが役立ちます。

これはETLとして役立ちます(豚のスクリプトを使用してetl操作を実行できます)。

結果が処理されると、ハイブを使用して、処理された結果に基づいてレポートを生成できます。

Hive:倉庫処理用のhdfsの上に構築されています。

ブタから生成された処理済みコンテンツからハイブを使用して、アドホックレポートを簡単に生成できます。


1

豚は何でも食べます!つまり、非構造化データを消費する可能性があります。

Hiveにはスキーマが必要です。


1

Pigは、一般的に言えば、ETLのようなワークロードに役立ちます。たとえば、毎日データに対して実行する必要がある一連の変換。

Hiveは、アドホッククエリを実行する必要がある場合、またはデータを探索する場合に最適です。これは、視覚化レイヤー(Tableau / Qlikview)へのインターフェイスとして機能する場合があります。

どちらも必須であり、目的が異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.