Apache Hiveは、Hadoopのデータ上でアドホッククエリを実行するためにHadoopの上に位置するフレームワークです。 Hiveは、SQLに似たHiveQLをサポートしていますが、SQLの完全な構造はサポートしていません。
Hiveは、HiveQLクエリをJava MapReduceプログラムに変換し、Hadoopクラスターに送信します。 HiveQLとJava MapReduceを使用しても同じ結果が得られますが、Java MapReduceを使用するには、HiveQLと比較して多くのコードを記述/デバッグする必要があります。 そのため、HiveQLは開発者の生産性を向上させます。
要約すると、Hiveは、HiveQL言語を介して、Java MapReduceプログラミングよりも高いレベルの抽象化を提供します。 他の高レベルの抽象化と同様に、Java MapReduceと比較した場合、HiveQLを使用するとパフォーマンスのオーバーヘッドが少しありますが、Hiveコミュニティは、一般的に使用されるほとんどのシナリオでこのギャップを狭めています。
同じラインに沿って、PigはMapReduceよりも高いレベルの抽象化を提供します。 PigはPigLatinコンストラクトをサポートします。これはJava MapReduceプログラムに変換され、Hadoopクラスターに送信されます。
HiveQLはSQLのような宣言型言語ですが、PigLatinはデータフロー言語です。 1つのPigLatinコンストラクトの出力を別のPigLatinコンストラクトへの入力として送信できます。
しばらく前、Clouderaは典型的なHadoopクラスターのワークロード特性に関する統計を公開しました。PigとHiveのジョブがHadoopクラスターのジョブの大部分を占めていることは容易に観察できます。 開発者の生産性が高いため、多くの企業がPigやHiveのような高レベルの要約を選択しています。 したがって、MapReduceの開発と比較した場合、HiveとPigの周りに多くの求人が存在することは間違いありません。
Programming Pigの本は2011年10月に出版されましたが、Programming Hiveの本は2012年10月に出版されました。RDBMSの使用経験がある人にとっては、Pigを始めるよりもHiveを始める方が良いでしょう。 また、PigLatin言語を使い始めるのはそれほど難しくないことに注意してください。
基礎となるHadoopクラスターの場合、Java MapReduceジョブが送信されるか、MapReduceジョブがHiveおよびPigを介して送信されるかは透過的です。 MapReduceジョブはバッチ指向であるため、HiveおよびPigを介して送信されるジョブもバッチ指向です。
リアルタイムの応答要件の場合、HiveとPigは、前述のMapReduceジョブのバッチ指向の性質のため、要件を満たしていません。 ClouderaはImpalaを開発しました。これは、Hadoopに加えてインタラクティブなアドホッククエリ用のDremel(Googleの出版物)に基づいています。 ImpalaはSQLのようなクエリをサポートし、HiveQLと互換性があります。 したがって、Hiveの上に構築されたアプリケーションは、Impalaを使用して最小限の変更で動作するはずです。 HiveとImpalaの主な違いは、HiveQLはJava MapReduceジョブに変換されますが、ImpalaはSQLクエリをJava MapReduceジョブに変換しないことです。
特定の要件については、PigまたはHiveを使用する必要がありますか? それは別のブログのトピックです。
Praveen Sripatiの許可を得て再発行。 元の記事はここにあります:http://www.thecloudavenue.com/2012/12/introduction-to-apache-hive-and-pig.html