2014年版 Hadoopを10分で試す(6) Pig

Hadoop関連(全部俺) Advent Calendar 2014:19日目の記事です

先日のHive編 (1),(2),(3) に続いてApache Pigです。Hive同様に、PigはMapReduceの上に位置するHadoopのエコシステムで、Pig Latinと言う「データのフロー」を記述できる言語で処理を書くことができます。

余談ですが、Clouderaのデータアナリスト向けトレーニングではHive、Pig、Impalaを扱っています。来年3月までの開催は、年明け1月のみとなっているので、興味のある方は是非。ディスカウントコード(ClouderaJapan_10)も利用できます(宣伝)。

Apache Pigとは

pig-logo PigはHadoop上に構築されている、データ処理用のエコシステムです。元々はYahoo! Incで開発され、オープンソースとして公開されました。

Pigはユーザーが書いた処理をMapReduceに変換して実行します。ユーザーがHadoopを知らなくても、大量なデータの処理にPigを使うことができます。

HiveとPigの違いは、HiveがSQLライクな言語であるのに対し、Pigはスクリプト言語でデータのフローを記述します。HIveとPigは同じようなことができますが、SQLで書きにくいような処理や、ETL処理などにも利用されます。

Pig Latin

Pigの処理にはPig Latinという言語を使用します。一連の処理を「データのフロー」として表現します。ちょっと取っ付きにくいと思われるかもしれませんが、それほどでもありません。

下記のHiveQLを例にして、Pigでどのように記述するかを見ていきましょう。

SELECT * FROM sample_07 WHERE salary > 100 ORDER BY salary DESC;

このクエリは

  • sample_07テーブルのデータを
  • salaryが100以上の条件で
  • salaryで降順にソートし
  • 表示する

ような処理です。

これをPig Latinで表現する場合、以下のようなデータフローとして表現します。

  1. sample_07のデータをロード(Pigはメタストアが必須ではない)
  2. 1のデータに対してsaralyが100以上の条件でフィルタ
  3. 2のデータをsalaryで降順にソート
  4. 3のデータを表示

Pig Latin では以下のように記述します。

/* sample_07 データをロード */
sampledata = LOAD '/user/hive/warehouse/sample_07' AS (code, description, total_emp, salary);

/* salaryが100以上の条件でフィルタ */
bigsalary = FILTER sampledata BY salary > 100;

/* ソート */
sorted = ORDER bigsalary BY salary DESC;

/* 出力 */
DUMP sorted;

 

「データフロー」という名の通り、データのフローに従った処理になっています。このスクリプトは1行ごとにMapReduceとして実行されるのではなく、最後のDUMP行を入力後、それまでの処理を構文解析し、実行計画を作ってクラスタにサブミットします。

PIGを使ってみよう

Hueの一番上のメニューの[Query Editor]でPigを選択して、先ほどのスクリプトを貼付けます。

pig_hue1貼付けたら、右上の三角をクリックします。MapReduceジョブが開始されます。

※HueからPigのスクリプトを実行する場合、Oozieサービスが起動されている必要があるので、事前に起動しておきましょう。シェルからPigを使う場合は不要です。

pig_hue2

しばらく待ちます。他にすることがなければ(笑)、これはMapReduceのジョブなので、HueのJob Browserで状況を見てみましょう。メニュー右上をクリックします。

この画面では、2つのジョブが実行されていますね

pig_hue_jobbrowser

ついでに Oozie のダッシュボードも見てみましょうか。トップのメニューのWorkflowからダッシュボードを選択すると、現在実行中のPigのジョブが処理されていることがわかります。

pig_hue_oozie

そうこうしているうちに処理が終わりました。

pig_hue_result

今回実行したスクリプトでは最後に DUMP (画面に表示)していました。(Pigは結果をファイルに保存することもできます)。このスクリーンショットにあるように、ログの中に結果が表示されています。わかりにくいですが()で囲まれているのが結果です。HueのHiveアプリケーションのように、結果が別のペインに表示されるわけではないのでご注意ください。

まとめ

このように、Pigはデータのフローによって処理を記述します。実際のデータ分析や処理ではもっと複雑なPig Latin を記述する必要がありますが、それほど取っ付きにくくないんじゃないかと思っています。

海外のデータサイエンス系の書籍などをみると、 R や PythonとともにPigが使われていることがよくあります。また、Pig用のライブラリのDataFuも便利です。

Pigの敷居の高いのは日本語の情報が少ないところがあるんじゃないかと思いますが、書籍としてはオライリーのHadoop3版(象本)、Hadoop徹底入門2版にもPigの情報はあります。ただ、Pigの日本語書籍なら、個人的には「パターンでわかるHadoop MapReduce」が情報量が多くおすすめです。

Hive同様にクエリにはそれなりの時間がかかります。複雑なクエリ、テーブルを結合するようなクエリになると、数時間もかかることがあります。MapReduceはバッチ処理であり、リアルタイムな結果を求めるには適していません。PigをApache Spark上で実行するために Pig-on-Spark というプロジェクトが立ち上がっているので、興味があれば下記のブログもご覧下さい(英語)。

http://blog.cloudera.com/blog/2014/09/pig-is-flying-apache-pig-on-apache-spark/

 

 

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)