私の経歴 - Hadoopの世界では4歳です。 ClouderaのHadoop VMを使って、Hive、Pig、Hadoopを少し手を加えた。 Map-ReduceとGFSに関するGoogleの論文( PDF link )を読んでください。
という事は承知しています-
Pigの言語Pig Latinは、宣言型のプログラミングのようなSQLからの移行であり(プログラマーの考えに合った)、Hiveのクエリ言語はSQLによく似ています。
ブタはHadoopの上に座っており、原則としてDryadの上にも座ることができます。私は間違っているかもしれませんが、HiveはHadoopと密接に関係しています。
Pig LatinとHiveの両方のコマンドは、MapおよびReduceジョブにコンパイルされます。
私の質問 - 片方(ピッグと言う)が目的を果たすことができるとき、両方を持つことの目的は何ですか。豚がヤフーによって福音化されたからといってそれは正しいですか。 Facebookでハイブ?
Yahoo!のPigアーキテクトであるAlan Gatesによるこの 投稿 をチェックしてください。彼はPigのような手続き型言語(宣言型SQL)の有用性とデータフロー設計者にとってのその有用性に関して非常に説得力のある主張をしています。
Hiveは、SQLに慣れたコミュニティにアピールするように設計されています。その哲学は、私たちがまだ別のスクリプト言語を必要としないということでした。 Hiveは、ユーザーが選択した言語(SQL句内に埋め込むことができる)でmapおよびtransformスクリプトをサポートします。これはFacebookでSQLに慣れているアナリストやPythonでのデータマイナープログラミングによって広く使われています。 PigでのSQL互換性への取り組みはAFAIKから放棄されました - そのため、2つのプロジェクトの違いは明らかです。
SQL構文をサポートすることは、Microstrategyのような既存のBIツールと統合することも可能であることを意味します。 Hiveには、これが近い将来に起こることを可能にするはずのODBC/JDBCドライバー(これは進行中の作業です)があります。そのような環境で一般的なドリルダウンクエリのサポートを可能にするインデックスのサポートも追加され始めています。
最後に - これは直接の質問には関係ありません - Hiveは分析クエリを実行するためのフレームワークです。主な用途はフラットファイルのクエリですが、他のストアをクエリできない理由はありません。現在HiveはHbase(ほとんどのRDBMSの内部に見られるもののようなキーバリューストア)に格納されているデータを照会するために使用することができ、HadoopDBプロジェクトはHiveを使用して連合RDBMS層を照会しました。
私はこれが最も有用であることがわかりました(しかし、それは1歳です) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-Hive-at-yahoo
それは特にPig vs Hiveについて、そしてそれらがYahooでいつ、どこで雇用されているかについて語っています。私はこれが非常に洞察力に富んでいると感じました。興味深いメモがいくつかあります。
データセットへの増分変更/更新時:
代わりに、新しい増分データに対して結合し、その結果を以前のフル結合の結果と一緒に使用することが正しいアプローチです。これはほんの数分かかります。標準的なデータベース操作は、Pig Latinでこの段階的な方法で実装でき、Pigをこのユースケースに適したツールにします。
ストリーミングを介して他のツールを使用する上で:
ストリーミングと豚の統合はまた、研究者が彼らが既に小さなデータセットでデバッグしたPerlまたはPythonスクリプトを取り、巨大なデータセットに対してそれを実行することを容易にします。
データウェアハウスにHiveを使用することについて
どちらの場合も、リレーショナルモデルとSQLが最適です。確かに、データウェアハウスはその歴史の大部分を通して、SQLの中心的なユースケースの1つです。アナリストが使用したい種類のクエリやツールをサポートするための正しい構成要素があります。そしてそれはすでに現場のツールとユーザーの両方によって使用されています。
HadoopサブプロジェクトHiveは、Hadoop用のSQLインターフェースとリレーショナルモデルを提供します。 Hiveチームは、ODBCなどのインタフェースを介してBIツールと統合する作業を開始しました。
Pig Vs Hive "dezyre"記事の nut Shell を比較してください。
Hive は _ pig _ よりも優れています。パーティション、サーバー、Webインターフェース、JDBC/ODBCサポート。
いくつかの違い:
Hive は構造化データに最適です。_& _ pig _ は構造化データに最適です
ハイブ はレポーティング& _ pig _ にプログラミングに使用されます
Hive は宣言型SQL& _ pig _ として手続き型言語として使用されます
ハイブ はパーティション& _ pig _ をサポートしていません
ハイブ はオプションのthrift based server& _ pig _ を起動できません
ハイブ テーブルをあらかじめ定義しておく(schema)+スキーマ情報をデータベースに保存する& _ pig _ データベース専用のメタデータを持たない
ハイブ はAvroをサポートしませんが _ pig _ はサポートします。編集:ハイブはAvroをサポートし、org.Apache.hadoop.Hive.serde2.avroとしてserdeを指定します
Pig は外部結合を実行するための追加のCOGROUP機能もサポートしますが、Hiveはサポートしません。しかし、 HiveとPIG は両方とも{join、order&sort _を動的に行うことができます。
あなたの質問に対する本当の答えは、それらが独立したプロジェクトであり、集中的に調整された目標がなかったということです。彼らは早い時期に別の場所にいて、両方のプロジェクトが拡大するにつれて時間と重なり合うようになりました。
Hadoop O'Reillyの本から言い換えます。
Pig:非常に大きなデータセットを探索するためのデータフロー言語と環境。
ハイブ:分散データウェアハウス
Pig/Hiveクエリでも同様の結果が得られます。主な違いは、クエリの理解/作成/作成へのアプローチにあります。
豚はデータの流れを作り出す傾向があります:それぞれの中で何らかの処理をする小さなステップ
Hiveはあなたのデータを操作するためのSQLライクな言語をあなたに与えるので、RDBMSからの変換はずっと簡単です(Pigは以前にSQLを経験したことがない人にとっては簡単です)
また、Hiveではこのデータを操作するためのNiceインターフェース(Beeswax for HUE、またはHive Webインターフェース)を使用できます。また、データ(スキーマなど)に関する情報をメタデータとして取得することもできます。あなたのデータに関する中心的な情報。
私はHiveとPigの両方を異なるクエリーに使用します(私はより速く/より簡単にクエリーを書くことができるものを使用します。私はこれを主にアドホッククエリーにします) - 入力として同じデータを使用できます。しかし、現在私はBeeswaxを通して私の仕事の多くをやっています。
Pigを使用すると、パイプラインの任意の時点でデータとユーザーコードを読み込むことができます。これは、データがストリーミングデータ、たとえば衛星や機器からのデータである場合に特に重要になります。
HDBはRDBMSベースであるため、最初にデータをインポート(またはロード)してから作業することができます。そのため、ストリーミングデータにHiveを使用している場合は、バケツ(またはファイル)をいっぱいにし、それぞれ--- filledバケツにHiveを使用しながら、新しく到着するデータを保存し続ける必要があります。
豚も怠惰な評価を使用しています。それはプログラミングをより容易にし、HiveのようなSQLのような言語よりももっと自由にさまざまな方法でデータを分析するためにそれを使うことができます。つまり、実際に持っていた非構造化データの中の行列やパターンを分析し、それらについて興味深い計算をしたいのであれば、Pigを使用するとかなり距離がありますが、Hiveを使用すると結果を得ることができます。
PigはHiveのようなRDBMSに優しい言語よりもデータのインポートは高速ですが、実際の実行は低速です。
Pigは並列化に非常に適しているため、データセットが巨大なシステム、つまり待ち時間(結果の特定のデータを取得する時間)よりも結果のスループットを重視するシステムにEdgeを使用する可能性があります。
このリンクでPIGとHiveの違いを読んでください。
http://www.aptibook.com/Articles/Pig-and-Hive-advantage-disadvantage-features
すべての側面が与えられています。どちらを選択するか混乱している場合は、そのWebページを表示する必要があります。
ハイブ対ブタ -
Hiveは、SQLに精通したユーザー、またはTableu/Microstrategy/SQLインターフェイスを持つその他のツールや言語のような他のツールを可能にするSQLインターフェイスです。
PIGはETLパイプラインのようなものです。変数の宣言、ループ、反復、条件付きステートメントなどのステップバイステップのコマンドがあります。
複雑なステップバイステップのロジックを書きたい場合は、Hive QLよりもPigスクリプトを書くほうが好きです。私は私がハイブを使用したいデータを引っ張るための単一のSQLを書くことに満足しているとき。 Hiveでは、問い合わせをする前にテーブルを定義する必要があります(RDBMSで行うように)
両者の目的は異なりますが、内部では両方とも同じことを行い、map reduceプログラムに変換します。さらに、Apacheオープンソースコミュニティでは、両方のプロジェクトにますます多くの機能を追加しています。
ブタラテン語はデータフロースタイルであり、ソフトウェアエンジニアにより適しています。 SQLはSQLに慣れるアナリティクスの方に適していますが。複雑な作業の場合、Hiveでは中間データを格納するための一時テーブルを手動で作成する必要がありますが、ブタには必要ありません。
ブタラテン語は複雑なデータ構造(小さなグラフのような)に適しています。ブタには、TupleのコレクションであるDataBagというデータ構造があります。時には、複数のタプルを含むメトリックを計算する必要があります(タプル間に隠れたリンクがあります。この場合は、これをグラフと呼びます)。この場合、複数のタプルを含むメトリックを計算するためのUDFを書くのは非常に簡単です。もちろん、Hiveで行うこともできますが、ブタの場合ほど便利ではありません。
私の考えでは、ブタでUDFを書く方がHiveよりも簡単です。
Pigはメタデータをサポートしていません(あるいはオプションです。将来的にはhcatalogを統合するかもしれません)。 Hiveはデータベースにテーブルのメタデータを格納しています。
ローカル環境でpigスクリプトをデバッグすることはできますが、Hiveがそれを行うのは難しいでしょう。理由はポイント3です。ローカル環境にHiveメタデータを設定する必要があり、非常に時間がかかります。
HiveとPIGの使用方法と使用時期を調べるための便利なリンクを以下に示しました。
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-Hive-sql/
PigまたはHiveを使用するための追加のリンクは次のとおりです。
簡単に言うと、PigはHadoopで使用されるMapReduceプログラムを作成するための高水準プラットフォームです。Pigスクリプトを使用して大量のデータを目的の形式に処理します。
処理されたデータが得られると、この処理されたデータは所望の結果を得るために後の処理のためにHDFSに保存される。
保存された処理済みデータに加えて、目的の結果を得るためにHive SQLコマンドを適用します。内部的にこのHive sqlコマンドはMAP Reduceプログラムを実行します。
ハイブは完全なデータベースではありません。 HadoopとHDFSの設計上の制約と制限により、Hiveにできることに制限があります。
Hiveは、データウェアハウスアプリケーションに最適です。
1)比較的静的なデータが分析される。
2)速い応答時間は要求されない。
3)データが急激に変化していないとき。
HiveはOLTP、オンライントランザクション処理に必要な重要な機能を提供していません。これは、OLAPツールであるOnline Analytic Processingに近いものです。そのため、Hiveは、大きなデータセットが維持され、洞察、レポートなどのためにマイニングされるデータウェアハウスアプリケーションに最適です。
PIGでは不可能なことですが、Hiveでできることは何ですか?
分割はHiveを使用して実行できますが、PIGではできません。これは、出力をバイパスする方法です。
HIVEでは不可能なPIGにできることは?
位置参照 - フィールド名がない場合でも、最初のフィールドには$ 0、2番目には$ 1などの位置を使用して参照できます。
そしてもう一つの根本的な違いは、PIGは値を書くためにスキーマを必要としませんが、Hiveはスキーマを必要とします。
JDBCなどを使用して外部アプリケーションからHiveに接続することはできますが、PIGを使用して接続することはできません。
注:どちらもHDFS(hadoop分散ファイルシステム)上で実行され、ステートメントはMap Reduceプログラムに変換されます。
その意味でHadoop
を使っているということは、巨大なデータ処理を試みているということですデータ処理の最終的な目標は、それからコンテンツ/レポートを生成することです。
それで、それは内部的に2つの主要な活動から成ります:
1)データ処理の読み込み
2)コンテンツを生成して報告などに使用します。
Loading/Data Processing - > Pigが役に立ちます。
これはETLとして役立ちます(ブタのスクリプトを使用してetl操作を実行できます)。
結果が処理されたら、処理された結果に基づいてレポートを生成するためにHiveを使用できます。
Hive:ウェアハウス処理のためにhdfsの上に構築されています。
ブタから生成された処理済みコンテンツからHiveを使用して簡単にアドホックレポートを生成できます。
手短に言えば、両方の非常に高いレベルの概要を説明するには
1)豚はハドープ上の関係代数
2)Hiveはhadoop上のSQLです(Pigより1レベル上)
豚は一般的に言ってETLの種類の作業負荷に役立ちます。例えば、あなたが毎日あなたのデータにする必要がある一連の変換。
アドホッククエリを実行する必要がある場合、または単にデータを調べたい場合は、Hiveが輝きます。それは時々あなたの視覚化層(Tableau/Qlikview)へのインターフェースとして働くことができます。
どちらも必須であり、目的は異なります。
豚は何でも食べます!非構造化データを消費する可能性があることを意味します。
ハイブにはスキーマが必要です。