Upload
taku-miyakawa
View
879
Download
8
Embed Size (px)
DESCRIPTION
LTSV is a nice format for log files. I wrote an Pig plugin to load LTSV files.
Citation preview
LTSV を Pig で処理する話
2013-03-04
LT at 第2回初心者向け分散処理勉強会
@miyakawa_taku
要旨
• Apache Pig で LTSV ファイルを読み込むプラグインを作りました
• Hadoop 上で LTSV ファイルが簡単に扱えるようになるから素敵です
1
Pig
2
Pig
• データフローを記述して Hadoop の
MapReduce ジョブをぶっ放すツールです
• Pig でデータを前処理して Hive のテーブルに突っ込んだりします
• 分散 awk みたいな感覚です
3
Pig の例: 部署ごと平均給与の計算
4
-- ロード
emp = LOAD 'emp.txt' AS (name, dept, salary);
-- 計算
emp_by_dept = GROUP emp BY dept;
avgsalary_by_dept = FOREACH emp_by_dept
GENERATE group AS dept, AVG(emp.salary)
-- 保存
STORE avgsalary_by_dept INTO 'avgsalary_by_dept';
山田 生産 190
田中 営業 320
中橋 生産 240
営業 235
人事 252
生産 220 Pig
LTSV
5
LTSV: Labeled Tab-separated Values
• 2月8日に突如流行 → 数日で収束しました
• ログ用のファイルフォーマットです
• タブ区切りの各列を「<ラベル>:<値>」にします
6
host:host1.example.org req:GET /index.html ua:Opera/9.80
host:host1.example.org req:GET /favicon.ico ua:Opera/9.80
host:pc.example.com req:GET /news.html ua:Mozilla/5.0
いいところ
• 書式が一目瞭然
• awk でパースできる: FS="¥t", split($i,p,":")
• Apache や nginx で出力設定が簡単
• 仕様変更で値を追加しても大丈夫
注意点 • タブや改行を含む値は出力できない
LTSV / Pig
7
Pig で LTSV が読めるようにする
• 出したログに Hive でクエリを投げたい
⇒ Pig で前処理したい
⇒ Pig で LTSV を読むプラグインを作りました
8
Pig で LTSV を読むプラグイン
9
-- ロード
access = LOAD 'access.log'
USING org.ltsv.pig.LTSVLoader('host, ua');
-- ホスト, UA ごとのアクセス数を計算
access_by_host_ua = GROUP access BY (host, ua);
count_by_host_ua = FOREACH access_by_host_ua
GENERATE group.host, group.ua, COUNT(access);
-- 出力
DUMP count_by_host_ua;
必要な値の
ラベルを指定
〆め
10
結論
• Pig を使うと Hadoop での並列データ処理が簡単に書けます
• LTSV は人間にも機械にもやさしいログフォーマットです
• Pig で LTSV が読めるのでログを LTSV でバカスカ出して Hadoop に突っ込んでおけば幸せになれます
11
参考
• pig-ltsv-storage: プラグインのリポジトリ
– https://bitbucket.org/miyakawa_taku/pig-ltsv-
storage
• PIG-3215: PiggyBank (Pig のプラグイン集) に
LTSVLoader を追加する issue
– https://issues.apache.org/jira/browse/PIG-3215
• このスライド
– http://www.slideshare.net/miyakawataku/processi
ng-ltsv-by-pig
12