SC-004
膨大なデータを      多数のサーバーで
短時間で処理       分散処理             高スケーラビリティ




      Google の論文が   Yahoo や Facebook
      契機となって誕生!     で使われている
Hadoop
(今日の主役)
グラフィカルな
    ヒートマップなど                          コマンドラインと
                          管理機能
  管理・監視機能が充実                         シンプルな Web 画面
   CLI / GUI / Web UI

 MPI / SOA / その他
 任意のプログラムを              プログラミングモデル    MapReduce
      利用可能


      標準装備              ジョブスケジューラー      標準装備


Windows のファイル共有や、
    サードパーティ製の           分散ファイルシステム      HDFS
クラスターファイルシステム
分散ファイルシステムを
 自前で備えている


プログラミングモデルが
  規定されている
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";
}
入力データを分割して複数のプログラムに配る



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";
                     }                                                  }
                                        キーでソート済みであることが保証されているので、
                                              淡々と結果出力をすればよい
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}++;
}                               }                               }
UNIX 環境に依存している     Bash スクリプトの       Java プログラム内の
 部分を Windows 対応        cmd 移植        UNIX 依存部分を調整




                  JavaScript コンソール
 Windows 環境向けの
                                     Hive ODBC ドライバ
     新機能追加
                   Windows Azure
                  ストレージへの対応
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
主要な関連プロジェクト




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



 こちらも HDFS に対する上位レイヤで、大規模なデータセットの
  探索を容易にする仕組み
 “Pig Latin” というスクリプト言語で処理を記述すると、
  Pig がそれを MapReduce ジョブに変換して実行してくれる。
Windows Server 版      Windows Azure 版      Windows Azure 版
   (オンプレミス)           その 1 - 「自前クラスター」    その 2 – “Elastic MapReduce”



                        Windows Azure の
   Windows Server に                        クラスターの詳細を意識せず
                      既存サブスクリプションに
Hadoop をインストールして                          MapReduce プログラムだけを
                       Hadoop クラスターを
 クラスターを構築する方式                               デプロイして利用する方式
                         デプロイする方式
通常の Windows Azure 管理
ポータルとは別の専用サイト
“#コマンド” で、FS Shell の
コマンドを呼び出せます。

“#lsr” は ”hadoop fs –lsr” に相当します。




“#fs.get” で HDFS 上のファイルを
ローカルコンピューターへダウンロードできます
Hive に対する操作を Web ブラウザから行えます




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




ここにHQLを入力します。
options.orientation = 45;
   graph.bar(wordCounts, options);




graph.pie(wordCounts, options);
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# でディレクトリの一覧を取得するコード例
                         };
セカンダリネームノードで作成されるチェックポイントファイルを
          Windows Azure Storage へ転送して障害に備える機能です


プライマリ ネームノード             セカンダリ ネームノード              Windows Azure BLOB



 edits    fsimage



                          edits     fsimage


                                  マージ
   fsimage.ckpt                                        fsimage.ckpt

                    転送                        転送
                             fsimage.ckpt
インストール   Excel 用 Hive プラグイン




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

WDD2012_SC-004

  • 2.
  • 6.
    膨大なデータを 多数のサーバーで 短時間で処理 分散処理 高スケーラビリティ Google の論文が Yahoo や Facebook 契機となって誕生! で使われている
  • 7.
  • 8.
    グラフィカルな ヒートマップなど コマンドラインと 管理機能 管理・監視機能が充実 シンプルな Web 画面 CLI / GUI / Web UI MPI / SOA / その他 任意のプログラムを プログラミングモデル MapReduce 利用可能 標準装備 ジョブスケジューラー 標準装備 Windows のファイル共有や、 サードパーティ製の 分散ファイルシステム HDFS クラスターファイルシステム
  • 9.
  • 10.
    2012-04-24 01:02:03 W3SVC1192.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 W3SVC1192.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
  • 18.
  • 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 クラスターを クラスターを構築する方式 デプロイして利用する方式 デプロイする方式
  • 21.
    通常の Windows Azure管理 ポータルとは別の専用サイト
  • 22.
    “#コマンド” で、FS Shellの コマンドを呼び出せます。 “#lsr” は ”hadoop fs –lsr” に相当します。 “#fs.get” で HDFS 上のファイルを ローカルコンピューターへダウンロードできます
  • 23.
    Hive に対する操作を Webブラウザから行えます クエリの結果と、実行された Map-Reduce ジョブに関する情報が、ここに表示されます。 ここにHQLを入力します。
  • 24.
    options.orientation = 45; graph.bar(wordCounts, options); graph.pie(wordCounts, options);
  • 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 プラグイン ポート設定
  • 28.
     単に移植しただけではなく、JavaScript でのMapReduce ジョブ作成や、 Windows Azure Storage との連携など様々な工夫がされています。