wdd2012_sc-004

29

Upload: kuninobu-sasaki

Post on 28-May-2015

374 views

Category:

Documents


0 download

DESCRIPTION

Windows Developer Daysで使ったHadoop on Windows (Server|Azure)紹介資料です。「設計・実装・活用法」というタイトルとは裏腹にただの概要紹介になってしまったので、もう少しましなものを作りたいと思っています・・・

TRANSCRIPT

Page 1: WDD2012_SC-004
Page 2: WDD2012_SC-004

SC-004

Page 3: WDD2012_SC-004
Page 4: WDD2012_SC-004
Page 5: WDD2012_SC-004
Page 6: WDD2012_SC-004

膨大なデータを 短時間で処理

多数のサーバーで 分散処理 高スケーラビリティ

Google の論文が 契機となって誕生!

Yahoo や Facebook で使われている

Page 7: WDD2012_SC-004

Hadoop (今日の主役)

Page 8: WDD2012_SC-004

ジョブスケジューラー

分散ファイルシステム

プログラミングモデル

管理機能

MapReduce

標準装備

HDFS

コマンドラインと シンプルな Web 画面

MPI / SOA / その他 任意のプログラムを

利用可能

標準装備

Windows のファイル共有や、サードパーティ製の

クラスターファイルシステム

グラフィカルな ヒートマップなど

管理・監視機能が充実 CLI / GUI / Web UI

Page 9: WDD2012_SC-004

プログラミングモデルが 規定されている

分散ファイルシステムを 自前で備えている

Page 10: WDD2012_SC-004

my %rpm; # 結果を格納するハッシュテーブル

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; } my @sorted_keys = sort keys %rpm; foreach my $k (@sorted_keys) { print "$k $rpm{$k}\n"; }

2012-04-24 01:02:03 W3SVC1 192.168.0.1 GET /…

Page 11: WDD2012_SC-004

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; }

2012-04-24 01:02:03 W3SVC1 192.168.0.1 GET/…

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; }

my @sorted_keys = sort keys %rpm;

foreach my $k (@sorted_keys) { print "$k $rpm{$k}\n"; }

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; }

2012-04-24 01:03:05 W3SVC1 192.168.0.1 GET/… 2012-04-24 01:04:06 W3SVC1 192.168.0.1 GET/…

入力データを分割して複数のプログラムに配る

foreach my $k (@sorted_keys) { print "$k $rpm{$k}\n"; }

それぞれのプログラムは与えられたデータを淡々と処理

他の仲間が何をやっているか 気にする必要はない

結果の断片をソートする

キーでソート済みであることが保証されているので、淡々と結果出力をすればよい

Map

Reduce

Page 12: WDD2012_SC-004

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; }

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; }

while(<>) { next unless /^\d{4}/; my $time = substr($_,0,16); $rpm{$time}++; }

Page 13: WDD2012_SC-004
Page 14: WDD2012_SC-004
Page 15: WDD2012_SC-004
Page 16: WDD2012_SC-004

Windows 環境向けの 新機能追加

Bash スクリプトの cmd 移植

Java プログラム内の UNIX 依存部分を調整

UNIX 環境に依存している部分を Windows 対応

JavaScript コンソール

Windows Azure ストレージへの対応

Hive ODBC ドライバ

Page 17: WDD2012_SC-004

bin/ hadoop- config.cmd hadoop.cmd hdfs.cmd mapred.cmd start-master.cmd start-slave.cmd stop-master.cmd stop-slave.cmd conf/ hadoop-env.cmd

Windows 用に移植されたスクリプト群 bash の呼び出し部分に

Windows 判定ロジックを追加

Page 18: WDD2012_SC-004

Pegasus ZooKeeper

主要な関連プロジェクト

Page 19: WDD2012_SC-004

HDFS に対して SQL 的な言語 (Hive QL) でクエリを発行できる。 MapReduce の複雑さを隠蔽し RDB ユーザーが直感的に

Hadoop を活用できるようになる。

こちらも HDFS に対する上位レイヤで、大規模なデータセットの探索を容易にする仕組み

“Pig Latin” というスクリプト言語で処理を記述すると、 Pig がそれを MapReduce ジョブに変換して実行してくれる。

Page 20: WDD2012_SC-004

Windows Server に Hadoop をインストールして クラスターを構築する方式

Windows Azure の 既存サブスクリプションに

Hadoop クラスターを デプロイする方式

Windows Server 版 (オンプレミス)

Windows Azure 版 その 1 - 「自前クラスター」

クラスターの詳細を意識せず MapReduce プログラムだけを

デプロイして利用する方式

Windows Azure 版 その 2 – “Elastic MapReduce”

Page 21: WDD2012_SC-004

通常の Windows Azure 管理ポータルとは別の専用サイト

Page 22: WDD2012_SC-004

“#コマンド” で、FS Shell の コマンドを呼び出せます。 “#lsr” は ”hadoop fs –lsr” に相当します。

“#fs.get” で HDFS 上のファイルを ローカルコンピューターへダウンロードできます

Page 23: WDD2012_SC-004

クエリの結果と、実行された Map-Reduce ジョブに関する情報が、ここに表示されます。

ここにHQLを入力します。

Hive に対する操作を Web ブラウザから行えます

Page 24: WDD2012_SC-004

options.orientation = 45; graph.bar(wordCounts, options);

graph.pie(wordCounts, options);

Page 25: WDD2012_SC-004

ネイティブ DLL (UNIX系の libhdfs に相当)

マネージド DLL (.NET 系の各種言語で利用可能)

Action<string> processDirectory = null; processDirectory = (looppath) => { using (HdfsFileInfoEntries entries = hdfsSystem.ListDirectory(looppath)) { foreach (HdfsFileInfoEntry entry in entries.Entries) { string kind = entry.Kind == HdfsFileInfoEntryKind.Directory ? “Directory” : “\tFile”; Console.WriteLine(string.Format(@”{0}:”"{1}”", Modified/Accessed:”"{2:G}, {3:G}”", Owner:”"{4}”"” , kind, entry.Name, entry.LastModified, entry.LastAccessed, entry.Owner)); if (entry.Kind == HdfsFileInfoEntryKind.Directory) { processDirectory(entry.Name); } } } };

C# でディレクトリの一覧を取得するコード例

Windows 環境のアプリケーションに対して Hadoop の分散ファイルシステムへのアクセスを提供

Page 26: WDD2012_SC-004

セカンダリネームノードで作成されるチェックポイントファイルを Windows Azure Storage へ転送して障害に備える機能です

プライマリ ネームノード

fsimage

セカンダリ ネームノード

edits

fsimage

fsimage.ckpt

Windows Azure BLOB

edits

マージ fsimage.ckpt fsimage.ckpt

転送 転送

Page 27: WDD2012_SC-004

Excel 用 Hive プラグイン

ポート設定

インストール

Page 28: WDD2012_SC-004

単に移植しただけではなく、JavaScript での MapReduce ジョブ作成や、 Windows Azure Storage との連携など様々な工夫がされています。

Page 29: WDD2012_SC-004