夏サミ2013 hadoopを使わない独自の分散処理環境の構築とその運用

48
Summit Developers Developers Summit 2013 Summer Hadoopを使わない独自の分散 処理環境の構築とその運用 前橋孝広 株式会社インターネットイニシアティブ プラットフォームサービス部 プラットフォーム開発課 A3 #natsumiA3

Upload: developers-summit

Post on 12-Nov-2014

5.304 views

Category:

Technology


6 download

DESCRIPTION

Developers Summit 2013 Summer (2013年8月1日渋谷にて開催)のA3セッション「Hadoopを使わない独自の分散処理環境の構築とその運用」の登壇資料です。 【セッション概要】 Intel x86サーバの性能向上に伴い、ネットワークの広帯域化が進みつつあるなか、 いよいよ普及期に入ろうとしている10Gigabit EthernetのWebサービスにおける 利用法とその性能と具体的な利用例について紹介します。 さらに近い未来を予見させる40Gigabit Ethernetの今とこれからについても 運用性・性能・注意点などを見ていきます。

TRANSCRIPT

Page 1: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

Hadoopを使わない独自の分散処理環境の構築とその運用

前橋孝広 株式会社インターネットイニシアティブ

プラットフォームサービス部

プラットフォーム開発課

A3 #natsumiA3

Page 2: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

自己紹介

名前:  前橋孝広  所属:  株式会社インターネットイニシアティブ(IIJ)  

Page 3: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

本日の話

分散システム開発の動機

開発したものの機能と仕組みについて

システムの構築と運用

Page 4: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

分散システム開発の動機

ISPにおいて、サービスの状態把握は必須  そのために大量のログデータを扱う必要がある  

http://www.flickr.com/photos/ctbto/8443792513/

Page 5: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ISPにおける大規模データ

•  ほぼすべて時系列データ  •  分析したい項目や抽出条件は多岐にわたる

例:  トラフィックデータ

フィルタリングログ

時系列Webアクセス数

Webアクセス数割合

Page 6: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

例:  トラフィック情報(NetFlow)のデータ I I Jのバックボーンを流れる ト ラ フ ィ ッ クの情報は膨大な量となる

!me router bytes pkts proto src  AS dst  AS src  port dst  port src  ip dst  ip …

1388253400 172.16.100.1 1433 1 6 2497 9999 80 4321 192.168.0.1 192.168.9.8

1388253400 172.16.0.10 987 1 6 1234 1000 25 2224 10.168.20.1 10.168.20.1

1388253400 172.16.100.2 555 1 6 9999 2497 2345 80 192.168.0.7 10.18.80.1

1388253400 10.16.10.1 12 1 1 1111 2222 22 22345 10.168.1.1 10.168.30.1

1388253400 172.16.0.1 1490 2 17 2222 1234 22345 24 172.16.9.7 10.68.20.1

1388253401 172.16.1.10 1309 1 6 3333 5555 8080 8765 192.168.0.1 172.16.9.79

1388253401 192.168.10.1 538 1 6 1111 2497 5787 80 10.218.0.1 192.168.9.1

1388253401 172.16.99.8 333 1 1 9999 1000 70 15588 10.68.0.1 172.16.9.72

1388253401 10.16.98.7 981 1 17 4444 2222 80 11557 192.168.0.1 172.16.90.3

1388253401 172.16.10.1 1433 1 6 1234 4321 7078 12345 172.16.0.1 172.16.4.71

約30項目

数億  /day

Page 7: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

巨大なログデータの処理といえば

Page 8: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

MapReduce  とは?

mapとreduceの2段階にわけてデータ処理  ①  map  –  抽出・変換  ②  reduce  –  集約・集計

Page 9: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

Hadoop相当のものを自作

IIJ社内専用  非公開

オープンソース

Page 10: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

Hadoopを使わず自作した理由

•  Hadoopはバッチ処理に特化している  

•  自社開発でノウハウをためるため  

•  用途を特化して作ればより効率のよいものが作れる  

•  やってみたかったから  

Page 11: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

分散処理の原理は難しくない

分散処理 従来型処理

データはあらかじめ  各ノードに分散配置

各ノードで並列実行

Page 12: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

Hadoopはバッチシステム

Page 13: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

Hadoopが向いている処理

•  24秒の遅延が気にならないような巨大なバッチ処理  

•  やることが決まっている定型処理

Page 14: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

やりたいこと

•  サービス運用者は、試行錯誤により、より深いデータ分析を行う    

•  分析に必要なパラメータは多様であり、事前に網羅することは困難 → 定型でない  

データを生のまま保存し、  オンデマンドで抽出・  集計を行う必要がある  

Page 15: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

開発したものの機能と仕組み

Page 16: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

開発したもの(1)  ddd

大量の時系列データ(例:  NetFlow生データ)を蓄積し  要求に応じて短時間で検索・集約結果を返す  

Page 17: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ユーザインタフェース

クエリパラメータ入力

グラフ化  

アドホッククエリ(定型的でない、一回限りの問い合わせ)が大半

Page 18: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

dddの特徴

•  時系列データに最適化した分散ファイルシステム→  対象データの格納位置を瞬時に特定  

•  自動レプリケーションによるデータ冗長化  

•  楽観的タスクスケジューリング  – 応答待ち時間の短いMapReduce  

詳しくは… 電子情報通信学会論文 Vol.J93-D,No.7,pp.1072-1081,Jul. 2010., 「大規模データ処理のための分散システムの実装とその応用」

Page 19: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

MapReduceによるグラフ生成

map:  複数ノードで並列に抽出・集計処理

reduce:  結合

要求があってから生データに対して分散処理を開始してグラフ化

Page 20: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

応答速度

•  極めて小さいデータを、何もせずに素通しするのにかかる時間

Hadoop ddd

19秒 0.12秒

Page 21: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

2000タスクの処理時間グラフ

•  台数が増えると処理時間が減少

Page 22: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

2000タスクの処理時間グラフ(対数)

•  台数が増えると、多少オーバーヘッドは出てくる

Page 23: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

開発したもの(2)  pmux

•  pipeline  mulPplexer  に由来  •  オープンソースとして公開  

•  GitHub  – hSps://github.com/iij/pmux  – hSps://github.com/iij/pmux/wiki  

•  Gluster  Forge  – hSps://forge.gluster.org/pmux  

Page 24: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

pmuxとは?

•  標準入出力を介して MapReduce するためのコマンドラインツール(Hadoop Streaming相当)

$ pmux --mapper="grep PATTERN" *.log

例:  分散grep

分散ファイルシステム  上にあるファイル群

Page 25: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

GlusterFSとは?

FUSEでマウントして  普通のファイルシステム  として見える

Page 26: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ファイル名に応じて分散

clientからは、ひとつの  ファイルシステムとして見える

Page 27: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ちょっと宣伝

•  IT検証ラボ  -­‐-­‐  分散ファイルシステムのGlusterFS:こんなとき、どうなる – hSp://itpro.nikkeibp.co.jp/arPcle/COLUMN/20130104/447701/

Page 28: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

pmuxの分散処理の原理

•  例えば次のようなコマンド  

•  *.log が複数ノードに分散して配置されていれば、各ノードで並列に処理できる  

$ grep PATTERN *.log

Page 29: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ファイルがあるノードで処理を実行

Page 30: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

結果を集める

Page 31: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

実際はもう少し複雑

Page 32: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

使用例:  ステータスコード集計

Apache  ログから特定パターンの行だけ抜き出し、  そのステータスコードを集計

$ pmux --mapper='grep PAT |cut -d" " -f 9’ \ --reducer='sort|uniq -c’ /mnt/glusterfs/*.log 176331 200 106360 206 809 400 21852 403 533 404 27 406 805 416 25 500

Page 33: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

使用例:  word  count

$ pmux --mapper=map.rb --reducer=reduce.rb \ --file=map.rb –-file=reduce.rb \ /mnt/glusterfs/*.txt

#! /usr/bin/ruby -an $F.each {|f| print "#{f}\t1\n"}

#! /usr/bin/ruby -an BEGIN {$c = Hash.new 0} $c[$F[0]] += $F[1].to_i END {$c.each {|k, v| print "#{k} #{v}\n"}}

map.rb

reduce.rb

コマンドライン

Page 34: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

デバッグとテスト

•  多数のノードを前提とした分散システムのデバッグは超大変  

•  ネットワークをモック化  – 複数ノード環境をシミュレーション  

•  テストへの組み込み  – 継続的インテグレーション(CI)ツールによって自動実行

Page 35: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

実環境でしかわからないこと

•  実環境でしか再現できないトラブルもある  •  ノード間通信の集中に起因  

– コネクション数限界  •  net.core.somaxconn  

– パケットの消失  • スイッチのバッファの限界を超える?  

   ノード間の通信をキューを使って制御  

Page 36: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

自作した甲斐はあったのか

•  答えは、もちろん「YES」  •  サービスや社内システムのバックエンドで活用中 (定型、非定型処理両方)  

•  分散処理のボトルネックやトラブルシュートに関するノウハウの蓄積ができた  

•  ビッグデータに関する新サービスへの応用予定  

Page 37: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

運用

Page 38: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

分散処理プラットフォーム dplat

•  IIJ社内に対し、分散システムの基盤を提供  •  社内向けPaaSのようなもの  

– ddd,  GlusterFS,  pmux  などが使用可能  

•  サービスごとにクラスタを分けて運用    

Page 39: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

サービスのバックエンドとして利用

データ

アウトプット

データ

アウトプット

dplat

トラフィック解析システム バックエンド

セキュリティレポートサービス

Page 40: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ノードの設置場所

東京

大阪

松江 広域分散により データの喪失を防ぐ

Page 41: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

松江データセンターパーク

IT  module air-­‐condiPoning  unit

Page 42: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

ITモジュールの中身

•  IZmo  S(スリム): ラックを傾斜配置 – 他に IZmo  W(ワイド)もあり

Page 43: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

運用の基本思想

•  楽をする  – いろいろ自動化  

•  機材は壊れることを前提  – 適切な冗長化で壊れても良いようにする  

• 障害が起きても基本は放置  →  あとで修理  

•  監視とモニタリングは、しっかりやる  

Page 44: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

サーバについて(1)

•  サーバはネットワークブート  – OSなどのシステムはメモリファイルシステム  

– 再起動すると設定はすべて消える  – →  設定情報の外部化/バージョン管理  

•  起動後に  Chef  で必要な物がインストール  

•  サーバ仮想化技術は使っていない  

Page 45: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

サーバについて(2)

•  HDDは搭載しているが、データ格納用途のみ  – RAIDによる冗長化はしていない  

•  dddやGlusterFSのレベルで冗長化  – 故障時はノードごと切り離されるがデータは消失しない  

•  故障はそれなりに起こる  – ハードディスク、NIC、メモリ、電源、etc  

Page 46: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

監視

•  死活監視、ポート監視  •  ディスク残量監視  

•  分散ファイルシステムの読み書き監視  

•  MapReduceジョブの実行時間監視  

Page 47: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

モニタリング

•  ファシリティレベル  – 温度、消費電力  etc  

•  各種リソース  – ディスク、メモリ使用量  etc  

•  アプリケーションレベル  – 各APIコール数  

– タスク実行状況詳細  etc

Page 48: 夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用

Summit Developers

Developers Summit 2013 Summer

まとめ

•  ISPは、サービス状態の把握のため巨大なログデータを扱う必要がある  

•  分散処理システムを独自に開発  – 定型でない処理に対応  

•  運用  – 今どきの普通のやり方  

– モニタリング重視