

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

# Amazon EMR 2.x および 3.x AMI バージョン
<a name="emr-release-3x"></a>

**注記**  
AWS は、すべての AWS API エンドポイントの TLS 設定を TLS 1.2 の最小バージョンに更新しています。Amazon EMR リリース 3.10 以前では、TLS 1.0/1.1 接続のみがサポートされています。2023 年 12 月 4 日以降は、Amazon EMR 3.10 以前のバージョンでクラスターを作成できなくなります。  
Amazon EMR 3.10 以前を使用している場合は、すぐにワークロードをテストし、最新の Amazon EMR リリースに移行することをお勧めします。詳細については、「[AWS Security Blog](https://aws.amazon.com/blogs//security/tls-1-2-required-for-aws-endpoints/)」を参照してください。

Amazon EMR 2.x および 3.x リリースは、AMI バージョンと呼ばれ、互換性の理由からそれらを必要とする既存のソリューションで利用できます。**これらのリリースバージョンで、新しいクラスターまたは新しいソリューションを作成することはお勧めしません。これらには、新しいリリースの機能がなく、古いアプリケーションパッケージが含まれています。

最新の Amazon EMR リリースバージョンを使用してソリューションを構築することをお勧めします。

2.x および 3.x シリーズのリリースバージョンと最新の Amazon EMR リリースバージョンの違いの範囲は重要です。これらの相違点は、クラスターの作成方法や設定方法から、クラスターのアプリケーションのポートとディレクトリの構造まで、多岐にわたります。

このセクションでは、Amazon EMR の最も重要な相違点と、特定のアプリケーションの設定と管理の違いについて説明します。包括的ではありません。2.x または 3.x シリーズでクラスターを作成して使用すると、このセクションで説明されていない相違点が発生することがあります。

**Topics**
+ [Amazon EMR の以前の AMI バージョンでクラスターを作成する](emr-3x-create.md)
+ [Amazon EMR の以前の AMI のバージョンを使用したアプリケーションのインストール](emr-3x-install-apps.md)
+ [Amazon EMR の以前の AMI バージョンによるクラスターおよびアプリケーション設定のカスタマイズ](emr-3x-customizeappconfig.md)
+ [Amazon EMR の以前の AMI バージョンの Hive アプリケーションの仕様。](emr-3x-hive.md)
+ [Amazon EMR の以前の AMI バージョンの HBase アプリケーションの仕様](emr-3x-hbase.md)
+ [Amazon EMR の以前の AMI バージョンの Pig アプリケーションの仕様。](emr-3x-pig.md)
+ [Amazon EMR の以前の AMI バージョンの Spark アプリケーションの仕様。](emr-3x-spark.md)
+ [Amazon EMR の以前の AMI バージョンと S3DistCp ユーティリティの相違点](emr-3x-s3distcp.md)

# Amazon EMR の以前の AMI バージョンでクラスターを作成する
<a name="emr-3x-create"></a>

Amazon EMR 2.x および 3.x リリースは AMI バージョンによって参照されます。Amazon EMR リリース 4.0.0 以降では、リリースは `emr-5.11.0` などのリリースラベルを使用してリリースバージョンによって参照されます。この変更は、 AWS CLI またはプログラムでクラスターを作成するときに最も顕著です。

を使用して AMI リリースバージョンを使用してクラスター AWS CLI を作成する場合は、 などの `--ami-version`オプションを使用します`--ami-version 3.11.0`。Amazon EMR 4.0.0 以降で導入された多くのオプション、機能、およびアプリケーションは、`--ami-version` を指定すると利用できません。詳細については、「*AWS CLI コマンドリファレンス*」の「[create-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)」を参照してください。

次の AWS CLI コマンド例では、AMI バージョンを使用してクラスターを起動します。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,\
InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,\
InstanceType=m3.xlarge --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\
Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]
```

プログラムでは、すべての Amazon EMR リリースバージョンが EMR API でクラスターを作成する `RunJobFlowRequest` アクションを使用します。次の Java コード例では、AMI リリースバージョン 3.11.0 を使用してクラスターを作成します。

```
RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("AmiVersion Cluster")
			.withAmiVersion("3.11.0")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyPair")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge");
```

次の `RunJobFlowRequest` 呼び出しには、代わりにリリースラベルを使用します。

```
RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("ReleaseLabel Cluster")
			.withReleaseLabel("emr-7.12.0")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyPair")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge");
```

## クラスターサイズの設定
<a name="emr-3x-cluster-size"></a>

クラスターの実行時、Hadoop は、データを処理するときに必要だったマッパータスクとリデューサータスクの数を確認します。クラスターが大きければ、リソースを効率的に使用し、処理時間を短縮するために、タスクの数は多くなるはずです。通常、EMR クラスターのサイズは、そのクラスターを通して変わりません。タスクの数はクラスターの作成時に設定します。実行中のクラスターのサイズを変更すると、クラスター実行中に処理を変更できます。つまり、タスクの数は固定されておらず、クラスターが存続している間は変更できます。最適な数のタスクを設定するのに役立つ設定オプションは 2 つあります:
+ `mapred.map.tasksperslot`
+ `mapred.reduce.tasksperslot`

これらのオプションは両方とも `mapred-conf.xml` ファイルで設定できます。ジョブをクラスターに送信するとき、クラスター全体で使用できるマップおよびリデューススロットの現在の合計数がジョブクライアントによって確認されます。その後、ジョブクライアントは次の方程式を使用して、タスクの数を設定します。
+ `mapred.map.tasks` =` mapred.map.tasksperslot` ×クラスターのマップスロット数
+ `mapred.reduce.tasks` =`mapred.reduce.tasksperslot` ×クラスターのリデューススロット数

ジョブクライアントは、タスク数が設定されていない場合にのみ `tasksperslot` パラメータを読み込みます。タスク数はいつでも無効にできます。この無効にする処理は、ブートストラップアクションを使用してすべてのクラスターに対してまとめて実行することも、設定を変更するステップを追加してジョブごとに個別に実行することも可能です。

Amazon EMR は、タスクノードエラーに対する耐性があり、タスクノードが使用できなくなってもクラスターの実行を継続できます。Amazon EMR は、追加のタスクノードを自動的にプロビジョニングし、エラーが発生したタスクノードの代わりに配置します。

クラスターステップごとに異なる数のタスクノードを設定できます。また、実行中のクラスターにステップを追加して、タスクノードの数を変更することもできます。デフォルトで、すべてのステップが確実に順次実行されるので、どのステップに対しても、実行中のタスクノードの数を指定できます。

# Amazon EMR の以前の AMI のバージョンを使用したアプリケーションのインストール
<a name="emr-3x-install-apps"></a>

AMI バージョンを使用する場合、アプリケーションのインストールには、`NewSupportedProducts`RunJobFlow[ アクションの ](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow.html) パラメータの使用、ブートストラップアクションの使用、[Step](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_Step.html) アクションの使用など、さまざまな方法があります。

# Amazon EMR の以前の AMI バージョンによるクラスターおよびアプリケーション設定のカスタマイズ
<a name="emr-3x-customizeappconfig"></a>

Amazon EMR リリースバージョン 4.0.0 では、設定分類を使用してアプリケーションを設定する簡単な方法が導入されました。詳細については、「[アプリケーションの設定](emr-configure-apps.md)」を参照してください。AMI バージョンを使用する場合は、渡した引数とともにブートストラップアクションを使用してアプリケーションを設定します。たとえば、ブートストラップアクション `configure-hadoop` および `configure-daemons` は、Hadoop や YARN に固有の `--namenode-heap-size` などの 環境プロパティを設定します。より新しいバージョンでは、これらは `hadoop-env` と `yarn-env` 設定分類を使用して設定されます。実行するブートストラップアクションの一般的な設定の詳細については、[Github の emr-bootstrap-actions リポジトリ](https://github.com/awslabs/emr-bootstrap-actions)を参照してください。

次の表は、より最近の Amazon EMR リリースバージョンでブートストラップアクションを構成分類にマップしています。


**Hadoop**  

| 影響を受けるアプリケーションファイル名 | AMI バージョンのブートストラップアクション | 設定分類 | 
| --- | --- | --- | 
| core-site.xml  | configure-hadoop -c  | core-site | 
| log4j.properties  | configure-hadoop -l  | hadoop-log4j | 
| hdfs-site.xml  | configure-hadoop -s  | hdfs-site  | 
| 該当なし | 該当なし | hdfs-encryption-zones | 
| mapred-site.xml  | configure-hadoop -m  | mapred-site | 
| yarn-site.xml  | configure-hadoop -y  | yarn-site | 
| httpfs-site.xml  | configure-hadoop -t  | httpfs-site | 
| capacity-scheduler.xml  | configure-hadoop -z  | capacity-scheduler | 
| yarn-env.sh  | configure-daemons --resourcemanager-opts | yarn-env | 


**[Hive]**  

| 影響を受けるアプリケーションファイル名 | AMI バージョンのブートストラップアクション | 設定分類 | 
| --- | --- | --- | 
| hive-env.sh | 該当なし | hive-env | 
| hive-site.xml | hive-script --install-hive-site \$1\$1MY\$1HIVE\$1SITE\$1FILE\$1 | hive-site | 
| hive-exec-log4j.properties | 該当なし | hive-exec-log4j | 
| hive-log4j.properties | 該当なし | hive-log4j | 


**EMRFS**  

| 影響を受けるアプリケーションファイル名 | AMI バージョンのブートストラップアクション | 設定分類 | 
| --- | --- | --- | 
| emrfs-site.xml | configure-hadoop -e | emrfs-site | 
| 該当なし | s3get -s s3://custom-provider.jar -d /usr/share/aws/emr/auxlib/ | emrfs-site (新しい設定 fs.s3.cse.encryptionMaterialsProvider.uri と併用) | 

全分類の一覧については、[アプリケーションの設定](emr-configure-apps.md) を参照してください。

## アプリケーションの環境変数
<a name="emr-3x-appenv"></a>

AMI バージョンを使用する場合、`hadoop-user-env.sh` スクリプトが、`configure-daemons` ブートストラップアクションと組み合わせて使用され、Hadoop 環境を設定します。スクリプトには、以下のアクションが含まれます。

```
#!/bin/bash 
export HADOOP_USER_CLASSPATH_FIRST=true; 
echo "HADOOP_CLASSPATH=/path/to/my.jar" >> /home/hadoop/conf/hadoop-user-env.sh
```

Amazon EMR リリース 4.x では、次の例に示すように `hadoop-env` 設定分類を使用して同じ手順を実行します。

```
[ 
      { 
         "Classification":"hadoop-env",
         "Properties":{ 

         },
         "Configurations":[ 
            { 
               "Classification":"export",
               "Properties":{ 
                  "HADOOP_USER_CLASSPATH_FIRST":"true",
                  "HADOOP_CLASSPATH":"/path/to/my.jar"
               }
            }
         ]
      }
   ]
```

別の例として、`configure-daemons` の使用、`--namenode-heap-size=2048` を渡すこと、`--namenode-opts=-XX:GCTimeRatio=19` は以下の設定分類と同じです。

```
[ 
      { 
         "Classification":"hadoop-env",
         "Properties":{ 

         },
         "Configurations":[ 
            { 
               "Classification":"export",
               "Properties":{ 
                  "HADOOP_DATANODE_HEAPSIZE":  "2048",
           	"HADOOP_NAMENODE_OPTS":  "-XX:GCTimeRatio=19"
               }
            }
         ]
      }
   ]
```

他のアプリケーションの環境変数は、`/home/hadoop/.bashrc` では定義されなくなりました。代わりに、コンポーネントやアプリケーションごとに、主に `/etc/default` のような `/etc/default/hadoop` ファイルで設定されます。アプリケーション RPM によってインストールされる `/usr/bin/` にあるラッパースクリプトでも、バイナリスクリプトを実際に含める前に、追加の環境変数を設定できます。

## サービスポート
<a name="emr-3x-serviceports"></a>

AMI バージョンを使用する場合は、一部のサービスでカスタムポートを使用します。


**ポート設定の変更箇所**  

| 設定 | AMI バージョン 3.x | オープンソースのデフォルト | 
| --- | --- | --- | 
| fs.default.name | hdfs://emrDeterminedIP:9000 | デフォルト (hdfs://emrDeterminedIP:8020)  | 
| dfs.datanode.address | 0.0.0.0:9200 | デフォルト (0.0.0.0:50010)  | 
| dfs.datanode.http.address | 0.0.0.0:9102 | デフォルト (0.0.0.0:50075)  | 
| dfs.datanode.https.address | 0.0.0.0:9402 | デフォルト (0.0.0.0:50475) | 
| dfs.datanode.ipc.address | 0.0.0.0:9201 | デフォルト (0.0.0.0:50020) | 
| dfs.http.address | 0.0.0.0:9101 | デフォルト (0.0.0.0:50070)  | 
| dfs.https.address | 0.0.0.0:9202 | デフォルト (0.0.0.0:50470)  | 
| dfs.secondary.http.address | 0.0.0.0:9104 | デフォルト (0.0.0.0:50090) | 
| yarn.nodemanager.address | 0.0.0.0:9103 | デフォルト (\$1\$1yarn.nodemanager.hostname\$1:0)  | 
| yarn.nodemanager.localizer.address  | 0.0.0.0:9033 | デフォルト (\$1\$1yarn.nodemanager.hostname\$1:8040) | 
| yarn.nodemanager.webapp.address | 0.0.0.0:9035 | デフォルト (\$1\$1yarn.nodemanager.hostname\$1:8042) | 
| yarn.resourcemanager.address | emrDeterminedIP:9022 | デフォルト (\$1\$1yarn.resourcemanager.hostname\$1:8032) | 
| yarn.resourcemanager.admin.address | emrDeterminedIP:9025 | デフォルト (\$1\$1yarn.resourcemanager.hostname\$1:8033) | 
| yarn.resourcemanager.resource-tracker.address | emrDeterminedIP:9023 | デフォルト (\$1\$1yarn.resourcemanager.hostname\$1:8031) | 
| yarn.resourcemanager.scheduler.address | emrDeterminedIP:9024 | デフォルト (\$1\$1yarn.resourcemanager.hostname\$1:8030) | 
| yarn.resourcemanager.webapp.address | 0.0.0.0:9026  | デフォルト (\$1\$1yarn.resourcemanager.hostname\$1:8088) | 
| yarn.web-proxy.address | emrDeterminedIP:9046  | デフォルト (値なし)  | 
| yarn.resourcemanager.hostname | 0.0.0.0 (デフォルト)  | emrDeterminedIP | 

**注記**  
*emrDeterminedIP* は、Amazon EMR で生成される IP アドレスです。

## [ユーザー]
<a name="emr-3x-users"></a>

AMI バージョンを使用する場合、ユーザー `hadoop` がすべてのプロセスを実行し、すべてのファイルを保有します。Amazon EMR リリースバージョン 4.0.0 以降では、ユーザーはアプリケーションレベルやコンポーネントレベルで存在します。

## インストールシーケンス、インストールされているアーティファクト、およびログファイルの場所
<a name="emr-3x-directories"></a>

AMI バージョンを使用する場合、アプリケーションのアーティファクトおよびその設定ディレクトリは、`/home/hadoop/application` ディレクトリにインストールされます。たとえば、Hive をインストールした場合は、ディレクトリは `/home/hadoop/hive` でした。Amazon EMR リリース 4.0.0 以降では、アプリケーションのアーティファクトは `/usr/lib/application` ディレクトリにインストールされます。AMI バージョンを使用する場合、ログファイルはさまざまな場所にあります。次の表に、場所を示します。


**Amazon S3 のログの場所の変更**  

| デーモンまたはアプリケーション | ディレクトリの場所 | 
| --- | --- | 
| instance-state | node/instance-id/instance-state/ | 
| hadoop-hdfs-namenode | daemons/instance-id/hadoop-hadoop-namenode.log | 
| hadoop-hdfs-datanode | daemons/instance-id/hadoop-hadoop-datanode.log | 
| hadoop-yarn (ResourceManager) | daemons/instance-id/yarn-hadoop-resourcemanager | 
| hadoop-yarn (プロキシサーバー) | daemons/instance-id/yarn-hadoop-proxyserver | 
| mapred-historyserver | daemons/instance-id/ | 
| httpfs | daemons/instance-id/httpfs.log | 
| hive-server | node/instance-id/hive-server/hive-server.log | 
| hive-metastore | node/instance-id/apps/hive.log | 
| Hive CLI | node/instance-id/apps/hive.log | 
| YARN アプリケーションのユーザーログおよびコンテナログ | task-attempts/ | 
| Mahout | 該当なし | 
| Pig | 該当なし | 
| spark-historyserver | 該当なし | 
| MapReduce ジョブ履歴ファイル | jobs/ | 

## Command runner
<a name="emr-differences-commandrunner"></a>

AMI バージョンを使用する場合、`/home/hadoop/contrib/streaming/hadoop-streaming.jar` のような多くのスクリプトまたはプログラムが、シェルのログインパス環境に置かれていないため、command-runner.jar または script-runner.jar などの jar ファイルを使用する際に完全パスを指定する必要があります。`command-runner.jar` が AMI に置かれるため、`script-runner.jar` を使用する場合のように完全 URI を指定する必要がなくなりました。

## レプリケーション係数
<a name="emr-3x-replication"></a>

レプリケーション係数を使用すると、Hadoop JVM をいつ起動するかを設定できます。Hadoop JVM は、タスクごとに新しく起動できます。これにより、タスクの独立性を高めることも、タスク間で JVM を共有してフレームワークのオーバーヘッドを低下させることもできます。多くの小さいファイルを処理する場合は、JVM を何回も再利用して起動のコストを分散させることに意味があります。ただし、各タスクが長時間かかる場合や大量のデータを処理する場合は、後続のタスクのためにすべてのメモリが確実に解放されるように、JVM を再利用しない選択もできます。AMI のバージョンを使用する場合は、`configure-hadoop` ブートストラップアクションを使用してレプリケーション係数をカスタマイズすることができ、`mapred.job.reuse.jvm.num.tasks` プロパティを設定します。

次の例は、無限の JVM 再利用の JVM 再利用係数の設定を示しています。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge \
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\
Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]
```

# Amazon EMR の以前の AMI バージョンの Hive アプリケーションの仕様。
<a name="emr-3x-hive"></a>

## ログファイル
<a name="emr-3x-hive-log-files"></a>

Amazon EMR AMI バージョン 2.x および 3.x を使用する場合、Hive ログは `/mnt/var/log/apps/` に保存されます。Hive の複数のバージョンを同時にサポートするために、ログファイル名は次の表に示すように、実行する Hive のバージョンによって異なります。


| Hive のバージョン | ログファイル名 | 
| --- | --- | 
| 0.13.1 | hive.log  このバージョンからは、Amazon EMR で、バージョニング無効のファイル名 `hive.log` が使用されます。マイナーバージョンは、メジャーバージョンと同じログの場所を共有します。  | 
| 0.11.0 | hive\$10110.log   0.11.0.1 のような Hive 0.11.0 のマイナーバージョンでは、ログファイルの場所は Hive 0.11.0 と同じです。  | 
| 0.8.1 | hive\$1081.log   Hive 0.8.1.1 のような Hive 0.8.1 のマイナーバージョンでは、ログファイルの場所は Hive 0.8.1 と同じです。  | 
| 0.7.1 | hive\$107\$11.log   Hive 0.7.1.3 や Hive 0.7.1.4 といった Hive 0.7.1 のマイナーバージョンでは、ログファイルの場所は Hive 0.7.1 と同じです。   | 
| 0.7 | hive\$107.log | 
| 0.5 | hive\$105.log | 
| 0.4 | hive.log | 

## 分割入力機能
<a name="emr-3x-hive-split-input"></a>

0.13.1 より前の Hive バージョン (Amazon EMR AMI バージョン 3.11.0 より前) を使用して分割入力機能を実装するには、次のようにします。

```
hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveCombineSplitsInputFormat;
hive> set mapred.min.split.size=100000000;
```

この機能は Hive 0.13.1 で廃止されました。Amazon EMR AMI バージョン 3.11.0 で同じ分割入力形式の機能を得るには、以下を使用します。

```
set hive.hadoop.supports.splittable.combineinputformat=true;
```

## Thrift サービスポート
<a name="emr-3x-hive-thrift-service"></a>

 Thrift は RPC のフレームワークで、これによって定義されるコンパクトなバイナリシリアライズ形式を使用して、後から分析に使用するためのデータ構造を維持します。通常、Hive は次のポートで稼働するようにサーバーを設定します。


| Hive のバージョン | ポート番号 | 
| --- | --- | 
| Hive 0.13.1 | 10000 | 
| Hive 0.11.0 | 10004 | 
| Hive 0.8.1 | 10003 | 
| Hive 0.7.1 | 10002 | 
| Hive 0.7 | 10001 | 
| Hive 0.5 | 10000 | 

 thrift サービスの詳細については、[http://wiki.apache.org/thrift/](http://wiki.apache.org/thrift/) を参照してください。

## Hive を使用してパーティションを復元する
<a name="emr-3x-hive-recover-partition"></a>

Amazon EMR の Hive クエリ言語には、Amazon S3 内にあるテーブルデータからテーブルのパーティションを復元するステートメントが含まれています。次の例でこれを示します。

```
CREATE EXTERNAL TABLE (json string) raw_impression 
PARTITIONED BY (dt string) 
LOCATION 's3://elastic-mapreduce/samples/hive-ads/tables/impressions';
ALTER TABLE logs RECOVER PARTITIONS;
```

パーティションのディレクトリおよびデータは、テーブル定義で指定された場所に格納し、名前は Hive の表記規則に従って、`dt=2009-01-01` のように記述する必要があります。

**注記**  
Hive 0.13.1 以降では、この機能は `msck repair table` を使用してネイティブにサポートされるため、`recover partitions` はサポートされません。詳細については、「[https://cwiki.apache.org/confluence/display/Hive/LanguageManual\$1DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL)」を参照してください。

## Hive 変数をスクリプトに渡す
<a name="emr-3x-hive-pass-variable"></a>

を使用して Hive ステップに変数を渡すには AWS CLI、次のコマンドを入力します。*myKey* を EC2 キーペアの名前に置き換え、*amzn-s3-demo-bucket* をバケット名に置き換えます。この例で、`SAMPLE` は、先頭に `-d` スイッチが付いた変数の値です。この変数は Hive スクリプトで `${SAMPLE}` のように定義されます。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.9 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 \
--steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,\
Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,-d,\
INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://amzn-s3-demo-bucket/hive-ads/output/,\
-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]
```

## 外部メタストアの場所を指定する
<a name="emr-3x-hive-external-metastore"></a>

次の手順では、Hive メタストアの場所として設定したデフォルト値を上書きし、新しく設定したメタストアの場所を使用してクラスターを起動する方法を示します。

**EMR クラスターの外にメタストアを作成するには**

1. Amazon RDS を使用して MySQL または Aurora データベースを作成します。

   Amazon RDS データベースの作成方法については、「[Amazon RDS の開始方法](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.html)」を参照してください。

1. データベースと **ElasticMapReduce-Master** セキュリティグループの間の JDBC 接続が許可されるようにセキュリティグループを変更します。

   アクセス用のセキュリティグループの変更方法については、「*Amazon RDS ユーザーガイド*」の「[Amazon RDS セキュリティグループ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)」を参照してください。

1. JDBC 設定値は、`hive-site.xml` に格納されています。

   1. 以下を含む `hive-site.xml` 設定ファイルを作成します。

      ```
      <configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mariadb://hostname:3306/hive?createDatabaseIfNotExist=true</value>
          <description>JDBC connect string for a JDBC metastore</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hive</value>
          <description>Username to use against metastore database</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>password</value>
          <description>Password to use against metastore database</description>
        </property>
      </configuration>
      ```

      *hostname* は、データベースを実行する Amazon RDS インスタンスの DNS アドレスです。*username* と *password* は、データベースの認証情報です。MySQL データベースインスタンスおよび Aurora データベースインスタンスへの接続の詳細については、「*Amazon RDS ユーザーガイド*」の「[MySQL データベースエンジンを実行している DB インスタンスへの接続](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html)」および「[Athena DB クラスターへの接続](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connecting.html)」を参照してください。

      JDBC ドライバーは Amazon EMR によってインストールされます。
**注記**  
値のプロパティには、スペースや改行を含めることはできません。すべてを 1 行にする必要があります。

   1. Amazon S3 上の `hive-site.xml` などの場所に `s3://amzn-s3-demo-bucket/hive-site.xml` ファイルを保存します。

1. クラスターを作成し、カスタマイズされた `hive-site.xml` ファイルの Amazon S3 の場所を指定します。

   次のコマンド例は、これを行う AWS CLI コマンドを示しています。
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.10 \
   --applications Name=Hue Name=Hive Name=Pig \
   --use-default-roles --ec2-attributes KeyName=myKey \
   --instance-type m3.xlarge --instance-count 3 \
   --bootstrap-actions Name="Install Hive Site Configuration",\
   Path="s3://region.elasticmapreduce/libs/hive/hive-script",\
   Args=["--base-path","s3://elasticmapreduce/libs/hive","--install-hive-site",\
   "--hive-site=s3://amzn-s3-demo-bucket/hive-site.xml","--hive-versions","latest"]
   ```

## JDBC を使用して Hive に接続する
<a name="emr-3x-hive-jdbc"></a>

JDBC を介して Hive に接続するには、JDBC ドライバをダウンロードして、SQL クライアントをインストールする必要があります。以下の例は、SQL Workbench/J を使用して、JDBC を使用している Hive に接続する方法を示しています。

**JDBC ドライバをダウンロードするには**

1. アクセスする Hive のバージョンに対応しているドライバをダウンロードし、展開します。Hive バージョンは、Amazon EMR クラスターを作成するときに選択した AMI に応じて異なります。
   + Hive 0.13.1 JDBC ドライバー: [https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC\$11.0.4.1004.zip](https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC_1.0.4.1004.zip)
   + Hive 0.11.0 JDBC ドライバー: [https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0)
   + Hive 0.8.1 JDBC ドライバー: [https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1)

1. SQL Workbench/J をインストールします。詳細については、SQL Workbench/J ユーザーズマニュアルの「[Installing and starting SQL Workbench/J](http://www.sql-workbench.net/manual/install.html)」を参照してください。

1. クラスターマスターノードへの SSH トンネルを作成します。Hive のバージョンによって、接続するポートが異なります。Linux `ssh` ユーザーの場合は以下の表、Windows ユーザーの場合は PuTTY コマンドのコマンドの例が提供されています。  
**Linux SSH コマンド**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-hive.html)  
**Windows PuTTY のトンネルの設定**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. SQL Workbench に JDBC ドライバを追加します。

   1. [**Select Connection Profile**] (接続プロファイルの選択) ダイアログボックスで [**Manage Drivers**] (ドライバーの管理) を選択します。

   1. [**Create a new entry**] (新しいエントリーの作成) (空白のページ) アイコンを選択します。

   1. **名前**フィールドに、**Hive JDBC** と入力します。

   1. [**Library**] で [**Select the JAR file(s)**] アイコンをクリックします。

   1. 次の表に示すように JAR ファイルを選択します。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-hive.html)

   1. [**Please select one driver**] (ドライバーを 1 つ選択してください) ダイアログボックスで次の表に従ってドライバを選択し、[**OK**] をクリックします。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. **[接続プロファイルの選択]** ダイアログボックスに戻ったら、**[ドライバー]** フィールドが **[Hive JDBC]** に設定されていることを確認し、次の表に従って **[URL]** フィールドに JDBC 接続文字列を入力します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-hive.html)

   クラスターが AMI バージョン 3.3.1 以降を使用している場合は、**[Select Connection Profile]** (接続プロファイルの選択) ダイアログボックスの **[ユーザー名]** フィールドに **hadoop** と入力します。

# Amazon EMR の以前の AMI バージョンの HBase アプリケーションの仕様
<a name="emr-3x-hbase"></a>

## サポートされる HBase バージョン
<a name="emr-3x-hbase-versions"></a>


| HBase バージョン | AMI のバージョン | AWS CLI 設定パラメータ | HBase バージョンの詳細 | 
| --- | --- | --- | --- | 
| [0.94.18](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.1.0 以降 |  `--ami-version 3.1` `--ami-version 3.2` `--ami-version 3.3` `--applications Name=HBase`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-hbase.html)  | 
| [0.94.7](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.0-3.0.4 |  `--ami-version 3.0` `--applications Name=HBase`  | 
| [0.92](https://svn.apache.org/repos/asf/hbase/branches/0.92/CHANGES.txt) | 2.2 以降 |  `--ami-version 2.2 or later` `--applications Name=HBase`  | 

## HBase クラスターの前提条件
<a name="emr-3x-hbase-prerequisites"></a>

Amazon EMR AMI バージョン 2.x および 3.x を使用して作成されたクラスターは、HBase の次の要件を満たす必要があります。
+ ( AWS CLI オプション) — コマンドラインを使用して HBase を操作するには、最新バージョンの をダウンロードしてインストールします AWS CLI。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[Installing the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」を参照してください。
+ 2 つ以上のインスタンス (オプション) – クラスターのマスターノードでは HBase マスターサーバーと Zookeeper、タスクノードでは HBase リージョンサーバーが実行されます。最大のパフォーマンスを確保するには、HBase クラスターが 2 つ以上の EC2 インスタンスを実行する必要がありますが、評価目的の場合は HBase を単一ノードで実行できます。
+ 長時間稼働クラスター - HBase は長時間稼働クラスター上でのみ実行されます。デフォルトでは、CLI および Amazon EMR コンソールは長時間稼働クラスターを作成します。
+ Amazon EC2 キーペア (推奨) - マスターノードと接続して HBase シェルコマンドを実行するために Secure Shell (SSH) ネットワークプロトコルを使用するには、クラスターを作成するときに Amazon EC2 キーペアを使用する必要があります。
+ 正しい AMI バージョンおよび Hadoop バージョン - HBase クラスターは、現在 Hadoop 20.205 以降でのみサポートされています。
+ Ganglia (オプション) - HBase パフォーマンスメトリクスをモニタリングするには、クラスターの作成時に Ganglia をインストールします。
+ ログ用 Amazon S3 バケット (オプション) - HBase 用ログはマスターノードで使用できます。これらのログを Amazon S3 にコピーするには、クラスターの作成時にログファイルを受け取るための S3 バケットを指定します。

## HBase を使用するクラスターの作成
<a name="emr-3x-hbase-launch"></a>

次の表に、コンソールを使用し、Amazon EMR AMI リリースバージョンを使用して HBase を使用するクラスターを作成する際に利用できるオプションを示します。


| フィールド | Action | 
| --- | --- | 
| Restore from backup | HBase クラスターに、Amazon S3 に保存されているデータを事前にロードするかどうかを指定します。 | 
| Backup location | Amazon S3 で復元するバックアップがある場所の URI を指定します。 | 
| Backup version | [Backup Location] で指定した場所にある、使用するバックアップのバージョン名を指定します（オプション）。このフィールドに何も指定しない場合は、[バックアップの場所] で指定した場所にある最新のバックアップが、Amazon EMR によって新しい HBase クラスターに設定されます。 | 
| Schedule Regular Backups | 自動増分バックアップをスケジュールするかどうかを指定します。最初は完全バックアップによって、以降の差分バックアップのベースラインとなるバックアップが作成されます。 | 
| Consistent backup | バックアップの整合性を確保するかどうかを指定します。バックアップの整合性とは、バックアップ処理の初期段階であるノード同期中に、書き込みオペレーションを一時停止することです。つまり、一時停止された書き込みオペレーションはすべてキューに置かれ、同期が完了したら再開されます。 | 
| Backup frequency | スケジュールされたバックアップの頻度 (日/時間/分単位)。 | 
| Backup location | バックアップが保存される Amazon S3 の URI。差分バックアップの正確性を確保するために、バックアップは、HBase クラスターごとにそれぞれ異なる場所に格納する必要があります。 | 
| Backup start time | 最初のバックアップの時間を指定します。これを now に設定した場合、クラスターが実行されると直ちに最初のバックアップが行われます。または、日付と時刻を [ISO 形式](http://www.w3.org/TR/NOTE-datetime)で入力します。たとえば、2012-06-15T20:00Z を入力すると、2012 年 6 月 15 日午後 8 時 (UTC) に設定されます。 | 

次の AWS CLI コマンド例では、HBase およびその他のアプリケーションでクラスターを起動します。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
               --applications Name=Hue Name=Hive Name=Pig Name=HBase \
               --use-default-roles --ec2-attributes KeyName=myKey \
               --instance-type c1.xlarge --instance-count 3 --termination-protected
```

 Hive クラスターと HBase クラスターの間の接続が確立されたら（前述の手順を参照）、Hive に外部テーブルを作成することで、HBase クラスターに格納されているデータにアクセスできます。

次の例では、Hive プロンプトからの実行時に、`inputTable` という HBase テーブルに格納されているデータを参照する外部テーブルを作成しています。その後、Hive ステートメントで `inputTable` を参照し、HBase クラスターに格納されているデータに対してクエリを実行したり、そのデータを変更したりできます。

**注記**  
以下の例では、AMI 2.3.3 で **protobuf-java-2.4.0a.jar** を使用しますが、サンプルをご自分のバージョンに合わせてお使いください。お持ちの Protocol Buffers の JAR のバージョンをチェックするには、Hive コマンドプロンプトでコマンドを実行します: `! ls /home/hadoop/lib;`。

```
add jar lib/emr-metrics-1.0.jar ;
               add jar lib/protobuf-java-2.4.0a.jar ;
               
               set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com ;
               
               create external table inputTable (key string, value string)
                    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
                     with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1")
                     tblproperties ("hbase.table.name" = "t1");
               
               select count(*) from inputTable ;
```

## HBase 設定のカスタマイズ
<a name="emr-3x-hbase-customize"></a>

デフォルトの設定はほとんどのアプリケーションで動作しますが、HBase 設定を変更する柔軟性も確保されています。これを行うには、次の 2 つのブートストラップアクションスクリプトのいずれかを実行します。
+ **configure-hbase-daemons** - master、regionserver、および zookeeper の各デーモンのプロパティを設定します。これらのプロパティには、HBase デーモンの開始時に Java Virtual Machine（JVM）に渡すヒープサイズおよびオプションが含まれます。これらのプロパティは、ブートストラップアクションの引数として設定します。このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbase-user-env.sh 設定ファイルが変更されます。
+ **configure-hbase** - HBase マスターのバインド先ポート、CLI クライアントがアクションを再試行する最大回数など、HBase サイト固有の設定を指定します。これらはブートストラップアクションの引数として 1 つずつ設定するか、Amazon S3 で XML 設定ファイルの場所を指定します。このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbase-site.xml 設定ファイルが変更されます。

**注記**  
これらのスクリプトを実行できるのは、他のブートストラップアクションの場合と同様、クラスターの作成時のみです。このスクリプトを使用して、現在実行中の HBase クラスターの設定を変更することはできません。

**configure-hbase** または **configure-hbase-daemons** ブートストラップアクションを実行すると、指定した値によってデフォルトの値が上書きされます。明示的に設定しなかった値には、デフォルト値が設定されます。

これらのブートストラップアクションでの HBase の設定操作は、Amazon EMR でブートストラップアクションを使用して Hadoop 設定と Hadoop デーモンのプロパティを設定するのと似ています。異なるのは、HBase にはプロセスごとのメモリオプションがないという点です。メモリオプションは、`--daemon-opts` 引数を使用して設定されます。*daemon* は、設定するデーモンの名前に置き換えてください。

### HBase デーモンを設定する
<a name="emr-3x-hbase-configure-daemons"></a>

 Amazon EMR には、HBase デーモンの設定変更に使用できるブートストラップアクション `s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons` が用意されています。*region* は、HBase クラスターを起動するリージョンです。

を使用して HBase デーモンを設定するには AWS CLI、クラスターを起動するときに`configure-hbase-daemons`ブートストラップアクションを追加して、1 つ以上の HBase デーモンを設定します。以下のプロパティを設定できます。


| プロパティ | 説明 | 
| --- | --- | 
| hbase-master-opts | JVM によるマスターデーモンの実行方法をコントロールするオプション。設定されている場合は、これらによってデフォルトの HBASE\$1MASTER\$1OPTS 変数が上書きされます。 | 
| regionserver-opts | JVM によるリージョンサーバーデーモンの実行方法をコントロールするオプション。設定されている場合は、これらによってデフォルトの HBASE\$1REGIONSERVER\$1OPTS 変数が上書きされます。 | 
| zookeeper-opts | JVM による zookeeper デーモンの実行方法をコントロールするオプション。設定されている場合は、これらによってデフォルトの HBASE\$1ZOOKEEPER\$1OPTS 変数が上書きされます。 | 

これらのオプションの詳細については、HBase ドキュメントの「[hbase-env.sh](https://hbase.apache.org/book.html#hbase.env.sh)」を参照してください。

`zookeeper-opts` および `hbase-master-opts` の値を設定するためのブートストラップアクションを次の例に示します。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-daemons,\
Args=["--hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-master-opts=-Xmx2048m","--hbase-regionserver-opts=-Xmx4096m"]
```

### HBase サイト設定を指定する
<a name="emr-3x-hbase-configure-site"></a>

Amazon EMR には、HBase の設定変更に使用できるブートストラップアクション `s3://elasticmapreduce/bootstrap-actions/configure-hbase` が用意されています。設定値はブートストラップアクションで引数として 1 つずつ設定するか、Amazon S3 で XML 設定ファイルの場所を指定します。少しの設定を行えばいいだけの場合は、設定値を 1 つずつ設定する方が便利です。追加する変更が多数ある場合、または再利用できるよう設定を保存したい場合は、XML ファイルを使用して設定することをお勧めします。

**注記**  
Amazon S3 バケット名には、`s3://region.elasticmapreduce/bootstrap-actions/configure-hbase` のようにリージョンプレフィックスを付けることができます。*region* は、HBase クラスターを起動するリージョンです。

このブートストラップアクションでは、HBase クラスターの `/home/hadoop/conf/hbase-site.xml` 設定ファイルが変更されます。ブートストラップアクションは、HBase クラスターの起動時にのみ実行できます。

設定可能な HBase サイト設定の詳細については、HBase のドキュメントの「[Default configuration](http://hbase.apache.org/book.html#config.files)」を参照してください。

HBase クラスターの起動時に `configure-hbase` ブートストラップアクションを設定し、`hbase-site.xml` で変更する値を指定します。

**を使用して個々の HBase サイト設定を指定するには AWS CLI**
+ `hbase.hregion.max.filesize` 設定を変更するには、次のコマンドを入力し、*myKey* を Amazon EC2 キーペアの名前に置き換えます。
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

  ```
  aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
  --applications Name=Hue Name=Hive Name=Pig Name=HBase \
  --use-default-roles --ec2-attributes KeyName=myKey \
  --instance-type c1.xlarge --instance-count 3 --termination-protected \
  --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","hbase.hregion.max.filesize=52428800"]
  ```

**を使用して XML ファイルで HBase サイト設定を指定するには AWS CLI**

1. カスタムバージョンの `hbase-site.xml` を作成します。カスタムファイルは有効な XML である必要があります。エラーが発生する可能性を少なくするには、`/home/hadoop/conf/hbase-site.xml` の Amazon EMR HBase マスターノードにある `hbase-site.xml` のデフォルトのコピーから開始し、そのファイルのコピーを編集します。ファイルをゼロから作成する必要はありません。新しいファイルに新しい名前を付けるか、`hbase-site.xml` をそのまま使用します。

1. カスタム `hbase-site.xml` ファイルを Amazon S3 バケットにアップロードします。クラスターを起動する AWS アカウントが ファイルにアクセスできるように、アクセス許可を設定する必要があります。クラスターを起動する AWS アカウントも Amazon S3 バケットを所有している場合は、 にアクセスできます。

1. HBase クラスターの起動時に **configure-hbase** ブートストラップアクションを設定し、カスタム `hbase-site.xml` ファイルの場所を含めます。次の例では、HBase サイト設定の値を、`s3://amzn-s3-demo-bucket/my-hbase-site.xml` で指定した値に設定しています。次のコマンドを入力し、*myKey* を EC2 キーペアの名前に置き換え、*amzn-s3-demo-bucket* を Amazon S3 バケットの名前に置き換えます。
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
           --applications Name=Hue Name=Hive Name=Pig Name=HBase \
           --use-default-roles --ec2-attributes KeyName=myKey \
           --instance-type c1.xlarge --instance-count 3 --termination-protected \
           --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["--site-config-file","s3://amzn-s3-demo-bucket/config.xml"]
   ```

   複数のオプションを指定して HBase オペレーションをカスタマイズする場合は、次の例に示すように、各キーと値のペアの前に `-s` オプションスイッチを追加する必要があります。

   ```
          --bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","zookeeper.session.timeout=60000"]
   ```

プロキシセットと SSH 接続が開いている場合、HBase UI を表示するには、ブラウザウィンドウで http://*master-public-dns-name*:60010/master-status を開きます。*master-public-dns-name* は、HBase クラスターのマスターノードのパブリック DNS アドレスです。

現在の HBase ログを表示するには、SSH を使用してマスターノードに接続し、`mnt/var/log/hbase` ディレクトリに移動します。これらのログは、クラスターの起動時に Amazon S3 へのログを有効にしない限り、クラスター終了後に使用できなくなります。

## HBase をバックアップおよび復元する
<a name="emr-3x-hbase-backup-restore"></a>

Amazon EMR には、手動または自動化されたスケジュールに従って、HBase データを Amazon S3 にバックアップする機能が用意されています。完全バックアップと増分バックアップの両方を実行できます。HBase データのバックアップバージョンを作成した後、そのバージョンを HBase クラスターに復元できます。復元は現在実行中の HBase クラスターに対して行うことができます。また、バックアップされたデータが設定されたクラスターを新しく作成することもできます。

バックアップ処理中も、HBase は書き込みコマンドを実行し続けます。これにより、バックアップ中もクラスターを使用し続けることができますが、バックアップ中のデータと、並行して実行されている書き込みオペレーションとの間に不整合が発生するリスクがあります。発生する可能性がある不整合について理解するには、HBase では、書き込みオペレーションがクラスター内のノード全体に分散されるという点を考慮する必要があります。特定のノードがポーリングされた後、書き込みオペレーションが発生すると、そのデータはバックアップアーカイブに保存されません。HBase クラスターへの以前の書き込み（既にポーリングされたノードに送信された書き込み）がバックアップアーカイブに含まれない可能性がある一方で、それより後の書き込み（ポーリングされる前のノードに送信された書き込み）がアーカイブに保存されることもあります。

整合性のあるバックアップが必要な場合は、バックアップ処理の初期段階であるノード同期中に、HBase への書き込みを一時停止する必要があります。これを行うには、バックアップをリクエストするときに `--consistent` パラメータを指定します。このパラメータが指定されている場合は、この期間中の書き込みがキューに入れられ、同期が完了するとすぐに実行されます。定期バックアップをスケジュールすることもできます。これにより徐々に発生する不整合が解決されます。あるバックアップパスで逃したデータが、次のパスでバックアップされるからです。

HBase データをバックアップするときに、クラスターごとにさまざまなバックアップディレクトリを指定する必要があります。これを簡単に行うには、クラスター識別子を、バックアップディレクトリに指定されたパスの一部として使用します。例えば、`s3://amzn-s3-demo-bucket/backups/j-3AEXXXXXX16F2`。これにより、以降のすべての差分バックアップが適切な HBase クラスターを参照するようになります。

不要になった古いバックアップファイルを削除する準備ができたら、まず HBase データの完全バックアップを行うことをお勧めします。これによりすべてのデータが保存されます。このデータは、その後の差分バックアップのベースとして使用できます。完全バックアップが完了した後、バックアップの場所に移動し、古いバックアップファイルを手動で削除できます。

HBase バックアップ処理では、一時ファイルの格納スペースに特定の制限がある S3DistCp をコピー操作に使用します。

### コンソールを使用して HBase をバックアップおよび復元する
<a name="emr-3x-hbase-backup-restore-console"></a>

コンソールを使用すると、新しいクラスターを起動して、以前の HBase バックアップのデータを入力することができます。また、HBase データの定期差分バックアップをスケジュールすることもできます。追加のバックアップおよび復元機能、たとえば、既に実行中のクラスターにデータを復元したり、手動バックアップを行ったり、自動完全バックアップをスケジュールしたりする機能は、CLI で使用できます。

**コンソールを使用して、アーカイブされた HBase データを新しいクラスターに指定するには**

1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから **[古いコンソールに切り替え]** を選択します。古いコンソールに切り替えたときの動作の詳細については、「[Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)」を参照してください。

1. **[クラスターを作成]** を選択します。

1. [**Software Configuration**] セクションの [**Additional Applications**] で、[**HBase**] と [**Configure and add**] を選択します。

1. [**Add Application**] ダイアログボックスで、[**Restore From Backup**] チェックボックスをオンにします。

1. [**Backup Location**] (バックアップの場所) で、新しい HBase クラスターにロードするバックアップの場所を指定します。ここには、Amazon S3 URL を `s3://amzn-s3-demo-bucket/backups/` という形式で指定する必要があります。

1. [**Backup Version**] では、値を設定して、ロードするバックアップバージョンの名前を指定するオプションがあります。**[バックアップバージョン]** に値を設定しない場合は、指定した場所にある最新のバックアップが Amazon EMR によってロードされます。

1. [**Add**] を選択して、必要に応じたオプションによるクラスターの作成に進みます。

**コンソールを使用して HBase データの自動バックアップをスケジュールするには**

1. [**Software Configuration**] セクションの [**Additional Applications**] で、[**HBase**] と [**Configure and add**] を選択します。

1. [**Schedule Regular Backups**] を選択します。

1. バックアップの整合性を確保するかどうかを指定します。バックアップの整合性とは、バックアップ処理の初期段階であるノード同期中に、書き込みオペレーションを一時停止することです。つまり、一時停止された書き込みオペレーションはすべてキューに置かれ、同期が完了したら再開されます。

1. バックアップの頻度を設定します。それには、[**Backup Frequency**] に数値を入力し、[**Days**]、[**Hours**]、または [**Minutes**] を選択します。最初に実行される自動バックアップは完全バックアップです。その後、指定したスケジュールに基づき、差分バックアップが Amazon EMR によって保存されます。

1. バックアップを保存する Amazon S3 内の場所を指定します。差分バックアップが適切に判断されるように、HBase クラスターをそれぞれ Amazon S3 内の別々の場所にバックアップする必要があります。

1.  [**Backup Start Time**] で、バックアップを最初に行うタイミングの値を指定します。これを `now` に設定した場合、クラスターが実行されると直ちに最初のバックアップが行われます。または、日付と時刻を [ISO 形式](http://www.w3.org/TR/NOTE-datetime)で入力します。たとえば、「2013-09-26T20:00Z」と入力すると、開始時間が 2013 年 9 月 26 日午後 8 時 (UTC) に設定されます。

1. **[Add]** (追加) を選択します。

1. 必要に応じて他のオプションを指定し、クラスターの作成を進めます。

## CloudWatch を使用して HBase をモニタリングする
<a name="emr-3x-hbase-cloudwatch"></a>

Amazon EMR は、HBase バックアップのモニタリングに使用できる 3 つのメトリクスを CloudWatch に報告します。これらのメトリクスは CloudWatch に 5 分間隔でプッシュされ、料金はかかりません。


| メトリクス | 説明 | 
| --- | --- | 
| HBaseBackupFailed |  前回のバックアップに失敗したかどうか。デフォルトでは 0 に設定されており、前回のバックアップが失敗した場合は 1 に更新されます。このメトリクスは、HBase クラスターについてのみ報告されます。 ユースケース: HBase バックアップを監視する 単位: *Count*  | 
| HBaseMostRecentBackupDuration |  前回のバックアップが完了するのにかかった時間。このメトリクスは、前回完了したバックアップが成功したか失敗したかに関係なく設定され、このメトリクスは、バックアップの進行中に、バックアップが開始してからの分数を返します。このメトリクスは、HBase クラスターについてのみ報告されます。 ユースケース: HBase バックアップを監視する 単位: *Minutes*  | 
| HBaseTimeSinceLastSuccessfulBackup |  クラスターで前回成功した HBase バックアップが開始してから経過した分数。このメトリクスは、HBase クラスターについてのみ報告されます。 ユースケース: HBase バックアップを監視する 単位: *Minutes*  | 

## HBase の Ganglia の設定
<a name="emr-3x-ganglia-for-hbase"></a>

**configure-hbase-for-ganglia** ブートストラップアクションを使用して、HBase に対して Ganglia を設定できます。このブートストラップアクションは、Ganglia にメトリクスを発行するように HBase を設定します。

クラスターを起動するときは、HBase と Ganglia を設定する必要があります。Ganglia のレポートを、実行中のクラスターに追加することはできません。

Ganglia では、`/mnt/var/log/ganglia/rrds` のサーバーにもログファイルを格納します。ログファイルが Amazon S3 バケットに保存されるようにクラスターを設定した場合は、Ganglia ログファイルも同様に同じ場所に保存されます。

HBase の Ganglia でクラスターを起動するには、次の例に示すように、[**configure-hbase-for-ganglia**] ブートストラップアクションを使用します。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-for-ganglia
```

Ganglia を設定してクラスターを起動した後は、マスターノードで実行中のグラフィカルインターフェイスを使用して、Ganglia のグラフやレポートにアクセスできます。

# Amazon EMR の以前の AMI バージョンの Pig アプリケーションの仕様。
<a name="emr-3x-pig"></a>

## サポートされている Pig のバージョン
<a name="emr-3x-Pig_SupportedVersions"></a>

クラスターに追加できる Pig のバージョンは、使用している Amazon EMR AMI のバージョンと Hadoop のバージョンによって決まります。次の表に、各バージョンの Pig と互換性のある AMI のバージョンおよび Hadoop のバージョンを示します。パフォーマンスの向上と新機能のメリットを受けられるように、最新バージョンの Pig を使用することをお勧めします。

API を使用して Pig をインストールする場合、[RunJobFlow](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow.html) のコール中に Pig をクラスターにロードするステップに `--pig-versions` を引数として指定しない限り、デフォルトバージョンが使用されます。


| Pig のバージョン | AMI のバージョン | 設定パラメータ | Pig のバージョンの詳細 | 
| --- | --- | --- | --- | 
| <a name="pig12"></a>0.12.0[リリースノート](http://pig.apache.org/releases.html#14+October%2C+2013%3A+release+0.12.0+available)[ドキュメント](http://pig.apache.org/docs/r0.12.0/) | 3.1.0 以降 |  `--ami-version 3.1` `--ami-version 3.2` `--ami-version 3.3`  |  以下のサポートが追加されています。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-3x-pig.html)  | 
| <a name="pig1111"></a>0.11.1.1[リリースノート](http://pig.apache.org/releases.html#1+April%2C+2013%3A+release+0.11.1+available)[ドキュメント](http://pig.apache.org/docs/r0.11.1/) | 2.2 以降 |  `--pig-versions 0.11.1.1` `--ami-version 2.2`  |  Amazon S3 に入力が存在する場合、PigStorage で LOAD コマンドのパフォーマンスを向上させます。  | 
| <a name="pig0111"></a>0.11.1[リリースノート](http://pig.apache.org/releases.html#1+April%2C+2013%3A+release+0.11.1+available)[ドキュメント](http://pig.apache.org/docs/r0.11.1/) | 2.2 以降 |  `--pig-versions 0.11.1` `--ami-version 2.2`  |  JDK 7、Hadoop 2、Groovy ユーザー定義関数、SchemaTuple 最適化、新しい演算子などのサポートを追加します。詳細については、「[Pig 0.11.1 change log](http://svn.apache.org/repos/asf/pig/tags/release-0.11.1/CHANGES.txt)」を参照してください。  | 
| <a name="pig0922"></a>0.9.2.2[リリースノート](http://pig.apache.org/releases.html#22+January%2C+2012%3A+release+0.9.2+available)[ドキュメント](http://pig.apache.org/docs/r0.9.2/index.html) | 2.2 以降 |  `--pig-versions 0.9.2.2` `--ami-version 2.2`  |  Hadoop 1.0.3 のサポートを追加。  | 
| <a name="pig0921"></a>0.9.2.1[リリースノート](http://pig.apache.org/releases.html#22+January%2C+2012%3A+release+0.9.2+available)[ドキュメント](http://pig.apache.org/docs/r0.9.2/index.html) | 2.2 以降 |  `--pig-versions 0.9.2.1` `--ami-version 2.2`  |  MapR のサポートを追加。  | 
| <a name="pig092"></a>0.9.2[リリースノート](http://pig.apache.org/releases.html#22+January%2C+2012%3A+release+0.9.2+available)[ドキュメント](http://pig.apache.org/docs/r0.9.2/index.html) | 2.2 以降 |  `--pig-versions 0.9.2` `--ami-version 2.2`  |  いくつかのパフォーマンス向上とバグ修正が行われています。Pig 0.9.2 での変更に関する情報については、「[Pig 0.9.2 change log](http://svn.apache.org/repos/asf/pig/tags/release-0.9.2/CHANGES.txt)」を参照してください。  | 
| <a name="pig091"></a>0.9.1[リリースノート](http://pig.apache.org/releases.html#5+October%2C+2011%3A+release+0.9.1+available)[ドキュメント](http://pig.apache.org/docs/r0.9.1/) | 2.0 |  `--pig-versions 0.9.1` `--ami-version 2.0`  | 
| <a name="pig06"></a>0.6[リリースノート](http://pig.apache.org/releases.html#1+March%2C+2010%3A+release+0.6.0+available) | 1.0 |  `--pig-versions 0.6` `--ami-version 1.0`  | 
| <a name="pig03"></a>0.3[リリースノート](http://pig.apache.org/releases.html#25+June%2C+2009%3A+release+0.3.0+available) | 1.0 |  `--pig-versions 0.3` `--ami-version 1.0`  | 

## Pig のバージョンの詳細
<a name="emr-pig-version-details"></a>

Amazon EMR では、追加の Amazon EMR パッチが適用される場合がある特定の Pig リリースをサポートします。Amazon EMR クラスターで実行する Pig のバージョンを設定することができます。これを行う方法については、「[Apache Pig](emr-pig.md)」を参照してください。以下のセクションでは、Pig の各バージョン、および Amazon EMR にロードされたバージョンに適用されるパッチについて説明します。

### Pig 向けパッチ
<a name="EnvironmentConfig_AMIPigPatches"></a>

このセクションでは、Amazon EMR で使用可能な Pig バージョンに適用されるカスタムパッチについて説明します。

#### Pig 0.11.1.1 向けパッチ
<a name="EnvironmentConfig_AMIPigPatches-0.11.1.1"></a>

Amazon EMR バージョンの Pig 0.11.1.1 はメンテナンスリリースであり、Amazon S3 に入力が存在する場合、PigStorage で LOAD コマンドのパフォーマンスを向上させます。

#### Pig 0.11.1 向けパッチ
<a name="EnvironmentConfig_AMIPigPatches-0.11.1"></a>

Amazon EMR バージョンの Pig 0.11.1 には、Apache Software Foundation が提供するすべての更新と Pig バージョン 0.9.2.2 からの累積 Amazon EMR パッチが含まれます。ただし、Pig 0.11.1 には Amazon EMR 固有の新しいパッチはありません。

#### Pig 0.9.2 向けパッチ
<a name="EnvironmentConfig_AMIPigPatches-0.9.2"></a>

Apache Pig 0.9.2 は、Pig のメンテナンスリリースです。Amazon EMR チームは今までに、Amazon EMR バージョンの Pig 0.9.2 に以下のパッチを適用しています。


| パッチ | 説明 | 
| --- | --- | 
|  PIG-1429  |   Pig に Boolean データタイプを第 1 クラスデータタイプとして追加。詳細については、[https://issues.apache.org/jira/browse/PIG-1429](https://issues.apache.org/jira/browse/PIG-1429) を参照してください。  **ステータス:** コミット済み   **Fixed in Apache Pig Version: **0.10   | 
|  PIG-1824  |   Jython UDF でインポートモジュールをサポート。詳細については、[https://issues.apache.org/jira/browse/PIG-1824](https://issues.apache.org/jira/browse/PIG-1824) を参照してください。  **ステータス:** コミット済み   **Fixed in Apache Pig Version: **0.10   | 
|  PIG-2010  |   登録済みの JAR を分散キャッシュにバンドル。詳細については、[https://issues.apache.org/jira/browse/PIG-2010](https://issues.apache.org/jira/browse/PIG-2010) を参照してください。  **ステータス:** コミット済み   **Fixed in Apache Pig Version: **0.11   | 
|  PIG-2456  |   ユーザーがデフォルトの Pig ステートメントを指定できる \$1/.pigbootup ファイルを追加。詳細については、[https://issues.apache.org/jira/browse/PIG-2456](https://issues.apache.org/jira/browse/PIG-2456) を参照してください。  **ステータス:** コミット済み   **Fixed in Apache Pig Version: **0.11   | 
|  PIG-2623  |   Amazon S3 パスを使用した UDF の登録をサポート。詳細については、[https://issues.apache.org/jira/browse/PIG-2623](https://issues.apache.org/jira/browse/PIG-2623) を参照してください。  **ステータス:** コミット済み   **修正対象の Apache Pig のバージョン: **0.10、0.11   | 

#### Pig 0.9.1 向けパッチ
<a name="EnvironmentConfig_AMIPigPatches-0.9.1"></a>

Amazon EMR チームは今までに、Amazon EMR バージョンの Pig 0.9.1 に以下のパッチを適用しています。


| パッチ | 説明 | 
| --- | --- | 
|  dfs での JAR ファイルと Pig スクリプトのサポート  |   HDFS、Amazon S3 などの分散ファイルシステムに格納されているスクリプトの実行および JAR ファイルの登録をサポートする機能追加。詳細については、[https://issues.apache.org/jira/browse/PIG-1505](https://issues.apache.org/jira/browse/PIG-1505) を参照してください。  **ステータス:** コミット済み   **Fixed in Apache Pig Version: **0.8.0   | 
|  Pig における複数のファイルシステムのサポート  |   あるファイルシステムから読み取ったデータを別のファイルシステムに書き込む Pig スクリプトに対するサポートを追加。詳細については、[https://issues.apache.org/jira/browse/PIG-1564](https://issues.apache.org/jira/browse/PIG-1564) を参照してください。  **ステータス:** 未コミット   **修正対象の Apache Pig バージョン:** n/a   | 
|  Piggybank の datetime および string UDF の追加  |   カスタムの Pig スクリプトをサポートするために datetime および string UDF を追加。詳細については、[https://issues.apache.org/jira/browse/PIG-1565](https://issues.apache.org/jira/browse/PIG-1565) を参照してください。  **ステータス:** 未コミット   **修正対象の Apache Pig バージョン:** n/a   | 

## インタラクティブおよびバッチ Pig クラスター
<a name="emr-3x-pig-interactive-batch"></a>

Amazon EMR では、Pig のスクリプトを次の 2 つのモードで実行できます。
+ インタラクティブ
+ バッチ

コンソールまたは を使用して長時間実行されるクラスターを起動する場合 AWS CLI、 **ssh**を Hadoop ユーザーとしてマスターノードに接続し、Grunt シェルを使用して Pig スクリプトをインタラクティブに開発および実行できます。Pig をインタラクティブに使用すると、バッチモードよりも簡単に Pig スクリプトを変更できます。インタラクティブモードで Pig スクリプトの変更が完了したら、そのスクリプトを Amazon S3 にアップロードし、バッチモードを使用してスクリプトを本稼働環境で実行できます。また、実行中のクラスターで Pig コマンドをインタラクティブに送信し、必要に応じてデータの分析や変換を行うことができます。

バッチモードでは、Pig スクリプトを Amazon S3 にアップロードし、クラスターにステップとして作業を送信します。Pig ステップは、長時間稼働クラスターまたは一時的なクラスターに送信できます。

# Amazon EMR の以前の AMI バージョンの Spark アプリケーションの仕様。
<a name="emr-3x-spark"></a>

## Spark のインタラクティブな使用またはバッチモードでの使用
<a name="emr-3x-spark-interactive-batch"></a>

Amazon EMR では、Spark アプリケーションを次の 2 つのモードで実行できます。
+ インタラクティブ
+ バッチ

コンソールまたは を使用して長時間実行されるクラスターを起動する場合 AWS CLI、SSH を使用して Hadoop ユーザーとしてマスターノードに接続し、Spark シェルを使用して Spark アプリケーションをインタラクティブに開発および実行できます。Spark をインタラクティブに使用すると、Spark アプリケーションのプロトタイプ作成やテストをバッチ環境より簡単に行うことができます。Spark アプリケーションをインタラクティブモードで正常に変更したら、そのアプリケーションの JAR または Python プログラムを、Amazon S3 上のクラスターのマスターノードに対してローカルにあるファイルシステムに配置できます。その後、アプリケーションをバッチワークフローとして送信できます。

バッチモードで、Spark スクリプトを Amazon S3 またはローカルマスターノードファイルシステムにアップロードした後、作業をクラスターにステップとして送信します。Spark ステップは、長時間稼働クラスターまたは一時的なクラスターに送信できます。

## Spark がインストールされたクラスターの作成
<a name="emr-3x-spark-install"></a>

**コンソールを使用し、Spark がインストールされた状態でクラスターを起動するには**

1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから **[古いコンソールに切り替え]** を選択します。古いコンソールに切り替えたときの動作の詳細については、「[Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)」を参照してください。

1. **[クラスターを作成]** を選択します。

1. [**Software Configuration**] (ソフトウェア設定) で、必要な AMI リリースバージョンを選択します。

1.  [**Applications to be installed**] で、リストから [**Spark**] を選択してから、[**Configure and add**] を選択します。

1. 必要に応じて引数を追加して Spark 設定を変更します。詳細については、「[Spark の設定](#emr-3x-spark-configure)」を参照してください。**[Add]** (追加) を選択します。

1.  必要に応じて他のオプションを選択し、[**Create cluster (クラスターの作成)**] を選択します。

次の例は、Java を使用した Spark のあるクラスターを作成する方法を示します。

```
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
SupportedProductConfig sparkConfig = new SupportedProductConfig()
			.withName("Spark");

RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("Spark Cluster")
			.withAmiVersion("3.11.0")
			.withNewSupportedProducts(sparkConfig)
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyName")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge")
			);			
RunJobFlowResult result = emr.runJobFlow(request);
```

## Spark の設定
<a name="emr-3x-spark-configure"></a>

[Github の awslabs/emr-bootstrap-actions/spark リポジトリ](https://github.com/awslabs/emr-bootstrap-actions/tree/master/spark)にあるブートストラップアクションを実行してクラスターを作成するときに、Spark を設定します。ブートストラップアクションが受け入れる引数については、そのリポジトリの [README](https://github.com/aws-samples/emr-bootstrap-actions/blob/master/spark/examples/README.md) を参照してください。ブートストラップアクションは `$SPARK_CONF_DIR/spark-defaults.conf` ファイルのプロパティを設定します。設定の詳細については、Spark ドキュメントで、Spark 設定トピックを参照してください。次の URL の「latest」を、インストールする Spark のバージョン番号 (たとえば、`2.2.0` [http://spark.apache.org/docs/latest/configuration.html](http://spark.apache.org/docs/latest/configuration.html)) に置き換えることができます。

各アプリケーションの送信時に、Spark を動的に設定することもできます。`spark` 設定ファイルを使用して、エグゼキュータのリソース割り当てを自動的に最大化する設定が使用できます。詳細については、「[Spark のデフォルト設定の上書き](#emr-3x-spark-dynamic-configuration)」を参照してください。

### Spark のデフォルト設定の変更
<a name="emr-3x-spark-default-settings"></a>

次の例は、 AWS CLIで `spark.executor.memory` を 2G に設定してクラスターを作成する方法を示します。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "Spark cluster" --ami-version 3.11.0 \
--applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 --use-default-roles
```

### Spark への作業の送信
<a name="emr-3x-spark-submit-work"></a>

作業をクラスターに送信するには、ステップを使用して EMR クラスターで `spark-submit` スクリプトを実行します。`addJobFlowSteps`AmazonElasticMapReduceClient[ で ](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/AmazonElasticMapReduceClient.html) メソッドを使用してステップを追加します。

```
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
StepFactory stepFactory = new StepFactory();
AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
req.withJobFlowId("j-1K48XXXXXXHCB");

List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
		
StepConfig sparkStep = new StepConfig()
	.withName("Spark Step")
	.withActionOnFailure("CONTINUE")
	.withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10"));

stepConfigs.add(sparkStep);
req.withSteps(stepConfigs);
AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
```

### Spark のデフォルト設定の上書き
<a name="emr-3x-spark-dynamic-configuration"></a>

Spark のデフォルト設定値をアプリケーションごとに上書きすることができます。これは、ステップを使用してアプリケーションを送信するとき (原則としてオプションが `spark-submit` に渡されます) に行うことができます。たとえば、`spark.executor.memory` を変更することで、実行プログラムのプロセスに割り当てられたメモリを変更することができます。次のような引数を含む `--executor-memory` スイッチを指定できます。

```
/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
```

同様に、`--executor-cores` と `--driver-memory` を調整できます。ステップでは、次の引数をステップに指定できます。

```
--executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
```

さらに、`--conf` オプションを使用して、組み込みスイッチがない設定を調整することもできます。調整可能な他の設定の詳細については、Apache Spark ドキュメントの「[Spark プロパティの動的なロード](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties)」を参照してください。

# Amazon EMR の以前の AMI バージョンと S3DistCp ユーティリティの相違点
<a name="emr-3x-s3distcp"></a>

## Amazon EMR でサポートされる S3DistCp バージョン
<a name="emr-s3distcp-verisons"></a>

次の S3DistCp バージョンは、Amazon EMR AMI リリースでサポートされています。S3DistCp 1.0.7 以降のバージョンは、直接クラスターで見つかります。最新の機能を使用するには、`/home/hadoop/lib` の JAR を使用します。


| バージョン | 説明 | リリース日 | 
| --- | --- | --- | 
| 1.0.8 | --appendToLastFile、--requirePreviousManifest、および --storageClass オプションを追加します。 | 2014 年 1 月 3 日 | 
| 1.0.7 | --s3ServerSideEncryption オプションの追加。 | 2013 年 5 月 2 日 | 
| 1.0.6 | --s3Endpoint オプションの追加。 | 2012 年 8 月 6 日 | 
| 1.0.5 | 実行する S3DistCp バージョンを指定する機能の強化。 | 2012 年 6 月 27 日 | 
| 1.0.4 | --deleteOnSuccess オプションの強化。 | 2012 年 6 月 19 日 | 
| 1.0.3 | --numberFiles および --startingIndex オプションの追加。 | 2012 年 6 月 12 日 | 
| 1.0.2 | グループ使用時のファイル名前付け機能の強化。 | 2012 年 6 月 6 日 | 
| 1.0.1 | S3DistCp の初回リリース。 | 2012 年 1 月 19 日 | 

## S3DistCp コピーステップをクラスターに追加する
<a name="emr-3x-s3distcp-add-step"></a>

実行中のクラスターに S3DistCp コピーステップを追加するには、次のコマンドを入力し、*j-3GYXXXXXX9IOK* をクラスター ID に置き換えて、*amzn-s3-demo-bucket* を Amazon S3 バケット名に置き換えます。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr add-steps --cluster-id j-3GYXXXXXX9IOK \
--steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emr-s3distcp-1.0.jar,\
Args=["--s3Endpoint,s3-eu-west-1.amazonaws.com",\
"--src,s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/",\
"--dest,hdfs:///output",\
"--srcPattern,.*[a-zA-Z,]+"]
```

**Example Amazon CloudFront ログを HDFS にロードする**  
この例では、実行中のクラスターにステップを追加して、Amazon CloudFront ログを HDFS にロードします。このプロセスでは、圧縮フォーマットを Gzip (CloudFront のデフォルト) から LZO に変更します。LZO を使用して圧縮されたデータは解凍時に複数のマップに分割できるので便利です。Gzip のように、圧縮が完了するのを待つ必要はありません。これにより、Amazon EMR を使用してデータを分析するときのパフォーマンスが改善します。また、この例では、`--groupBy` オプションで指定されている正規表現を使用して、指定された時間のすべてのログを 1 つのファイルにまとめることによっても、パフォーマンスが向上しています。Amazon EMR クラスターは、小さな Gzip 圧縮ファイルを多数処理するよりも、大きな数個の LZO 圧縮ファイルを処理する方が効率的に動作します。LZO ファイルを分割するには、それらのインデックスを作成して、hadoop-lzo サードパーティー製のライブラリを使用する必要があります。  
Amazon CloudFront ログを HDFS にロードするには、次のコマンドを入力し、*j-3GYXXXXXX9IOK* をクラスター ID に置き換え、*amzn-s3-demo-bucket* を Amazon S3 バケット名に置き換えます。  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr add-steps --cluster-id j-3GYXXXXXX9IOK \
--steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emr-s3distcp-1.0.jar,\
Args=["--src,s3://amzn-s3-demo-bucket/cf","--dest,hdfs:///local",\
"--groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*",\
"--targetSize,128",
"--outputCodec,lzo","--deleteOnSuccess"]
```
前述の例が、次の CloudFront ログファイルで実行された場合を考えてみてください。  

```
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-01.HLUS3JKx.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-01.I9CNAZrg.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-02.YRRwERSA.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-02.dshVLXFE.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-02.LpLfuShd.gz
```
 S3DistCp は、ファイルを、次の 2 つのファイルにコピー、統合、および圧縮します。ファイル名は、正規表現で一致した内容によって決まります。  

```
hdfs:///local/2012-02-23-01.lzo
hdfs:///local/2012-02-23-02.lzo
```