

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Hadoop アプリケーションの作成または実行
<a name="emr-hadoop-application"></a>

**Topics**
+ [Amazon EMR を使用してバイナリを構築する](emr-build-binaries.md)
+ [ストリーミングでのデータ処理](UseCase_Streaming.md)
+ [カスタム JAR でのデータの処理](UseCase_CustomJar.md)

# Amazon EMR を使用してバイナリを構築する
<a name="emr-build-binaries"></a>

クラスターで使用するプログラムをコンパイルするためのビルド環境として Amazon EMR を使用できます。Amazon EMR で使用するプログラムのコンパイルは、Amazon EMR が使用しているバージョンと同じ Linux が実行されているシステムで行わなければなりません。32 ビットバージョンについては、32 ビットマシンまたは 32 ビットクロスコンパイルオプションをオンにして、コンパイルしておく必要があります。64 ビットバージョンについては、64 ビットマシンまたは 64 ビットクロスコンパイルオプションをオンにして、コンパイルしておく必要があります。EC2 インスタンスのバージョンの詳細については、「*Amazon EMR 管理ガイド*」の「[EC2 インスタンスを計画し構成する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ec2-instances.html)」を参照してください。C\$1\$1、Python、C\$1 などのプログラミング言語がサポートされいます。

次の表は、Amazon EMR を使用してアプリケーションを構築し、テストするステップを簡単に示しています。


**モジュール構築のプロセス**  

|  |  | 
| --- |--- |
|  1 |  クラスターのマスターノードに接続します。 | 
|  2  |  ソースファイルをマスターノードにコピーします。 | 
|  3  |  バイナリを構築し、必要に応じて最適化します。 | 
|  4 |  バイナリをマスターノードから Amazon S3 にコピーします。 | 

各ステップの詳細については、以降のセクションで説明します。

**クラスターのマスターノードに接続するには**
+ 「*Amazon EMR 管理ガイド*」の「[SSH を使用してマスターノードに接続する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)」にある手順を実行してください。

**ソースファイルをマスターノードにコピーするには**

1. Amazon S3 バケットにソース ファイルを置きます。バケットを作成する方法とデータを Amazon S3 に移動する方法については、「[Amazon Simple Storage Service ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)」を参照してください。

1. 以下のようなコマンドを入力して、ソースファイルを入れるフォルダーを Hadoop クラスター上に作成します:

   ```
   mkdir SourceFiles
   ```

1. 次のようなコマンドを入力して、ソースファイルを Amazon S3 からマスターノードにコピーします。

   ```
   hadoop fs -get s3://amzn-s3-demo-bucket/SourceFiles SourceFiles
   ```

**バイナリを構築し、必要に応じて最適化する**  
バイナリを構築する方法はさまざまな要因によって決まります。ご利用の構築ツールの手順に従って、環境をセットアップして設定してください。Hadoop システム仕様コマンドを使用すると、構築環境をインストールする方法を判断する際に必要なクラスター情報を入手できます。

**システム仕様を確認するには**
+ バイナリを構築する際に使用するアーキテクチャを確認するには、以下のコマンドを使用します。

  1. Debian のバージョンを確認するには、以下のコマンドを入力します:

     ```
     master$ cat /etc/issue
     ```

     出力は次の例のようになります。

     ```
     Debian GNU/Linux 5.0
     ```

  1. パブリック DNS 名とプロセッサーのサイズを確認するには、以下のコマンドを入力します。

     ```
     master$ uname -a
     ```

     出力は次の例のようになります。

     ```
     Linux domU-12-31-39-17-29-39.compute-1.internal 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 GNU/Linux
     ```

  1. プロセッサー速度を確認するには、以下のコマンドを入力します:

     ```
     master$ cat /proc/cpuinfo
     ```

     出力は次の例のようになります。

     ```
     processor : 0
     vendor_id : GenuineIntel
     model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
     flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr cda lahf_lm
     ...
     ```

バイナリを構築したら、ファイルを Amazon S3 にコピーできます。

**バイナリをマスターノードから Amazon S3 にコピーするには**
+ 次のコマンドを入力して、バイナリを Amazon S3 バケットにコピーします。

  ```
  hadoop fs -put BinaryFiles s3://amzn-s3-demo-bucket/BinaryDestination
  ```

# ストリーミングでのデータ処理
<a name="UseCase_Streaming"></a>

Hadoop ストリーミングは、Hadoop に付属しているユーティリティの 1 つです。Java 以外の言語で MapReduce 実行可能ファイルを作成できるようになります。JAR ファイルの形式でストリーミングが実装されるため、Amazon EMR API から、またはコマンドラインから標準のJAR ファイルの用に実行できます。

このセクションでは、Amazon EMR でストリーミングを使用する方法について説明します。

**注記**  
Apache Hadoop Streaming は独立したツールです。そのため、ここでは、その関数とパラメータすべてを説明するわけではありません。Hadoop Streaming の詳細については、[http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html](http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html) を参照してください。

## Hadoop ストリーミングユーティリティの使用
<a name="HadoopStreamCommands"></a>

このセクションでは、Hadoop のストリーミングユーティリティの使用方法について説明します。


**Hadoop プロセス**  

|  |  | 
| --- |--- |
| 1 |  自由にプログラム言語を選択して、実行可能なマッパーとリデューサーを作成します。 Hadoop のドキュメントの指示に従ってストリーミング実行ファイルを書いてください。プログラムは、標準出力による標準入出力データからの入力を読み取れるようにする必要があります。デフォルトでは、入出力の各行は 1 つのレコードに対応し、各行の最初のタブはキーと値を区切ります。  | 
| 2 |  ローカルで実行ファイルをテストしてから、Amazon S3 へアップロードします。  | 
| 3 |  Amazon EMR コマンドラインインターフェイスまたは Amazon EMR コンソールを使用してアプリケーションを実行します。  | 

各マッパースクリプトは、 クラスター内の独立したプロセスとして実行されます。各リデューサー実行ファイルは、マッパー実行ファイルの出力をジョブフローによるデータ出力にします。

`input`、`output`、`mapper`、および `reducer` パラメータは、ほとんどのストリーミングアプリケーションで必要とされます。以下の表は、これらのパラメータと他のオプションパラメータついて説明します。


| パラメータ | 説明 | 必須 | 
| --- | --- | --- | 
| -input |  Amazon S3 上の入力データの場所。 タイプ: 文字列 デフォルト: なし 制約: URI。プロトコルの指定がなければ、クラスターのデフォルトファイルシステムが使用されます。  | はい | 
| -output |  Amazon EMR が処理されたデータをアップロードする Amazon S3 上の場所。 タイプ: 文字列 デフォルト: なし 制約: URI デフォルト: 場所の指定がなければ、Amazon EMR は `input` で指定された場所にデータをアップロードします。  | はい | 
| -mapper |  マッパー実行ファイルの名前。 タイプ: 文字列 デフォルト: なし  | はい | 
| -reducer |  リデューサー実行ファイルの名前。 タイプ: 文字列 デフォルト: なし  | はい | 
| -cacheFile |  （主としてパフォーマンス向上のために）Hadoop がローカル作業ディレクトリにコピーするファイルが格納されている Amazon S3 の場所。 タイプ: 文字列 デフォルト: なし 制約: [URI]\$1[作業ディレクトリに作成するシンボリックリンク名]   | いいえ | 
| -cacheArchive |  作業ディレクトリに抽出する JAR ファイル タイプ: 文字列 デフォルト: なし 制約: [URI]\$1[作業ディレクトリに作成するシンボリックリンクディレクトリ名   | いいえ | 
| -combiner |  結果の結合 タイプ: 文字列 デフォルト: なし 制約: Java クラス名  | いいえ | 

次のコード例は、Python で作成されたマッパーの実行可能ファイルです。このスクリプトは WordCount サンプルアプリケーションの一部です。

```
 1. #!/usr/bin/python
 2. import sys
 3. 
 4. def main(argv):
 5.   line = sys.stdin.readline()
 6.   try:
 7.     while line:
 8.       line = line.rstrip()
 9.       words = line.split()
10.       for word in words:
11.         print "LongValueSum:" + word + "\t" + "1"
12.       line = sys.stdin.readline()
13.   except "end of file":
14.     return None
15. if __name__ == "__main__":
16.   main(sys.argv)
```

# ストリーミングステップの送信
<a name="CLI_CreateStreaming"></a>

このセクションでは、クラスターにストリーミングステップを送信するための基本について説明します。ストリーミングアプリケーションは、標準入力から入力を読み取って、スクリプトまたは実行可能ファイル (マッパーと呼ばれます) を各入力に対して実行します。各入力の結果は、ローカル（通常は Hadoop Distributed File System（HDFS）パーティション）に保存されます。すべての入力がマッパーによって処理されたら、そのマッパーの結果は、2 つ目のスクリプトまたは実行可能ファイル (リデューサーと呼ばれます) によって処理されます。リデューサーの結果は標準出力に送信されます。一連のストリーミングステップをつなげて、あるステップの出力を別のステップの入力にすることができます。

マッパーとリデューサーはそれぞれファイルとして参照できます。また、Java クラスを指定することもできます。マッパーおよびリデューサーは、Ruby、Perl、Python、PHP、Bash など、サポートされている任意の言語で実装できます。

## コンソールを使用したストリーミングステップの送信
<a name="emr-dev-create-stream-console"></a>

この例では、Amazon EMR コンソールを使用し、実行中のクラスターにストリーミングステップを送信する方法について説明します。

**ストリーミングステップを送信するには**

1. [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/) で Amazon EMR コンソールを開きます。

1. [**Cluster List (クラスターリスト)**] で、クラスターの名前を選択します。

1. [**Steps (ステップ)**] セクションまでスクロールして展開し、[**Add step (ステップの追加)**] を選択します。

1. [**Add Step**] ダイアログボックスで、次のようにします。
   + [**Step type**] は [**Streaming program**] を選択します。
   + [**Name**] では、デフォルト名（Streaming program）を使用するか、または新しい名前を入力します。
   + [**Mapper (マッパー)**] では、Hadoop のマッパークラスの場所、または Python プログラムなどのマッパー実行ファイルが存在する S3 バケットを入力するか参照します。パスの値は *BucketName*/*path*/*MapperExecutable* という書式で指定する必要があります。
   + [**Reducer (リデューサー)**] では、Hadoop のリデューサークラスの場所、または Python プログラムなどのリデューサー実行ファイルが存在する S3 バケットを入力するか参照します。パスの値は *BucketName*/*path*/*MapperExecutable* という書式で指定する必要があります。Amazon EMR は、特別な *aggregate* キーワードをサポートしています。詳細については、Hadoop が提供する Aggregate ライブラリを参照してください。
   + [**Input S3 location**] では、入力データの場所を入力または参照します。
   + **[Output S3 location]** (S3 の場所の出力) で、Amazon S3 出力バケットの名前を入力するか、参照します。
   + [**Arguments (引数)**] は、フィールドを空のままにします。
   + [**Action on failure (失敗時の操作)**] では、デフォルトのオプション ([**Continue (続行)**]) を使用します。

1. **[Add]** (追加) を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。

1. ステップが実行されると、ステータスは [Pending (保留中)] から [Running (実行中)]、[Running (実行中)] から [完了済み] に変更されます。ステータスを更新するには、[Actions] 列の上にある [**Refresh**] アイコンを選択します。

## AWS CLI
<a name="emr-dev-create-stream-cli"></a>

これらの例は、 AWS CLI を使用してクラスターを作成し、ストリーミングステップを送信する方法を示しています。

**を使用してクラスターを作成し、ストリーミングステップを送信するには AWS CLI**
+ を使用してクラスターを作成し、ストリーミングステップを送信するには AWS CLI、次のコマンドを入力し、*myKey* を EC2 キーペアの名前に置き換えます。`--files` の引数はスクリプトの場所の Amazon S3 パスで、`-mapper` および `-reducer` の引数はそれぞれのスクリプトファイルの名前にする必要があります。

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,Args=[--files,pathtoscripts,-mapper,mapperscript,-reducer,reducerscript,aggregate,-input,pathtoinputdata,-output,pathtooutputbucket]
  ```
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

  `--instance-groups` パラメータを使用せずにインスタンス数を指定すると、1 つのマスターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。
**注記**  
以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「aws `emr create-default-roles`」と入力してそれらを作成してから、`create-cluster` サブコマンドを入力します。

  での Amazon EMR コマンドの使用の詳細については AWS CLI、「」を参照してください[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

# カスタム JAR でのデータの処理
<a name="UseCase_CustomJar"></a>

カスタム JAR では、Amazon S3 にアップロードできるコンパイル済みの Java プログラムを実行します。起動する Hadoop のバージョンに合わせてプログラムをコンパイルし、Amazon EMR クラスターに `CUSTOM_JAR` ステップを送信する必要があります。JAR ファイルのコンパイル方法の詳細については、「[Amazon EMR を使用してバイナリを構築する](emr-build-binaries.md)」を参照してください。

Hadoop MapReduce アプリケーションの作成の詳細については、Apache Hadoop ドキュメントの「[MapReduce Tutorial](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)」を参照してください。

**Topics**
+ [カスタム JAR ステップの送信](emr-launch-custom-jar-cli.md)

# カスタム JAR ステップの送信
<a name="emr-launch-custom-jar-cli"></a>

カスタム JAR では、Amazon S3 にアップロードできるコンパイル済みの Java プログラムを実行します。起動する Hadoop のバージョンに合わせてプログラムをコンパイルし、Amazon EMR クラスターに `CUSTOM_JAR` ステップを送信する必要があります。JAR ファイルのコンパイル方法の詳細については、「[Amazon EMR を使用してバイナリを構築する](emr-build-binaries.md)」を参照してください。

Hadoop MapReduce アプリケーションの作成の詳細については、Apache Hadoop ドキュメントの「[MapReduce Tutorial](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)」を参照してください。

このセクションでは、Amazon EMR でのカスタム JAR ステップの送信の基本情報について説明します。カスタム JAR ステップを送信する場合は、データを処理するスクリプトを Java プログラミング言語で記述できます。

## コンソールを使用したカスタム JAR ステップの送信
<a name="ConsoleCreatingaCustomJARJob"></a>

この例では、Amazon EMR コンソールを使用して、実行中のクラスターにカスタム JAR ステップを送信する方法について説明します。

**コンソールを使用してカスタム JAR ステップを送信するには**

1. [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/) で Amazon EMR コンソールを開きます。

1. [**Cluster List (クラスターリスト)**] で、クラスターの名前を選択します。

1. [**Steps (ステップ)**] セクションまでスクロールして展開し、[**Add step (ステップの追加)**] を選択します。

1. [**Add Step (ステップの追加)**] ダイアログで:
   + [**Step type**] で、[**Custom JAR**] を選択します。
   + [**Name**] では、デフォルト名（Custom JAR）を使用するか、または新しい名前を入力します。
   + [**JAR S3 location**] では、JAR ファイルの場所を入力または参照します。JAR の場所は、S3 へのパスまたはクラスパス内の完全修飾 Java クラスです。
   + [**Arguments (引数)**] では、必要な引数をスペース区切りの文字列として入力するか、フィールドを空のままにします。
   + [**Action on failure (失敗時の操作)**] では、デフォルトのオプション ([**Continue (続行)**]) を使用します。

1. **[Add]** (追加) を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。

1. ステップが実行されると、ステータスは [Pending (保留中)] から [Running (実行中)]、[Running (実行中)] から [完了済み] に変更されます。ステータスを更新するには、[Actions] 列の上にある [**Refresh**] アイコンを選択します。

## を使用してクラスターを起動し、カスタム JAR ステップを送信する AWS CLI
<a name="emr-dev-create-jar-cli"></a>

**を使用してクラスターを起動し、カスタム JAR ステップを送信するには AWS CLI**

クラスターを起動し、 を使用してカスタム JAR ステップを送信するには AWS CLI、 `--steps`パラメータを使用して `create-cluster`サブコマンドを入力します。
+ クラスターを起動し、カスタム JAR ステップを送信するには、次のコマンドを入力して *myKey* を EC2 キーペア名に置き換え、*amzn-s3-demo-bucket* をバケット名に置き換えます。

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"]
  ```
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

  `--instance-groups` パラメータを使用せずにインスタンス数を指定すると、1 つのプライマリノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。
**注記**  
以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「`aws emr create-default-roles`」と入力してそれらを作成してから、`create-cluster` サブコマンドを入力します。

  での Amazon EMR コマンドの使用の詳細については AWS CLI、「」を参照してください[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

## サードパーティーへの依存関係
<a name="emr-custom-jar-dependency"></a>

プログラムで使用するための JAR を MapReduce クラスパスに含める必要が生じる場合があります。これを行うための 2 つのオプションがあります。
+ 「`--libjars s3://URI_to_JAR`」の手順で、ステップオプションに [を使用してクラスターを起動し、カスタム JAR ステップを送信する AWS CLI](#emr-dev-create-jar-cli) を含めます。
+ `mapred-site.xml` で `mapreduce.application.classpath` 設定を変更して、クラスターを起動します。`mapred-site` 設定分類を使用します。を使用して ステップでクラスターを作成するには AWS CLI、次のようになります。

  ```
  aws emr create-cluster --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --instance-type m5.xlarge --instance-count 2  --ec2-attributes KeyName=myKey \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] \
  --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```

  `myConfig.json`:

  ```
  [
      {
        "Classification": "mapred-site",
        "Properties": {
          "mapreduce.application.classpath": "path1,path2"
        }
      }
    ]
  ```

  パスのカンマ区切りリストを、各タスクの JVM クラスパスに付加する必要があります。