ブタと巣箱で快適 Hadoop Life!? – Apache Spark と Apache Pig & Apache Hive –

ブタと巣箱で快適 Hadoop Life!? – Apache Spark と Apache Pig & Apache Hive –

Hadoop エコシステムの中で、よく組み合わせて用いられるのが Pig (Apache Pig) と Hive (Apache Hive) です。直訳するとブタと巣箱 (笑)。ブタさんがゾウさんの仲間だったとは・・・世間は巣箱の中のように狭いですね。

これからの Hadoop は Spark が主流と言われていますが・・・

Hadoop 1.x が MapReduce を実装し、この世に登場してはや10年が経ちました。その後 YARN 上で MapReduce を稼働させる Hadoop 2.x が出現し、その頃から Hadoop エコシステムの開発が急速に進み始めました。

そして今注目されているのは Spark です。 (おや?タイトルと違うぞ??)
Spark は Hadoop の MapReduce 部分を置き換えることを目標として開発されたインメモリの分散フレームワーク です。

各 Hadoop ディストリビュータからは、今後は Spark へ注力 していくという表明がなされています。それに伴い Spark 対応の Hadoop エコシステムもこれから充実していくことでしょう。  (おや?タイトルと違うぞ??)

しかし、Spark は メモリ上でデータ処理 を行うため、サーバに大量のメモリを搭載する必要があります。でも大容量メモリに対応したハードウェアはまだ高価です。また、対応するエコシステムもまだ出始めたばかりなので、動作の安定性やHadoop環境への適合性など、不安要素がまだまだあります。
その点、旧(失礼!)Hadoop エコシステム は、コモディティハードウェアで使える のが利点です。さらに、利用者を支援する コミュニティも充実 しており、バグなどの対応も迅速に行われています。まだまだ需要はありそうです。

そこで今回は、改めて 旧(再び失礼!)Hadoop エコシステムの良さを再認識してみようということで、ブタさん(Pig) と 巣箱(Hive) に登場していただきます。

なぜこのペアが取り上げられているのか?という理由は、この後で説明する データの取り込みから分析した結果を得るまでのプロセス をこの2つで ほとんどカバー してしまうほど 強力なツール であるからなんです。

何やら最近の注目株らしい・・・(https://www.mapr.com/products/open-source-engines)

 

Pig とは?

Pig は米Yahoo!社により公開されたオープンソースソフトウエアですが、現在では Apacheプロジェクトの一部 になっています。MapReduce をより簡単に記述 できるように開発されました。

Pig は データを採取して処理し、標準化 するというデータフローを記述するのに向いています。そして、その特徴は「Pig Philosophy」として述べられています。

  • Pigs Eat Anything (Pig は何でも食べる)
    → ファイルの形式を問わず様々なデータを扱うことができます。
  • Pigs Live Anywhere (Pig はどこでも生きていける)
    → 元々並列データ処理を行うことを目指して開発された Pig ですが、Hadoop に限らず特定のフレームワークに依存しない仕様となっています。
  • Pigs Are Domestic Animals (Pig は家畜である)
    → ユーザが制御しやすいような考慮がされています。ユーザコードも取り込むこともできます。
  • Fly (Pig は空を飛ぶ)
    → Pig は高速にデータを処理しますが、パフォーマンスの改善には今後も取り組み、Pig が飛べなくなるような重い機能は実装しません。

Pig Philosophy
https://pig.apache.org/philosophy.html

Apache Pig プロジェクト
https://pig.apache.org/

実は、Spark でも同様の処理が可能 なのですが、現時点では Scala という言語を用いてコーディングする必要があります。それはかつて MapReduce をJava で記述していたように・・・ 。よって生産性については、Spark より Pig に軍配が上がる という訳です。

Apache Pig のイメージキャラクター(?)(https://www.mapr.com/products/open-source-engines)

 

Hive とは?

Hive は 米Facebook社によって Hadoop 上で動作する データウェアハウス 用途で開発されました。現在では Pig と同様 Apache プロジェクトの一部 になっています。

Hive を利用することにより、HDFS のフラットファイルを RDBMS のテーブルのように扱う ことができます。
また、Hive テーブルにアクセスする際は、HiveQL という SQL ライクな問い合わせ言語 を用います。これにより SQL で行うようなデータ検索・集計・分析が行えます。RDBMS に馴染みのある方であれば違和感なく使いこなせるのではと思います。

Apache Hive プロジェクト
https://hive.apache.org/

RDBMS ではなく、Hive を使うことの利点 は、大規模なデータセットを扱える 点にあります。RDBMS でデータを扱う場合、ファイルシステム上にあるデータを必ずメモリへ取り込む必要があります。この場合、たとえシェアドナッシング構成のRDBMSを以てしても扱えるデータサイズは最大でもギガバイトクラスです。しかし、Hive の場合は、分散環境上で MapReduce がデータを扱う ため、テラバイトやペタバイトクラスの容量 を扱うことができます。

大容量のデータを扱う処理に適したツールとしては、RDBMS より Hive に軍配が上がる という訳です。

Apache Hive のイメージキャラクター(?)(https://hive.apache.org/index.html)

 

ブタと巣箱ではどっちが使えるの?

以前のコラム でご紹介しましたが、現時点で最も使われている Hadoop エコシステム Top10 の中に Hive (第1位) と Pig(第5位) がランクインしています。しかしそれらは単独で使われることはほとんどありません。両者に限らず、各ツールの長所をさらに伸ばし、短所はお互い補完しあうような形で、複数の Hadoop エコシステムは組み合わせ て使われます。

発生したデータを採取・集積し、分析した結果を得るという一連のプロセスを データパイプライン と呼びます。その中で、適切と思われるツールを組み合わせて適用します。

Pig と Hive はいずれも MapReduce を簡単に扱う目的で開発されましたが、このデータパイプラインの中では役割が異なります。
多くの場合、Pigは、様々なデータ形式に対応できるという特性を生かし、データの発生源に近い所、つまり、生のデータを扱う箇所 で ETL ツール として使われます。
一方 Hive は、ユーザフレンドリーなクエリーを実行できることから、BIツールなどの 利用者に近い所 で使われます。

先ほども述べましたが、この Pig と Hive でデータパイプラインのほとんどの領域をカバー できてしまいます。

データパイプラインにおける Pig と Hive の役割

 

何はともあれ触ってみましょう

実際にこれらの動作を体験してみたい方は、各ディストリビューションから PC 上で動作する Sandbox を利用できます。Pig や Hive 以外のツールも含まれていますので、目的に応じて必要なツールや機能を選択できます。

Sandbox といっても、ほぼフルスペックの機能が実装されていますので、是非ともお試しください。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。