#garagekidztweetz

id:garage-kid@76whizkidz のライフログ・ブログ!

#hcj13w A会場 午後 (3) "Hadoop上の多種多様な処理でPigの活きる道" のメモ

スポンサーリンク

このエントリーをはてなブックマークに追加 全体のまとめは ➤ こちら
hcj13w 午後3つ目のセッションは Pig のセッションに参加してきました。
わたしが参加したセッションの中では特にこのあとの Cloudera 嶋内さんの HBase のセッション、 Treasure Data の古橋さんの Fluentd のセッション、そしてこの山下さんの Pig のセッションが今回とても勉強になりました。

14:40 (7F 国際会議場) Hadoop上の多種多様な処理でPigの活きる道 山下 真一(NTTデータ)

よくあるHadoopでのアプリケーション開発では、まずはすべてをJavaで実装したいという要望が強く、全てをJavaによるコーディングで実現しています。 本セッションでは、特にPigでのデータ操作に関して意識したいこと、Hiveやバッチ処理でデータを共有する場合に考えること、さらにHadoop基盤として意識したいことについて発表します。

➤自己紹介
  • @ymstsn1
  • Hadoop 徹底入門第二版、今春?
  • Hadoop Hacks
➤ Hadoop のよくある光景
  • 2009年の資料より
  • よくある利用シーン
  • データ格納(各種ログ、業務データ、機器情報)、定期的に処理、レポート
  • 普段採用している方法での開発
  • Java でどんどん開発
  • MR
  • 独自で Writable をつくるとか
  • セカンダリソートとしてKeyに何を設定するか

  • 発展していくと
  • 蓄積データが増加、クラスタ増設
  • 定期的な処理をもっと
  • 速やかに処理
  • 開発にかかる期間をより短くしてほしいという要望
  • 分析者などの利用者が増える
  • スピード感がもっとほしくなってきた
  • BI 製品を適用する
  • Hive、Impala?
  • そして Pig
➤ Pig の存在とは?
  • Welcome to Apache Pig!
  • 高級言語(PigLatin)で定義
  • データの流れで処理を定義
  • 米Y!のメンバーが中心に開発(Horton など)

  • 実際の使い方
  • データの流れを定義
  • そして、処理する時にスキーマ定義

  • データ型やジョブ定義などは意識しなくて良い
  • データ操作のための関数も充実→独自関数を Java、Python、Ruby、JSで作成可能(標準的な機能は揃っている)
  • 外部プログラムの適用(STREAM)
  • 自作 MR の適用もできる(より柔軟な処理を実装できる)

  • 使い方、 PigLatin の例
  • 業務処理は UDF で実装している
  • データのソートや結合は PigLatin にまかせている

  • データの処理に着目してMRを意識せずに処理を定義できる
  • 処理したい時にデータを意味づけるため、データの構造に関する永続的な仕組みは不要(Hiveでいうメタストア)
➤ Pig をうまく飼いならすということとは?
  • 処理をすべて定義するということが必要
  • マルチクエリの評価が標準で提供されている。
  • 全体を踏まえたジョブを制御(ポイント)

  • 分散キャッシュを活用せよ
  • Hadoop プロパティを指定して適用
  • mapred.cache.files, mapred.create.symlinks を最初に SET で定義する
  • DEFINE時にCACHE句を適用しても利用可能
  • 分散キャッシュを適用したUDFのサンプルの紹介

  • カウンターも活用せよ
  • MR フレームワークのがわの話
  • Pig では UDF 内にカウンター情報を記述可能
  • warn メソッドでカウントアップする

  • 使えるツールは活用せよ✔
  • デバッグ用途としてつかえる構文
  • DESCRIBE, DUMP, EXPLAIN, ILLUSTRATE
    (いっとき利用できないバージョンがあったが最新版では再度使えるようになっている)

  • PigUnit:テストツール(JUnit の Pig 版として開発)
  • PigStats:Pigで実行した処理の統計情報を取得
    → API も用意されている

  • チューニングについては公式ドキュメントを参照のこと✔
    ↓一般的な戦略
  • JOIN 戦略
  • メモリ管理
  • Combinator(本来は Reduce サイドで処理すべきものを Map サイドで実施し、通信量を減らす)
  • 小さなデータは結合して処理(HDFS のブロックサイズを考慮)
  • 処理データ量を軽減させる記法
  • 中間データ・一時データ圧縮

  • ますます Pig は成長している
  • Pig Macros→よく使う処理を
  • CUBE 文
  • Rank 文→入力されたデータをランク付
  • UDF の追加
➤ Hive と仲良くする方法
  • Pig と Hive のちがうところ✔
  • 言語構造、習得コスト、スキーマ管理、狙いの視点で
  • どう使い分けるか?
  • 分析用のデータ作成までは Pig、分析は Hive で処理✔

  • HCatalog ✔
  • やっぱりでてきた
  • スキーマを共有して利用する仕組み
  • ただ、 HCatalog は開発中なので、Hive のテーブルは定義を変えてしまうと反映されなかったりする
➤ おわりに
  • Pig のメリットをまとめられている
  • 人材募集
➤ QA
  • Pig バージョン互換性
  • 実行して終わってはじめて気づくことがある
  • どう対処している?
  • あらかじめ小さなデータセットでテストしてみている

  • Pig の性能、Java でMRを書いた時とくらべたら?
  • Java で書いた方が速いが、もともと Java でかいたものを Pig に置き換えると、ときには Pig のほうが速いことはある
  • ポイントは短期間での開発ができるということ

  • クエリの管理
  • たくさん構文を書いてしまうためになにがなんだか分からなくなることはある
  • 段階ごとにクエリを定義することが多くなってきている(全部ひとつのクエリに書くのではなく)