Fluentd meetup in Japan #2に行ってきた
Fluentd meetup in Japan #2 に行った時のメモ
補足、訂正等があれば@ka_nipanまでご連絡ください。
あと、発表者さんのスライドのURLご存じでしたら教えていただけると嬉しいです。
http://www.zusaar.com/event/355006
■Fluentdの現在と未来
http://www.slideshare.net/treasure-data/fluentd-meetup-2
なぜロギングするか
エラー検知
user segmentで分析したい
ファンネル分析
ヒートマップ分析
マーケット予測
ロギングでなぜfluentか
いろんな解析、エラー検知等々をしたい
ログのソースもさまざま(DB,apache、アプリログ。。。。)
ログを出す人と回収して解析する人が違う
→解析がしにくい
fluentdならfluentにログを集めてさまざまなところに吐ける
必ずtime,tag,中身が入る
pluginで拡張可能
inputが必ずjsonなのですぐ解析できる
インストールが簡単rpm,debパッケージ
だれがfluentdを使ってるのか
slideshare,NHNJapan,NAVER,cookpad.....etc
filterプラグインをリリース予定
同じ設定ファイルを使っていても、サーバの種類に応じた処理が可能
詳しくはスライドの設定を見た方がわかりやすい
messagepack4開発中
シリアライズの速度がかなり上がるようだ
新しいプロセスのモデル
現状、プロセスを分けたとしても中央のエンジンを通る
再起動時にプロセスを残したまま新しいプロセスを起動
ログを落とさずに、td-agentを止めずに再起動できる
質疑応答
Q.時刻の精度はミリまでいけないか? A.互換性の問題がある。議論をして考えたい
Cool.ioが消えて、threadになる予定
弊社の@mazgiがfluentのドキュメントを日本語化するって宣言してました。
■Logging Infrastructure in PaaS by Fluentd
Cloud Foundry を使って Platform as a Service を作る方法を説明しつつ,fluentd をどのように活用したのか
Cloud Foundry
vm wareが作ってるPaaSのオープンソース
デプロイが簡単
ノードがダイナミックに変わるので、システム上ログがどっかに行ってしまう
デプロイされるたびにfluentdを軌道している
これである程度問題解決している
Cloud fundry fluent
アプリからfluentd agentを使ってlog strageにログをためる
ログの流量
cloud foundry自体まだまだ普及していないので全然
https:/github.com/rakutentech/
luaプラグインありませんか?の声に、「会場でリリースされました」
http://lab.motionbeat.com/blog/archives/112
■Fluentdを優しく見守る監視事例
http://www.slideshare.net/GedowFather/fluentd-meetup-2-fluentd
不幸だったエンジニア@mazgiさん....
次の発表者待ちの間の質疑応答
・テストフレームワークは次バージョンからはRspecにする予定
・agent-collector間でのメッセージ通信量で一番重要になるのは
リクエストとの回数
ロックが一番CPUを食う
flash-intervalを減らすとCPU使用率が下がるかも
・windowsサーバ対応
発生源がwindowsだけなら td-agent liteだけwindows対応するという方向で行くかも
・設定ファイルをDSL化しないのか
DSL化するとrubist以外がつらくなる
設定ファイルにコードを入れると負けだと思う
DSL化は先延ばしになりそう
設定ファイルの中にホスト名を入れたいときは、いくつか実現できるプラグインがある
■Fluentd & Treasure Data でこっそり始めるログ集計
http://d.hatena.ne.jp/mikeda/20120826/1345972294
fluentほとんど使ったことない人向け
fluentd→データストリームを統合管理する基盤だと思っている
アクセスログ
アプリのエラーログ
メールログ
傾向分析と詳細分析が簡単にできるように
アプリケーション系の会社だとログ系は優先度が低くなりがち
人員
自分一人だけ
工数
導入、展開は超簡単
費用
最初は1台 2億/dayのアクセスログ
→冗長化
実質1台でも捌けてる
in
out
パッケージの依存関係
ほぼなし
ある程度の規模なら
超簡単にできる
プラグイン
exec_fileter
目的
UIDカラムを作る
クエリストリング抜出
携帯端末ID等のカラムを統合 等
かゆいところに手が届く便利ツールとして使っている
管理画面
ジョブの一覧がみれる
tresuredata集計例
tresuredataは500Gまでは無料
SQLチックに簡単に集計クエリをかける
UIDごとにリクエストURLごとにレスポンスタイムを計測
自作プラグインは/etc/td-agent/plugin/に置くだけで動く
とりあえずmogoDBにつっこんでいる
質疑応答
in_tailは利用者が拡張できるように書いている
td-agentの次以降のバージョン
TCPで接続が成功したらハートビート成功と判定するかもしれない
次のバージョンでマルチプロセス化するらしい
現状1プロセスしか使えないので、並列化しようとすると別ポートで複数プロセスを起動する必要がある
Pythonでenvelope-fromを指定する
python envelope-fromでぐぐったら、ピンポイントで見つからなかったので残しておく。
>||
import email,smtplib
msg = email.message_from_string('\n'.join([
'To: hoge@fuga.jp',
'From: kanipan@river.jp', #メールに表示される差出人
'Subject: test email',
'',
'test'
]))
smtp.connect()
smtp.sendmail('envelope-from@fuga.jp', 'to_address@fuga.jp', msg.as_string())
||<
こうすると、メールが届かなかったときに「envelope-from@fuga.jp」にエラーメールが飛んでくる
Hadoop ソースコードリーディング第11回に行ってきたよ
Hadoopソースコードリーディング 第11回のメモを共有しよう #hadoopreading
http://d.hatena.ne.jp/garage-kid/20120730/hadoopreading11
メモ共有です。
上記エントリを参考に補ったり、補わせてもらったりしました。
■CDH4に入った新機能 NameNode HA の実力を試してみました (NTTデータ 山下 真一 氏)
CDH3の場合
・hearbeat + DRBD
・facebookが提供しているAvoterNode
課題
切り替わった瞬間にmapreduceが中断
切り替わった後に、もう一回実行しなおさなければならない
mapred.jobtracker.restart.recoverがあるがCDH3では動かない
namenode立ち上げ後、元のように使うには時間がかかる(ブロック数が多ければ多いほど)
そこで、namenode HA(CDH4から提供)
NFSでeditsファイルを共有
zkfc(ZooKeeper FailoverController)がフェンシング
name nodeが落ちた場合
active側が落ちる
active側のzkfcが検知
新しいのname nodeを選ばせる
落ちた方のname nodeの疎通確認
フェンシング
新しいname nodeをactiveに
新しいname nodeの情報通知
ホットスタンバイ形式で動いている
秒単位のオーダーで動く
active側のzkfcが壊れた場合
zkfcでロックが消失
スタンバイ側のnamenodeに切り替え
zkの状態を更新
mapreduce実行中に故障→問題なし
HDFS操作中に故障→問題なし
NFS故障では待機系のサーバ切り替えは不可能
どっちのname nodeもプロセス停止
namenode HAのポイント
2種類フェンシング方法がある
・sshfence
sshでログイン→コマンドでプロセス停止
fuser -v -k -n tcp <NN RPC port>実行(デフォルトポートは8020)
・shellfece
自分で作ったシェルでプロセス停止
両方のフェンシングを設定しておくこと(なんらかの理由でそもそもsshログインできなかった場合に備えて)
ソフトマウントすること
ハードマウントだとNIC異常時に応答がかえってこなくてそのまま終了になる場合がある
NFS自身の対策
HA化が必要
複数のNFSのマウント先に記述する実装が必要
→今のところ、仕様上できない
フェデレーション
namespace単位でHA実現は可能
設定
fs.default.name
アクセス先のnamespaceを入れる
dfs.namesarvive
Full GC発生時の考慮
タイムアウトの設定は意識すること
namenode HAは現用、待機系ともにメタ、ブロック情報はヒープメモリで持ってるので、注意
Full GCやってるときはサービス停止してるがそれ以外は停止しない
namenodeのメタ領域
1.0から少し変わっている
fsimage
保存世代数を設定できる
dfs.namenode.chekcpoint.retained
チェックポイント間隔
dfs.namenode.checkpoint.period
edits
保存世代数 100万世代(デフォルト)
dfs.namenode.num.extra.edits.retained
チェックポイント間隔が短くなった
namenode HAのメリット
mapreduceが継続できる
ダウンタイムが数秒
namenode HAデメリット
モニターする仕組みが足りてない
webインターフェースで見れるものがない
NFSサーバがシングルポイント
設定するプロパティが増える
構成や設定は十分検証が必要
HAという意味ではBookKeeperを持つべき
ほかの手段と組み合わせるという手も
Fault Tolerance
■複数DCで運用するhadoop/hiveデータ解析(GMOインターネット 新里 祐教 @hirotakaster 氏)
http://www.slideshare.net/hirotaka/data-analytics-with-hadoop-hive-on-multiple-data-centers
複数拠点それぞれにnamenodeを置いている
自前の集計用スケジューラ
クライアントはそれらをマネージするシステムから実行単位等(hourly,daily...)を操作する
dailyで20TBオーバーのトラフィック
Hive + MySQL でデータ解析
テーブルのカラムを変更する際には、tmpテーブルを作って対応
データフロー
いったん来たログを突っ込むログサーバー1200台
データをつっこむのはhiveのload dataを使ってパーティション指定(date,log_number)でつっこむ
定期的にhadoop arciveを使ってnamenodeがメモリオーバーしないようにしている
マネジメントシステム
zabbixで監視
manage用のネットワークを立てている
namenodeのメモリ等を監視
トラブルシューティング
単純に全スロットにメモリさしてもよろしくない
パフォーマンスがすごい低下する
分析の再実行
バックアップ、リカバリー
NFS使ってた
ver2だとサイズ2G以上のサイズは受け渡しできない
今はNFS+metadataのbackupをtazで保存
Hiveに完全依存してはいない
mapredeceを自分で書いたりもしてる
150並列ほど
CPU 5,600
DCをまたいだ処理はしてない
ネットワーク帯域よりもレイテンシがネックとなりすごい遅い
解析済みデータはアーカイブ行き
HDFS上で管理する意味はない
Hadoop ソースコードリーディング第9回に行ってきたよ
ものすごい遅ればせながら。(自分用のメモですが)
Hadoop ソースコードリーディング9回
■NHN JapanにおけるHive実行環境の構築
http://www.slideshare.net/tagomoris/hive-tools-in-nhn-japan-hadoopreading
・Hiveの使用目的:アクセスログの集計
解析はやってない
ライブドアが提供しているサービスのUUやPVを見てる
特定のパスに対してどれだけアクセスがあったか
どの検索エンジンできたか
・集計処理概要
fluentd→(ログ)→Hadoopクラスタ←(HTTPでHiveQLを投げる)←Shib(Hive webクライアント)←(GUIクエリ生成)←ShibUI(Query Management System)
ログはfluentdを使ってHadoopクラスタへ
hadoopクラスタ内にHIVEサーバを立てる
THrift経由でshib(node JSで構成)、KVSはKTを使っている
ユーザはブラウザからアクセスして、ShibUIでクエリを生成、HTTP経由でHiveQLを投げる
・テーブルのパーティション
サービス、日付ごとに分けている
indexは使っていない、力技でなめてる
・map reduce を手で書くのは厳しい
・なんでHIVEなのか
SQLっぽい見た目だと安心して使われる傾向にある。。。
・プログラムっぽい形式だと、もったいないからメンテしながら使おうという心理がはたらきやすい
簡単なクエリをガンガン書いてガンガン捨てよう
・なぜクライアントを作ったのか
HUEを使いたくない
→なんでもできるから、なんでもさせたくない
クエリを書いてほしいけど、alterとかdropされると困る。。。。
・多ツールとの連携ができないとつらい
HTTPのAPIがほしい
何か機能がほしくなったときに自分の手で何とかできるものが望ましい
・Shib
HIVEのクライアントとして動くWEBアプリ
selectのみ発行
発行されたクエリを保存
クエリをbodyにつっこんでHTTPリクエストを送ると実行される
hadoopに入って実行しなくて済む
shibはgithubに公開している
・ShibUI
社内用ツール
スケジュールのクエリを流して、結果をグラフにプロット
どのクエリの結果をだれが参照したかを記録できるようになってる
・HRforcast
社内用ツール
グラフ作成ツール
HTTPリクエストを投げるとグラフ作成
・クエリビルダー
開発以外の人がクエリ核のつらい
ドロップダウン式の条件でクエリ自動生成
簡単な集計はツールで、複雑なのは別途相談する運用
・裏で走ってるmap reduceをころしたい
Huahin Manager
HTTP経由でjobtrackerにアクセスできるようにするつもり
・node 0.4だと動くが0.6だと動かない>shib
商品マスターとかjoinするようなものは外部で突き合わせるようにしている
■Hiveソースコードリーディング
http://www.slideshare.net/wyukawa/hive-sourcecodereading
・なんでソース読もうとしたのか
好奇心
最適化プロセスはどうやって採用されるのか
・HIVEのパフォーマンスチューニングってあんまりない。。。
あるとすればパーティションを切るくらいか
・どこを読んだか
オプティマイザ周り
Hive Anatomy
(http://www.slideshare.net/nzhang/hive-anatomy)
Internal Hive
(http://www.slideshare.net/recruitcojp/internal-hive)
この2つのスライドが参考になる
・中身が複雑。。。。
メソッドの長さが異常。。。。ディスプレイ画面に収まらない
オプティマイザのソースを読んでると気が狂うというチケットが。。
The Optimizer architecture of Hive is terrible.....
→patch welcome!!
explainをみてもチューニングどこをしていいかわからない
・optimizarのアルゴリズム
コストが最小のプランを選択する
コストとは、HiveQLを正規表現でマッチした文字列が一番短いものを選択
・パフォーマンスチューニング
Hiveのプロパティ
-hive.map.aggr
default true
map側で集約する inmapperconbining mapperでメモリにためて、いいタイミングでflushしてくれる
-hive.auto.covert.join
default false
joinに関するオプション
片方のテーブルサイズが小さい場合にうまい具合にjoinするよ
閾値 25M-30M
これより小さいとこのオプションが動く
これをやるとそこそこ高速化
-hive.exec.parallel
default false
自動で並列実行してくれる
1つのテーブルを参照して、3つのinsertをするときなどにパフォーマンス向上
パフォーマンスチューニングの選択肢はparallelとconvert.joinくらいしかない
データモデルやETLモデル、どうやって簡単にクエリを作るかを考えたほうがいい
■誰も得しないアンドキュメンテッドな機能の紹介
http://www.slideshare.net/tamrin69/hive-undocumented-feature
・HiveCLIコマンド
./hive --service cli
dfs :Hadoop DFSコマンドが使える
list :ADDしたjarの一覧が見れる
source :シェルのsourceと同じ
! :シェルの実行
show locks,msck:たたくな危険
・Hook機能
投げたクエリ
ユーザ
等々がとれる
基本的に単体テストに使うくらい
実際にフックしたことはない
・PeffLog
perfLogをオーバーライドすれば独自logger実装可能
・PDK
hive0.8~
UDFの追加を楽にする
PDKビルドの仕方
アノテーションの指定
@uDFTYPE
deteministic stateful
distinctLike
@Description
name
description
extended
自動でUDF登録できない!!
hive.aux.jars.pathに入っていればおk
HIVECLI起動時にHIVE_AUX_JARS_PATHを指定
HIVECLI起動時に自動でスクリプトを実行する方法ならある
・自分でHiveサーバーを作ってみた
JAVA200行程度
HTTP RESTサーバ
自動UDF登録
公開はしないとのこと....
・0.8で入った新機能はバグだらけなので使ってはいけない....
ドキュメント化されていないものにはそれなりの理由がある
HIVEサーバー
認証機能が認証しない等々