2013/1/21Hadoop Conference Japan 2013 Winter  Hadoop上の多種多様な処理でPigの活きる道  ~かわいい?ブタさんの扱い方~                                   ...
自己紹介 山下 真一 (やました しんいち) NTTデータ 基盤システム事業本部 所属            • Hadoopを中心にサービス・社内支援に従事 Hadoopに関する書籍も執筆(レビュー)しています Hadoop徹底入門(...
本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは ハチさん達とも仲良く おわりに Copyright © 2013 NTT DATA Corporation   3
本日のお題 Hadoopのよくある光景 Copyright © 2013 NTT DATA Corporation   4
はじめに 2009年の資料より                                         (出典: Hadoopカンファレンス2009) Copyright © 2013 NTT DATA Corporation    ...
よくあるHadoopの利用シーン・その1                        ?                                    !                                        ...
よくあるHadoopの利用シーン・その1                        ?                         !                                        初期   発展   普...
よくあるHadoopの利用シーン・その2                        ?                                  !                                        初期...
よくあるHadoopの利用シーン・その2                        ?                                            !                                ...
本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? Copyright © 2013 NTT DATA Corporation   10
ブタさんの紹介 Apache Pig                                http://pig.apache.org/                                          高級言語(Pi...
Pigの使い方1 データの流れを定義&処理するときにスキーマ定義 -- LOAD : データ入力 logdata = LOAD ‘パス’ USING PigStorage(‘,’); master = LOAD ‘パス’ USING PigS...
Pigの使い方2 データ型 int, long, float, double, chararray(文字列),bytearray 等 HadoopのWritableは意識しない                データ型やジョブ定義な デー...
Pigの使い方3-- サンプル処理-- ユーザ定義関数の登録と定義 (datacheck)REGISTER /tmp/pigudf.jar;DEFINE datacheck com.example.DataCheck(‘const’);-- デ...
Pigのポイント                        ?                                       !                                        初期       ...
本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは Copyright © 2013 NTT DATA Corporation   16
その1:処理はすべてを記述すること MapReduceジョブ実行タイミング マルチクエリを評価して全てのクエリを判断して実行 -- 処理結果Aの出力 STORE A INTO ‘a-dir’USING PigStorage(,); -- A...
その1:処理はすべてを記述すること       入力データA                           出力データA     出力データB       入力データB                                   ...
その2:分散キャッシュを活用せよ Java実装と同様に分散キャッシュも利用可能 小さなマスタデータの利用 など Hadoopプロパティを指定して適用 mapred.cache.files, mapred.create.symlinksプ...
その2:分散キャッシュを活用せよ 分散キャッシュを適用したUDF(サンプル) public class DataMatcher extends EvalFunc<String> {  private HashMap<String, Strin...
その3:カウンターも活用せよ Java実装 : カウンターの活用が多い 異常レコード数の確認 特別な処理を適用した件数 PigではUDF内にカウンター情報を記述可能 UDFの作成・・・EvalFunc や FilterFunc など ...
その3:カウンターも活用せよ カウンターを適用したUDF(サンプル) public class CounterUDF extends FilterFunc {  // enumでカウンタを定義。定義したインスタンスは、カウンタ名と同じ。  e...
その4:使えるツールは活用せよ Pigはデバッグ用途としての構文もある        DESCRIBE                          指定したリレーションのスキーマを表示                          ...
チューニングについてはドキュメントに記載済み 性能に効果のある記述方法は公式ドキュメント参照                                         http://pig.apache.org/docs/r0.10.0...
Pigはますます成長しています Pig Macros  よく利用する構文をまとめて扱える CUBE文 : キューブを作成するための構文  現在は非分散で実行、分散実行は開発中... Rank文 : 入力されたデータのランク付け  R...
本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは ハチさん達とも仲良く Copyright © 2013 NTT DATA Corporation   26
PigとHiveの違うところ                                         “パターンで分かるHadoop                                         MapReudce”と...
PigとHiveの違うところ-イメージPigLatin                           PigLatin              HiveQLPigLatin                           PigLa...
PigとHiveを活用する仕組み-HCatalog HCatalog : スキーマを共有して利用する仕組み        HCatalog用                                          HCatalog用...
本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは ハチさん達とも仲良く おわりに Copyright © 2013 NTT DATA Corporation   30
おわりに                        ?                                    !                                             初期       発展...
Thank you!Copyright © 2013 NTT DATA Corporation    32
Upcoming SlideShare
Loading in …5
×

Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)

4,860 views

Published on

山下 真一/株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス
2013年1月21日 Hadoop Conferecne Japan 2013 Winter 発表資料

Published in: Technology

Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)

  1. 1. 2013/1/21Hadoop Conference Japan 2013 Winter Hadoop上の多種多様な処理でPigの活きる道 ~かわいい?ブタさんの扱い方~ NTTデータ 基盤システム事業本部 山下 真一 Copyright © 2013 NTT DATA Corporation 1
  2. 2. 自己紹介 山下 真一 (やました しんいち) NTTデータ 基盤システム事業本部 所属 • Hadoopを中心にサービス・社内支援に従事 Hadoopに関する書籍も執筆(レビュー)しています Hadoop徹底入門(パワーアップした第2版は今春?) Hadoop Hacks その他 (象本とか、Pigの本とか、洋書とか、) Copyright © 2013 NTT DATA Corporation 2
  3. 3. 本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは ハチさん達とも仲良く おわりに Copyright © 2013 NTT DATA Corporation 3
  4. 4. 本日のお題 Hadoopのよくある光景 Copyright © 2013 NTT DATA Corporation 4
  5. 5. はじめに 2009年の資料より (出典: Hadoopカンファレンス2009) Copyright © 2013 NTT DATA Corporation 5
  6. 6. よくあるHadoopの利用シーン・その1 ? ! 初期 発展 データを格納 定期的に処理 レポート 各種ログ 業務データ 機器情報Copyright © 2013 NTT DATA Corporation 6
  7. 7. よくあるHadoopの利用シーン・その1 ? ! 初期 発展 普段採用しているような方法での開発... ・ Javaでどんどん実装 ・ MapクラスやReduceクラスが何とか ・ 独自でWritableを作るとか ・ セカンダリソートとしてKeyを何を設定するか ・ ○○流とかCopyright © 2013 NTT DATA Corporation 7
  8. 8. よくあるHadoopの利用シーン・その2 ? ! 初期 発展 定期的な処理 速やかに処理 利用者 (分析者など) 蓄積データ増加 クラスタ増設Copyright © 2013 NTT DATA Corporation 8
  9. 9. よくあるHadoopの利用シーン・その2 ? ! 初期 発展普段採用しているような方法での開発..もあるが 定期的な処理 これまでのスピード感では遅い... 速やかに処理 本セッション BI製品 等 Hive Pig Impala?Copyright © 2013 NTT DATA Corporation 9
  10. 10. 本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? Copyright © 2013 NTT DATA Corporation 10
  11. 11. ブタさんの紹介 Apache Pig http://pig.apache.org/ 高級言語(PigLatin) で処理を定義 データの流れで処理を 定義 米国Yahoo!メンバが 中心となり開発 Copyright © 2013 NTT DATA Corporation 11
  12. 12. Pigの使い方1 データの流れを定義&処理するときにスキーマ定義 -- LOAD : データ入力 logdata = LOAD ‘パス’ USING PigStorage(‘,’); master = LOAD ‘パス’ USING PigStorage(‘¥t’); -- FOREACH GENERATE : レコード単位での処理 logdata2 = FOREACH logdata GENERATE $0 AS id:chararray, $1 AS name, $2*100 AS percent; -- SPLIT : データ分類 (例: ログのデータ整合性チェック) SPLIT logdata2 INTO err IF datacheck(id) == 1, data OTHERWISE; -- JOIN : データ結合(内部結合) joindata = JOIN data BY id master $0 USING ‘replicated’; -- STORE : データ出力 STORE joindata INTO ‘結果パス’ USING PigStorage(‘,’); Copyright © 2013 NTT DATA Corporation 12
  13. 13. Pigの使い方2 データ型 int, long, float, double, chararray(文字列),bytearray 等 HadoopのWritableは意識しない データ型やジョブ定義な データ操作のための関数も充実 どは意識しなくてもよい 組み込み関数 • 評価関数, 数学関数, 文字列操作 標準機能も必要なもの ユーザ定義関数 は備わっている • Java, Python, Ruby, JavaScript • LOAD関数, STORE関数 外部プログラムの適用(STREAM) より柔軟な処理を 実現できる 自作MapReduceジョブの適用 Copyright © 2013 NTT DATA Corporation 13
  14. 14. Pigの使い方3-- サンプル処理-- ユーザ定義関数の登録と定義 (datacheck)REGISTER /tmp/pigudf.jar;DEFINE datacheck com.example.DataCheck(‘const’);-- データ読み込み 業務処理はUDFで実装logdata = LOAD ‘パス’ USING PigStorage(‘,’);master1 = LOAD ‘パス’ USING PigStorage(‘¥t’);master2 = LOAD ‘パス’ USING PigStorage(‘¥a’);-- ログのデータ整合性チェックSPLIT logdata INTO err IF datacheck($0) == 1, data OTHERWISE;-- 異常レコードを分類STORE err INTO ‘エラーパス’; データのソートや結合は-- 処理(データの結合) PigLatinを適用joindata = JOIN data BY $0, master1 $0, master2 $0;-- 結合結果の出力STORE joindata INTO ‘結果パス’ USING PigStorage(‘,’);Copyright © 2013 NTT DATA Corporation 14
  15. 15. Pigのポイント ? ! 初期 発展 定期的な処理 速やかに処理 利用者 (分析者など) データの処理に着目して実装する ため、MapやReduceを意識せずに 処理を定義できる 処理したいときにデータを意味づ けるため、データの構造に関する 永続的な仕組みは不要 ETL&ELTの考え方にフィットCopyright © 2013 NTT DATA Corporation 15
  16. 16. 本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは Copyright © 2013 NTT DATA Corporation 16
  17. 17. その1:処理はすべてを記述すること MapReduceジョブ実行タイミング マルチクエリを評価して全てのクエリを判断して実行 -- 処理結果Aの出力 STORE A INTO ‘a-dir’USING PigStorage(,); -- Aを利用した処理 (例 JOIN) B = JOIN A $0, master $1; -- 処理結果Bの出力 STORE B INTO ‘b-dir’ USING PigStorage(,); -- Aデータの分割 SPLIT A INTO C IF $0 == 1, D IF $0 == 2, E OTHERWISE; -- C, D, Eに対する処理 C2 = ・・・ 全てを評価後実行計画を作成 D2 = ・・・ → ジョブの並列実行 E2 = ・・・ (マルチクエリを標準で適用) -- C2, D2, E2の出力 (省略) Copyright © 2013 NTT DATA Corporation 17
  18. 18. その1:処理はすべてを記述すること 入力データA 出力データA 出力データB 入力データB 中間 データ 出力データC 出力データD 入力データC 中間 入力データD データ 全体を踏まえたジョブ制御Copyright © 2013 NTT DATA Corporation 18
  19. 19. その2:分散キャッシュを活用せよ Java実装と同様に分散キャッシュも利用可能 小さなマスタデータの利用 など Hadoopプロパティを指定して適用 mapred.cache.files, mapred.create.symlinksプロパティを 最初にSETで指定する UDF宣言(DEFINE)時に利用するファイルを指定 DEFINE時に、CACHE句を適用しても利用可能 getCacheFilesメソッドでファイルを取得可能 Copyright © 2013 NTT DATA Corporation 19
  20. 20. その2:分散キャッシュを活用せよ 分散キャッシュを適用したUDF(サンプル) public class DataMatcher extends EvalFunc<String> { private HashMap<String, String> m = new HashMap<String, String>(); private String symlink = new String(); public DataMatcher(String symlink) { this.symlink = symlink; } @Override public String exec(Tuple input) throws IOException { if (m.size() == 0) { // HashMapに配布されたマスタデータの情報を格納 : 省略 } if (input == null || input.size() == 0) { return null; } // 入力データとHashMapのデータの結合処理 : 省略 return 一致した文字列; } } Copyright © 2013 NTT DATA Corporation 20
  21. 21. その3:カウンターも活用せよ Java実装 : カウンターの活用が多い 異常レコード数の確認 特別な処理を適用した件数 PigではUDF内にカウンター情報を記述可能 UDFの作成・・・EvalFunc や FilterFunc など PigLoggerとPigProgressableを活用 warnメソッドを呼び出せばカウント可能 Copyright © 2013 NTT DATA Corporation 21
  22. 22. その3:カウンターも活用せよ カウンターを適用したUDF(サンプル) public class CounterUDF extends FilterFunc { // enumでカウンタを定義。定義したインスタンスは、カウンタ名と同じ。 enum MyCounter{VALID , INVALID}; private static final int NUM_COL = 3; @Override public Boolean exec(Tuple input) throws IOException { // 一部省略 boolean allValid = true; int cols = input.size(); //カラム数が少ない場合 if(cols < NUM_COL) { //warnメソッドでカウントアップする。 this.warn(“INVALID" + NUM_COL, MyCounter.INVALID); allValid = false; } return allValid; } } Copyright © 2013 NTT DATA Corporation 22
  23. 23. その4:使えるツールは活用せよ Pigはデバッグ用途としての構文もある DESCRIBE 指定したリレーションのスキーマを表示 指定したリレーションまで処理し結果を表示 DUMP ※ 表示件数は事前にLIMITで制限すること EXPLAIN 指定したリレーションまでの実行計画を表示 ILLUSTRATE 指定したリレーションまでステップ実行 PigUnit : PigLatinのテスト用ツール JUnitのPig版として開発 PigStats : Pigで実行した処理の統計情報を取得 Copyright © 2013 NTT DATA Corporation 23
  24. 24. チューニングについてはドキュメントに記載済み 性能に効果のある記述方法は公式ドキュメント参照 http://pig.apache.org/docs/r0.10.0/perf.html JOIN戦略 (Mapサイド?Reduceサイド?) メモリ管理 Combiner 小さなデータは結合して処理 処理データ量を軽減させる記法 中間データ・一時データ圧縮 Copyright © 2013 NTT DATA Corporation 24
  25. 25. Pigはますます成長しています Pig Macros よく利用する構文をまとめて扱える CUBE文 : キューブを作成するための構文 現在は非分散で実行、分散実行は開発中... Rank文 : 入力されたデータのランク付け Reduceタスク数=1, 分散についても検討中... UDFの追加 : 日時操作関係 など Copyright © 2013 NTT DATA Corporation 25
  26. 26. 本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは ハチさん達とも仲良く Copyright © 2013 NTT DATA Corporation 26
  27. 27. PigとHiveの違うところ “パターンで分かるHadoop MapReudce”とか、”徹底 入門”とか PigLatin 言語 HiveQL データフローで定義 構造 SQLライクに定義 データ操作は独特 習得 SQLを知っていれば 覚えるものは少ない コスト それなりに容易 不要 スキーマ DBで管理 (処理時に定義) 管理 (CREATE TABLE等) 必要なデータを 作成したデータを 狙い 作成する 活用するどちらが良いということではなく、両方を組み合わせて利用することが重要 (例: 分析用データ作成まではPig, 分析はHiveで処理) Copyright © 2013 NTT DATA Corporation 27
  28. 28. PigとHiveの違うところ-イメージPigLatin PigLatin HiveQLPigLatin PigLatin HiveQL 文:多 文:少 ジョブ:少 ジョブ:多 MapReduce MapReduce ジョブ ジョブ ※ 全ての処理に当てはまるわけではありませんCopyright © 2013 NTT DATA Corporation 28
  29. 29. PigとHiveを活用する仕組み-HCatalog HCatalog : スキーマを共有して利用する仕組み HCatalog用 HCatalog用 ロードストア関数 入出力フォーマット メタストア Serde 操作 メタストア共有 共通的な入出力フォーマット データ構造を共通・共有することで、Pig/Hive/MRに限らず データを操作することができるようになる...(現在開発中) http://incubator.apache.org/hcatalog/ Copyright © 2013 NTT DATA Corporation 29
  30. 30. 本日のお題 Hadoopのよくある光景 ブタさん(Pig)の存在とは? ブタさんを飼い馴らすということとは ハチさん達とも仲良く おわりに Copyright © 2013 NTT DATA Corporation 30
  31. 31. おわりに ? ! 初期 発展 Pig : データフローで処理を定義 分散キャッシュ・カウンターなど 利用者 Java実装で利用する機能も利用可能 (分析者など) デバッグ系構文やテスト・統計情報も活用 処理内容全体を見たチューニング・実行計画 そろそろPigも真面目に使ってみませんか?Copyright © 2013 NTT DATA Corporation 31
  32. 32. Thank you!Copyright © 2013 NTT DATA Corporation 32

×