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

Post on 12-Nov-2014

5.304 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Summit Developers

Developers Summit 2013 Summer

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

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

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

プラットフォーム開発課

A3 #natsumiA3

Summit Developers

Developers Summit 2013 Summer

自己紹介

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

Summit Developers

Developers Summit 2013 Summer

本日の話

分散システム開発の動機

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

システムの構築と運用

Summit Developers

Developers Summit 2013 Summer

分散システム開発の動機

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

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

Summit Developers

Developers Summit 2013 Summer

ISPにおける大規模データ

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

例:  トラフィックデータ

フィルタリングログ

時系列Webアクセス数

Webアクセス数割合

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

Summit Developers

Developers Summit 2013 Summer

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

Summit Developers

Developers Summit 2013 Summer

MapReduce  とは?

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

Summit Developers

Developers Summit 2013 Summer

Hadoop相当のものを自作

IIJ社内専用  非公開

オープンソース

Summit Developers

Developers Summit 2013 Summer

Hadoopを使わず自作した理由

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

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

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

•  やってみたかったから  

Summit Developers

Developers Summit 2013 Summer

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

分散処理 従来型処理

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

各ノードで並列実行

Summit Developers

Developers Summit 2013 Summer

Hadoopはバッチシステム

Summit Developers

Developers Summit 2013 Summer

Hadoopが向いている処理

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

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

Summit Developers

Developers Summit 2013 Summer

やりたいこと

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

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

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

Summit Developers

Developers Summit 2013 Summer

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

Summit Developers

Developers Summit 2013 Summer

開発したもの(1)  ddd

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

Summit Developers

Developers Summit 2013 Summer

ユーザインタフェース

クエリパラメータ入力

グラフ化  

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

Summit Developers

Developers Summit 2013 Summer

dddの特徴

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

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

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

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

Summit Developers

Developers Summit 2013 Summer

MapReduceによるグラフ生成

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

reduce:  結合

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

Summit Developers

Developers Summit 2013 Summer

応答速度

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

Hadoop ddd

19秒 0.12秒

Summit Developers

Developers Summit 2013 Summer

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

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

Summit Developers

Developers Summit 2013 Summer

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

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

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  

Summit Developers

Developers Summit 2013 Summer

pmuxとは?

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

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

例:  分散grep

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

Summit Developers

Developers Summit 2013 Summer

GlusterFSとは?

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

Summit Developers

Developers Summit 2013 Summer

ファイル名に応じて分散

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

Summit Developers

Developers Summit 2013 Summer

ちょっと宣伝

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

Summit Developers

Developers Summit 2013 Summer

pmuxの分散処理の原理

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

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

$ grep PATTERN *.log

Summit Developers

Developers Summit 2013 Summer

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

Summit Developers

Developers Summit 2013 Summer

結果を集める

Summit Developers

Developers Summit 2013 Summer

実際はもう少し複雑

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

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

コマンドライン

Summit Developers

Developers Summit 2013 Summer

デバッグとテスト

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

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

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

Summit Developers

Developers Summit 2013 Summer

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

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

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

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

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

Summit Developers

Developers Summit 2013 Summer

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

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

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

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

Summit Developers

Developers Summit 2013 Summer

運用

Summit Developers

Developers Summit 2013 Summer

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

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

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

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

Summit Developers

Developers Summit 2013 Summer

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

データ

アウトプット

データ

アウトプット

dplat

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

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

Summit Developers

Developers Summit 2013 Summer

ノードの設置場所

東京

大阪

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

Summit Developers

Developers Summit 2013 Summer

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

IT  module air-­‐condiPoning  unit

Summit Developers

Developers Summit 2013 Summer

ITモジュールの中身

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

Summit Developers

Developers Summit 2013 Summer

運用の基本思想

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

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

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

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

Summit Developers

Developers Summit 2013 Summer

サーバについて(1)

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

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

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

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

Summit Developers

Developers Summit 2013 Summer

サーバについて(2)

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

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

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

Summit Developers

Developers Summit 2013 Summer

監視

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

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

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

Summit Developers

Developers Summit 2013 Summer

モニタリング

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

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

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

– タスク実行状況詳細  etc

Summit Developers

Developers Summit 2013 Summer

まとめ

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

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

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

– モニタリング重視  

top related