HDInsight に含まれる MapReduce サンプルを実行する

HDInsight 上の Apache Hadoop に含まれている MapReduce サンプルを実行する方法を説明します。

前提条件

MapReduce サンプル

サンプルは次の HDInsight クラスターに置かれています。/usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar これらのサンプルのソース コードは、次の HDInsight クラスターに含まれています。/usr/hdp/current/hadoop-client/src/hadoop-mapreduce-project/hadoop-mapreduce-examples

次のサンプルがこのアーカイブに含まれています。

サンプル 説明
aggregatewordcount 入力ファイル内の単語をカウントします。
aggregatewordhist 入力ファイル内の単語のヒストグラムを計算します。
bbp Bailey-Borwein-Plouffe を使用して Pi の正確な数値を計算します。
dbcount データベースに保存されているページビューのログをカウントします。
distbbp BBP 公式を使用して Pi の正確なビットを計算します。
grep 入力内の正規表現の一致をカウントします。
join 並べ替えられ、均等に分割されたデータセットの結合を実行します。
multifilewc 複数のファイルからの単語をカウントします。
pentomino pentomino 問題のソリューションを見つける、タイル並べのプログラム。
pi 準モンテカルロ法を使用して Pi を推定します。
randomtextwriter ノードあたり 10 GB のランダムなテキスト データを書き込みます。
randomwriter ノードあたり 10 GB のランダムなデータを書き込みます。
secondarysort Reduce フェーズに対する 2 番目の並べ替えを定義します。
sort ランダム ライターによって書き込まれたデータを並べ替えます。
sudoku 数独問題を解くプログラム。
teragen terasort のデータを生成します。
terasort terasort を実行します。
teravalidate terasort の結果をチェックします。
wordcount 入力ファイル内の単語をカウントします。
wordmean 入力ファイル内の単語の長さの平均をカウントします。
wordmedian 入力ファイル内の単語の長さの中央値をカウントします。
wordstandarddeviation 入力ファイル内の単語の長さの標準偏差をカウントします。

Wordcount 例の実行

  1. SSH を使用して HDInsight に接続する。 CLUSTER をクラスターの名前に置き換えてから、次のコマンドを入力します。

    ssh sshuser@CLUSTER-ssh.azurehdinsight.net
    
  2. SSH セッションから、次のコマンドを使用してサンプルを一覧表示します。

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar
    

    このコマンドは、このドキュメントの前のセクションに示したサンプルの一覧を生成します。

  3. 次のコマンドを使用して、特定のサンプルのヘルプを表示します。 これは、 wordcount サンプルです。

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount
    

    次のメッセージが表示されます。

    Usage: wordcount <in> [<in>...] <out>
    

    このメッセージは、ソース ドキュメントの複数の入力パスを指定できることを示しています。 最後のパスは、出力 (ソース ドキュメント内の単語の数) の保存場所です。

  4. 次のコマンドを使用して、レオナルド ダ ヴィンチの手記 (クラスターで提供されているサンプル データ) に含まれるすべての単語をカウントします。

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/davinciwordcount
    

    このジョブに対する入力は、/example/data/gutenberg/davinci.txt から読み取られます。 この例の出力は、/example/data/davinciwordcount に格納されます。 両方のパスは、ローカル ファイル システムではなく、クラスターの既定のストレージに配置されます。

    Note

    wordcount サンプルのヘルプで説明したように、複数の入力ファイルを指定することもできます。 たとえば、 hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/gutenberg/ulysses.txt /example/data/twowordcount は davinci.txt と ulysses.txt の両方の単語をカウントします。

  5. ジョブが完了したら、次のコマンドを使用して出力を表示します。

    hdfs dfs -cat /example/data/davinciwordcount/*
    

    このコマンドは、ジョブによって生成されたすべての出力ファイルを連結します。 コンソールに出力を表示します。 出力は次のテキストのようになります。

    zum     1
    zur     1
    zwanzig 1
    zweite  1
    

    各行は、単語と入力データで発生した回数を表します。

数独の例

数独 は、9 つの 3 x 3 グリッドで構成される論理パズルです。 いくつかのグリッドのセルには数字がありますが、他のセルは空白になっています。空白のセルを解決するとゴールです。 パズルの詳細については前のリンクで確認できますが、このサンプルの目的は空白のセルを解決することです。 そのため、入力は次の形式のファイルである必要があります。

  • 9 つの行と 9 つの列
  • 各列には、数字または ? (空白のセルを示す) を含めることができる
  • セルはスペースで区切られる

1 つの数字を 1 つの列または行で繰り返すことができないという、数独パズルを作成する特定の方法があります。 正しく作成された HDInsight クラスターの例があります。 それは /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta に配置され、次のテキストを含んでいます。

8 5 ? 3 9 ? ? ? ?
? ? 2 ? ? ? ? ? ?
? ? 6 ? 1 ? ? ? 2
? ? 4 ? ? 3 ? 5 9
? ? 8 9 ? 1 4 ? ?
3 2 ? 4 ? ? 8 ? ?
9 ? ? ? 8 ? 5 ? ?
? ? ? ? ? ? 2 ? ?
? ? ? ? 4 5 ? 7 8

この例の問題を数独の例で実行するには、次のコマンドを使用します。

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar sudoku /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta

結果は次のテキストのようになります。

8 5 1 3 9 2 6 4 7
4 3 2 6 7 8 1 9 5
7 9 6 5 1 4 3 8 2
6 1 4 8 2 3 7 5 9
5 7 8 9 6 1 4 2 3
3 2 9 4 5 7 8 1 6
9 4 7 2 8 6 5 3 1
1 8 5 7 3 9 2 6 4
2 6 3 1 4 5 9 7 8

Pi (π) の例

pi サンプルでは統計的手法 (準モンテカルロ法) に基づいて Pi の値を計算します。 単位正方形の中に点がランダムに配置されます。 正方形には円も含まれています。 点が円の内部にある確率は、円の面積に等しい pi/4 です。 pi の値は 4R の値から推定できます。 R は、正方形の内部にある点の総数と、円の内部にある点の数との比率です。 サンプルの点の数が大きくなるほど、推定値の精度が上がります。

次のコマンドを使用して、このサンプルを実行します。 このコマンドは、それぞれに 10,000, 000 のサンプルがある 16 のマップを使用して、pi の値を推定します。

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar pi 16 10000000

このコマンドによって返される値は、3.14159155000000000000 です。 参考までに、Pi の小数点以下 10 桁までは 3.1415926535 です。

10 GB GraySort の例

GraySort はベンチマーク ソートです。 その評価尺度は、大量のデータ (通常は最低でも 100 TB のデータ) をソートした際のソート速度 (TB/分) です。

このサンプルでは、比較的高速に実行できるように、中程度のサイズの 10 GB のデータを使用します。 Owen O'Malley および Arun Murthy によって開発された MapReduce アプリケーションが使用されます。 これらのアプリケーションは、2009 年にテラバイト ソート ベンチマークの汎用目的 ("Daytona") 部門で 0.578 TB/分 (173 分で 100 TB) という年間記録を樹立しました。 これも含めたソート ベンチマークの詳細については、 Sort Benchmark サイトを参照してください。

このサンプルでは 3 組の MapReduce プログラムを使用します。

  • TeraGen: データ行を生成してソートする MapReduce プログラム

  • TeraSort: 入力データをサンプリングし、MapReduce を使用してデータを合計順にソートする

    TeraSort は、カスタム パーティショナーを除けば、標準的な MapReduce ソートです。 このパーティショナーは、各 reduce のキー範囲を定義する N-1 サンプル キーの並べ替えられた一覧を使用します。 特に、sample[i-1] <= key < sample[i] となるキーはすべて reduce i に送られます。 このパーティショナーでは、reduce i の出力がすべて reduce i+1 の出力より小さくなることが保証されます。

  • TeraValidate: 出力がグローバルにソートされていることを検証する MapReduce プログラム

    出力ディレクトリ内のファイルごとにマップを 1 つ作成します。各マップは各キーが前のキー以下であることを保証します。 Map 関数は、各ファイルの最初と最後のキーのレコードを生成します。 Reduce 関数は、ファイル i の最初のキーがファイル i-1 の最後のキーよりも大きいことを保証します。 問題が見つかった場合は、Reduce フェーズの出力として報告され、順序が間違っているキーが報告されます。

次の手順を使用してデータを生成、ソートし、出力を検証します。

  1. 10 GB のデータを生成します。データは、HDInsight クラスターの既定のストレージ (/example/data/10GB-sort-input) に格納されます。

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapred.map.tasks=50 100000000 /example/data/10GB-sort-input
    

    -Dmapred.map.tasks は、このジョブに使用する map タスクの数を Hadoop に伝えます。 最後の 2 つのパラメーターは、10 GB のデータを作成し、それを /example/data/10GB-sort-input に格納するようにジョブに指示します。

  2. 次のコマンドを使用して、データをソートします。

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapred.map.tasks=50 -Dmapred.reduce.tasks=25 /example/data/10GB-sort-input /example/data/10GB-sort-output
    

    -Dmapred.reduce.tasks は、このジョブに使用する reduce タスクの数を Hadoop に伝えます。 最後の 2 つのパラメーターは、単なるデータの入力と出力の場所です。

  3. 次のコマンドを使用して、ソートによって生成されたデータを検証します。

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapred.map.tasks=50 -Dmapred.reduce.tasks=25 /example/data/10GB-sort-output /example/data/10GB-sort-validate
    

次のステップ

この記事では、Linux ベースの HDInsight クラスターに付属するサンプルを実行する方法を説明しました。 HDInsight で Pig、Hive、および MapReduce を使用する方法のチュートリアルについては、次のトピックをご覧ください。