More Related Content Similar to WDD2012_SC-004
Similar to WDD2012_SC-004 (20) More from Kuninobu SaSaki
More from Kuninobu SaSaki (11) WDD2012_SC-0046. 膨大なデータを 多数のサーバーで
短時間で処理 分散処理 高スケーラビリティ
Google の論文が Yahoo や Facebook
契機となって誕生! で使われている
8. グラフィカルな
ヒートマップなど コマンドラインと
管理機能
管理・監視機能が充実 シンプルな Web 画面
CLI / GUI / Web UI
MPI / SOA / その他
任意のプログラムを プログラミングモデル MapReduce
利用可能
標準装備 ジョブスケジューラー 標準装備
Windows のファイル共有や、
サードパーティ製の 分散ファイルシステム HDFS
クラスターファイルシステム
10. 2012-04-24 01:02:03 W3SVC1 192.168.0.1 GET /…
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";
}
11. 入力データを分割して複数のプログラムに配る
2012-04-24 01:02:03 W3SVC1 192.168.0.1 GET/… 2012-04-24 01:03:05 W3SVC1 192.168.0.1 GET/… 2012-04-24 01:04:06 W3SVC1 192.168.0.1 GET/…
while(<>) { while(<>) { while(<>) {
next unless /^d{4}/; next unless /^d{4}/; next unless /^d{4}/;
my $time = substr($_,0,16); my $time = substr($_,0,16); my $time = substr($_,0,16);
$rpm{$time}++; $rpm{$time}++; $rpm{$time}++;
} } }
それぞれのプログラムは与えられた 他の仲間が何をやっているか
データを淡々と処理 気にする必要はない
Map
my @sorted_keys = sort keys %rpm; 結果の断片をソートする
foreach my $k (@sorted_keys) { foreach my $k (@sorted_keys) {
Reduce print "$k $rpm{$k}n"; print "$k $rpm{$k}n";
} }
キーでソート済みであることが保証されているので、
淡々と結果出力をすればよい
12. while(<>) { while(<>) { while(<>) {
next unless /^d{4}/; next unless /^d{4}/; next unless /^d{4}/;
my $time = substr($_,0,16); my $time = substr($_,0,16); my $time = substr($_,0,16);
$rpm{$time}++; $rpm{$time}++; $rpm{$time}++;
} } }
16. UNIX 環境に依存している Bash スクリプトの Java プログラム内の
部分を Windows 対応 cmd 移植 UNIX 依存部分を調整
JavaScript コンソール
Windows 環境向けの
Hive ODBC ドライバ
新機能追加
Windows Azure
ストレージへの対応
17. Windows 用に移植されたスクリプト群
bin/ bash の呼び出し部分に
hadoop- config.cmd Windows 判定ロジックを追加
hadoop.cmd
hdfs.cmd
mapred.cmd
start-master.cmd
start-slave.cmd
stop-master.cmd
stop-slave.cmd
conf/
hadoop-env.cmd
19. HDFS に対して SQL 的な言語 (Hive QL) でクエリを発行できる。
MapReduce の複雑さを隠蔽し RDB ユーザーが直感的に
Hadoop を活用できるようになる。
こちらも HDFS に対する上位レイヤで、大規模なデータセットの
探索を容易にする仕組み
“Pig Latin” というスクリプト言語で処理を記述すると、
Pig がそれを MapReduce ジョブに変換して実行してくれる。
20. Windows Server 版 Windows Azure 版 Windows Azure 版
(オンプレミス) その 1 - 「自前クラスター」 その 2 – “Elastic MapReduce”
Windows Azure の
Windows Server に クラスターの詳細を意識せず
既存サブスクリプションに
Hadoop をインストールして MapReduce プログラムだけを
Hadoop クラスターを
クラスターを構築する方式 デプロイして利用する方式
デプロイする方式
22. “#コマンド” で、FS Shell の
コマンドを呼び出せます。
“#lsr” は ”hadoop fs –lsr” に相当します。
“#fs.get” で HDFS 上のファイルを
ローカルコンピューターへダウンロードできます
23. Hive に対する操作を Web ブラウザから行えます
クエリの結果と、実行された Map-Reduce
ジョブに関する情報が、ここに表示されます。
ここにHQLを入力します。
25. Windows 環境のアプリケーションに対して
Hadoop の分散ファイルシステムへのアクセスを提供
Action<string> processDirectory = null;
マネージド DLL processDirectory = (looppath) =>
(.NET 系の各種言語で利用可能) {
using (HdfsFileInfoEntries entries = hdfsSystem.ListDirectory(looppath))
{
ネイティブ DLL foreach (HdfsFileInfoEntry entry in entries.Entries)
(UNIX系の libhdfs に相当) {
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# でディレクトリの一覧を取得するコード例
};
26. セカンダリネームノードで作成されるチェックポイントファイルを
Windows Azure Storage へ転送して障害に備える機能です
プライマリ ネームノード セカンダリ ネームノード Windows Azure BLOB
edits fsimage
edits fsimage
マージ
fsimage.ckpt fsimage.ckpt
転送 転送
fsimage.ckpt
27. インストール Excel 用 Hive プラグイン
ポート設定