

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 安全部落格](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)
+ [S3DistCp 公用程式與 Amazon EMR 舊版 AMI 的差異](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 或以程式設計方式建立叢集時，此變更最為明顯。

當您使用 AWS CLI 來使用 AMI 發行版本建立叢集時，請使用 `--ami-version`選項，例如 `--ami-version 3.11.0`。當您指定 `--ami-version` 時，Amazon EMR 4.0.0 及更高版本中推出的許多選項、功能和應用程式皆不可使用。如需詳細資訊，請參閱《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 叢集大小在整個叢集中會維持相同；您在建立叢集時會設定任務數。當您調整執行中叢集的大小，您可能會在叢集執行期間改變處理方式。因此，您可以不使用固定數量的任務，而是在叢集的生命週期期間變更任務數。有兩種組態選項，可協助您設定理想的任務數：
+ `mapred.map.tasksperslot`
+ `mapred.reduce.tasksperslot`

您可以在 `mapred-conf.xml` 檔案中設定兩種選項。當您將任務提交到叢集，任務用戶端會檢查叢集間可用的映射和縮減插槽的目前總數。然後，任務用戶端會使用以下方程式來設定任務數：
+ `mapred.map.tasks` =` mapred.map.tasksperslot` \$1 在叢集中的映射插槽
+ `mapred.reduce.tasks` =`mapred.reduce.tasksperslot` \$1 在叢集中的縮減插槽

如果尚未設定任務數量，則任務用戶端只會讀取 `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  | 
| N/A | 無 | 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 | N/A | 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 | 
| N/A | 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/` 中的包裝函式指令碼也可能會設定額外的環境變數，再參與實際 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 | N/A | 
| Pig | N/A | 
| spark-historyserver | 無 | 
| mapreduce 任務歷史記錄檔 | jobs/ | 

## 命令執行器
<a name="emr-differences-commandrunner"></a>

使用 AMI 版本時，不會將許多指令碼或程式 (例如 `/home/hadoop/contrib/streaming/hadoop-streaming.jar`) 放置在 shell 登入路徑環境，因此當您使用 JAR 檔案 (例如 command-runner.jar) 或 script-runner.jar 來執行指令碼時，會需要指定完整路徑。`command-runner.jar` 就位於 AMI，所以不需要知道完整 URI，因為就跟 `script-runner.jar` 案例一樣。

## 複寫係數
<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   Hive 0.11.0 次要版本 (例如 0.11.0.1) 會共用與 Hive 0.11.0 相同的日誌檔位置。  | 
| 0.8.1 | hive\$1081.log   Hive 0.8.1 次要版本 (例如 Hive 0.8.1.1) 會共用與 Hive 0.8.1 相同的日誌檔位置。  | 
| 0.7.1 | hive\$107\$11.log   Hive 0.7.1 次要版本 (例如 Hive 0.7.1.3 和 Hive 0.7.1.4) 會共用與 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 版本 (早於 3.11.0 的 Amazon EMR AMI 版本) 實作分割輸入功能，請使用下列步驟：

```
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 (ElasticMapReduce-Master)** 安全群組之間的 JDBC 連線。

   有關如何修改存取安全群組的詳細資訊，請參閱《Amazon RDS 使用者指南》**中的 [Amazon RDS 安全群組](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)。

1. 在 `hive-site.xml` 中設定 JDBC 設定值：

   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)和[連線至 Aurora DB 叢集](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connecting.html)。

      JDBC 驅動器由 Amazon EMR 安裝。
**注意**  
值屬性不得包含空格或歸位。它應該顯示在單一列。

   1. 將 `hive-site.xml` 檔案儲存至 Amazon S3 上的位置 (例如 `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 手冊使用者手冊中的[安裝和啟動 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/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)  
**Windows PuTTY 通道設定**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. 將 JDBC 驅動程式新增到 SQL Workbench。

   1. 在 **Select Connection Profile (選取連線設定檔)** 對話方塊中，選擇 **Manage Drivers (管理驅動程式)**。

   1. 選擇 **Create a new entry (建立新項目)** (空白頁面) 圖示。

   1. 在 **Name (名稱)**欄位中，輸入 **Hive JDBC**。

   1. 針對 **Library (程式庫)**，按一下 **Select the JAR file(s) (選取 JAR 檔案)** 圖示。

   1. 如下表所示，選取 JAR 檔案。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

   1. 在 **Please select one driver (請選擇一個驅動程式)** 對話方塊中，根據以下表格選取驅動程式，然後按一下 ** OK (確認)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. 當您返回 **Select Connection Profile (選取連線設定檔)** 對話方塊中，確認 **Driver (驅動程式)** 欄位設定為 ** Hive JDBC (Hive JDBC)**，並根據以下表格在 **URL (URL)** 欄位中提供 JDBC 連線字串。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

   如果您的叢集使用 AMI 版本 3.3.1 或更高版本，在**選取連線設定檔**對話方塊的**使用者名稱**欄位中輸入 **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/zh_tw/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 使用者指南」**中的[安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。
+ 至少有兩個執行個體 (選用) - 叢集的主節點會執行 HBase 主伺服器和 Zookeeper，而任務節點會執行 HBase 區域伺服器。如需最佳效能，HBase 叢集應該至少在兩個 EC2 執行個體上執行，但您可以在單一節點執行 HBase 以進行評估。
+ 長時間執行叢集 - HBase 只在長時間執行叢集上執行。在預設情況下，CLI 和 Amazon EMR 主控台會建立長時間執行的叢集。
+ Amazon EC2 金鑰對 (建議使用) - 若要使用 Secure Shell (SSH) 網路通訊協定來與主節點連線並執行 HBase shell 命令，您必須在建立叢集時使用 Amazon EC2 金鑰對。
+ 正確的 AMI 和 Hadoop 版本—目前只在 Hadoop 20.205 或更新版本支援 HBase 叢集。
+ 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 會將開始時間設為 UTC 2012 年 6 月 15 日下午 8 點。 | 

下列範例 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 提示時，以下範例會建立外部表格，其會參考存放在 HBase 資料表 (名為 `inputTable`) 的資料。您可以參考在 Hive 陳述式中的 `inputTable` 來查詢和修改 HBase 叢集中存放的資料。

**注意**  
以下範例會使用在 AMI 2.3.3 中的 **protobuf-java-2.4.0a.jar (protobuf-java-2.4.0a.jar)**，但您應修改範例以符合您的版本。若要檢查您所擁有的是哪些版本的通訊協定緩衝區 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 組設設定。若要這樣做，請執行以下引導操作指令碼中的其中一種：
+ **configure-hbase-daemons** - 設定主要、regionserver 和 zookeeper 常駐程式的屬性。這些屬性包括堆積大小和選項，可在 HBase 協助程式開始時傳送到 Java 虛擬機器 (JVM)。您將這些屬性設為引導操作中的引數。此引導操作會修改在 HBase 叢集上的 /home/hadoop/conf/hbase-user-env.sh 組態檔案。
+ **configure-hbase** - 設定 HBase 網站特定的設定，例如 HBase 主要伺服器應該連結到的連接埠和用戶端 CLI 用戶端應該重試動作的最大次數。您可以依次設定這些值作為引導操作中的引數，也可以在 Amazon S3 中指定 XML 組態檔案的位置。此引導操作會修改在 HBase 叢集上的 /home/hadoop/conf/hbase-site.xml 組態檔案。

**注意**  
這些指令碼 (例如其他引導操作)，只能在叢集建立時執行；您無法使用他們來變更目前執行中之 HBase 叢集的組態。

當您執行 **configure-hbase (configure-hbase)** 或 **configure-hbase-daemons (configure-hbase-daemons)** 引導操作時，您指定的值會覆寫預設值。您未明確設定的任何值會接收預設值。

使用這些引導操作的設定 HBase 與在 Amazon EMR 中使用引導操作來設定 Hadoop 以及 Hadoop 常駐程式屬性類似。差別是，HBase 沒有根據程序的記憶體選項。而是使用 `--daemon-opts` 引數來設定記憶體選項，其中*協助程式*會被要設定之協助程式的名稱所取代。

### 設定 HBase 常駐程式
<a name="emr-3x-hbase-configure-daemons"></a>

 Amazon EMR 提供的引導操作 (`s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons`)，您可以用來變更 HBase 常駐程式的組態，其中 *region* 是您要將 HBase 叢集啟動至其中的區域。

若要使用 設定 HBase 協助程式 AWS CLI，請在啟動叢集時新增`configure-hbase-daemons`引導操作，以設定一或多個 HBase 協助程式。您可以設定下列屬性：


| 屬性 | Description | 
| --- | --- | 
| 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 提供的引導操作 (`s3://elasticmapreduce/bootstrap-actions/configure-hbase`)，您可以用來變更 HBase 的組態。您可以依次設定組態值作為引導操作中的引數，也可以在 Amazon S3 中指定 XML 組態檔案的位置。如果您只需要設定幾個組態設定，則依次設定組態值非常有用。如果您有許多要進行的變更，或者，如果您想要儲存組態設定以重複使用，則使用 XML 檔案來設定它們很好用。

**注意**  
您可以使用區域字首來為 Amazon S3 儲存貯體名稱加上字首 (例如 `s3://region.elasticmapreduce/bootstrap-actions/configure-hbase`)，其中 *region* 是您要將 HBase 叢集啟動到其中的區域。

此引導操作會修改在 HBase 叢集上的 `/home/hadoop/conf/hbase-site.xml` 組態檔案。此引導操作只在 HBase 叢集啟動時執行。

如需有關您可以設定之 HBase 網站設定的詳細資訊，請參閱 HBase 文件中的[預設組態](http://hbase.apache.org/book.html#config.files)。

設定當啟動 HBase 叢集時的 `configure-hbase` 引導操作，並指定在 `hbase-site.xml` 中要變更的值。

**使用 指定個別 HBase 網站設定 AWS CLI**
+ 為變更 `hbase.hregion.max.filesize` 設定，輸入以下命令並使用 Amazon EC2 金鑰對的名稱來取代 *myKey*。
**注意**  
包含 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。若要降低引入錯誤的機率，使用位於 Amazon EMR HBase 主節點 (在 `/home/hadoop/conf/hbase-site.xml`) 的 `hbase-site.xml` 預設複本，並編輯檔案複本，而不是從頭建立一個檔案。您可以為新檔案命名新名稱，或將其保持為 `hbase-site.xml`。

1. 將自訂 `hbase-site.xml` 檔案上傳至 Amazon S3 儲存貯體。它應該已設定許可，以便啟動叢集 AWS 的帳戶可以存取 檔案。如果啟動叢集 AWS 的帳戶也擁有 Amazon S3 儲存貯體，則可以存取。

1. 當您啟動 HBase 叢集並包含自訂 `hbase-site.xml` 檔案的位置時，設定 **configure-hbase** 引導操作。以下範例將 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 連接開啟，您可以使用 http://*master-public-dns-name*:60010/master-status 開啟瀏覽器視窗來檢視 HBase UI，其中 *master-public-dns-name* 是 HBase 叢集中的主節點公有 DNS 地址。

您可以使用 SSH 來連接至主節點並導覽至 `mnt/var/log/hbase` 目錄以檢視目前 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 主控台，然後從側邊導覽選取**切換至舊主控台**。如需有關切換至舊主控台時預期情況的詳細資訊，請參閱[使用舊主控台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 選擇 **Create Cluster** (建立叢集)。

1. 在 **Software Configuration (軟體組態)** 區段中，針對 **Additional Applications (其他應用程式)**，選擇 **HBase (HBase)** 和 **Configure and add (設定和新增)**。

1. 在 **Add Application (新增應用程式)** 對話方塊中，檢查 **Restore From Backup (從備份恢復)**。

1. 對於 **Backup Location (備份位置)**，指定備份 yto 載入到新 HBase 叢集的位置。這應該是表單 `s3://amzn-s3-demo-bucket/backups/` 的 Amazon S3 URL。

1. 對於 **Backup Version (備份版本)**，您可以選擇透過設定值指定要載入的備份版本名稱。如果您不為**備份版本**設定值，Amazon EMR 會在指定的位置中載入最新的備份。

1. 選擇 **Add (新增)** 然後依需要使用其他選項繼續建立叢集。

**若要使用主控台排程 HBase 資料的自動備份**

1. 在 **Software Configuration (軟體組態)** 區段中，針對 **Additional Applications (其他應用程式)**，選擇 **HBase (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 會將開始時間設為 UTC 2013 年 9 月 26 日下午 8 點。

1. 選擇**新增**。

1. 然後依需要使用其他選項繼續建立叢集。

## 使用 CloudWatch 監控 HBase
<a name="emr-3x-hbase-cloudwatch"></a>

Amazon EMR 會向 CloudWatch 報告三個您可以使用的指標來監控 HBase 備份。系統會以 5 分鐘的間隔將這些指標推送到 CloudWatch，且無須付費。


| 指標 | Description | 
| --- | --- | 
| HBaseBackupFailed |  最後一個備份是否失敗。根據預設，這設為 0，並在先前的備份嘗試失敗時更新為 1。只會針對 HBase 叢集報告此指標。 使用案例：監控 HBase 備份 單位：*計數*  | 
| HBaseMostRecentBackupDuration |  先前完成備份所需要的時間量。不論最後一個已完成的備份成功還是失敗，都會設定此指標。正在進行備份時，此指標會傳回備份開始之後的分鐘數。只會針對 HBase 叢集報告此指標。 使用案例：監控 HBase 備份 單位：*分鐘*  | 
| HBaseTimeSinceLastSuccessfulBackup |  在叢集上開始最後一個成功 HBase 備份之後所經歷的分鐘數。只會針對 HBase 叢集報告此指標。 使用案例：監控 HBase 備份 單位：*分鐘*  | 

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

您會使用 **configure-hbase-for-ganglia (configure-hbase-for-ganglia)** 引導操作來設定 Ganglia for HBase。此引導操作會將 HBase 設定為將指標發佈至 Ganglia。

您必須在啟動叢集時設定 HBase 和 Ganglia；無法將 Ganglia 報告新增到執行中的叢集。

Ganglia 也會在 `/mnt/var/log/ganglia/rrds` 中的伺服器上存放日誌檔。如果您將叢集設定為將日誌檔案保留到 Amazon S3 儲存貯體中，那麼 Ganglia 日誌檔案也會保留在該處。

若要使用 Ganglia for HBase 啟動叢集，請如下例所示使用 **configure-hbase-for-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 版本。下表顯示 AMI 版本和 Hadoop 版本與不同版本 Pig 的相容性。我們建議您使用 Pig 的最新可用版本，以利用效能增強功能和新功能。

當您使用 API 來安裝 Pig，會使用預設版本，除非您指定 `--pig-versions` 做為呼叫 [RunJobFlow](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow.html) 期間，將 Pig 載入到叢集上的步驟引數。


| 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/zh_tw/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 變更日誌](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 變更日誌](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 支援特定 Pig 版本，這些版本可能已套用其他 Amazon EMR 修補程式。您可以設定哪些 Pig 版本要在 Amazon EMR 叢集上執行。如需如何進行該服務的詳細資訊，請參閱[Apache Pig](emr-pig.md)。下列各章節描述了在 Amazon EMR 上載入版本所套用的不同的 Pig 版本和修補程式。

### Pig 修補程式
<a name="EnvironmentConfig_AMIPigPatches"></a>

本章節描述了套用到 Amazon EMR 提供之 Pig 版本的自訂修補程式。

#### Pig 0.11.1.1 修補程式
<a name="EnvironmentConfig_AMIPigPatches-0.11.1.1"></a>

Pig 0.11.1.1 的 Amazon EMR 版本是一種維護版本，如果輸入位於 Amazon S3 中，其會使用 PigStorage 提升 LOAD 命令的效能。

#### Pig 0.11.1 修補程式
<a name="EnvironmentConfig_AMIPigPatches-0.11.1"></a>

Pig 0.11.1 的 Amazon EMR 版本包含 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 小組已將以下修補程式套用至 Pig 0.9.2 的 Amazon EMR 版本。


| 修補程式 | Description | 
| --- | --- | 
|  PIG-1429  |   將布林值資料類型新增至 Pig 做為第一個類別資料類型。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-1429](https://issues.apache.org/jira/browse/PIG-1429)。  **Status: (狀態：)** 已認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** 0.10   | 
|  PIG-1824  |   支援在 Jython UDF 中的匯入模組。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-1824](https://issues.apache.org/jira/browse/PIG-1824)。  **Status: (狀態：)** 已認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** 0.10   | 
|  PIG-2010  |   分散式快取時的套件註冊 JAR。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-2010](https://issues.apache.org/jira/browse/PIG-2010)。  **Status: (狀態：)** 已認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** 0.11   | 
|  PIG-2456  |   新增 \$1/.pigbootup 檔案，其中使用者可以指定預設 Pig 陳述式。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-2456](https://issues.apache.org/jira/browse/PIG-2456)。  **Status: (狀態：)** 已認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** 0.11   | 
|  PIG-2623  |   支援使用 Amazon S3 路徑以註冊 UDF。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-2623](https://issues.apache.org/jira/browse/PIG-2623)。  **Status: (狀態：)** 已認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** 0.10、0.11   | 

#### Pig 0.9.1 修補程式
<a name="EnvironmentConfig_AMIPigPatches-0.9.1"></a>

Amazon EMR 小組已將以下修補程式套用至 Pig 0.9.1 的 Amazon EMR 版本。


| 修補程式 | Description | 
| --- | --- | 
|  在 dfs 中支援 JAR 檔案和 Pig 指令碼  |   新增支援在 HDFS、Amazon S3 或其他分散式檔案系統中存放的執行中指令碼和註冊 JAR 檔案。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-1505](https://issues.apache.org/jira/browse/PIG-1505)。  **Status: (狀態：)** 已認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** 0.8.0   | 
|  在 Pig 中支援多個檔案系統  |   新增支援 Pig 指令碼，可讓您將資料從一個檔案系統讀取和寫入至另一個檔案系統。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-1564](https://issues.apache.org/jira/browse/PIG-1564)。  **Status: (狀態：)** 未認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** n/a   | 
|  新增 Piggybank 日期時間和字串 UDF  |   新增日期時間和字串 UDF，以支援自訂的 Pig 指令碼。如需詳細資訊，請參閱 [https://issues.apache.org/jira/browse/PIG-1565](https://issues.apache.org/jira/browse/PIG-1565)。  **Status: (狀態：)** 未認可   **Fixed in Apache Pig Version: (在 Apache Pig 版本中已修正：)** n/a   | 

## 互動式和批次 Pig 叢集
<a name="emr-3x-pig-interactive-batch"></a>

Amazon EMR 可讓您以兩種模式執行 Pig 指令碼：
+ 互動性
+ 批次

當您使用主控台或 啟動長時間執行的叢集時 AWS CLI，您可以使用 以 Hadoop 使用者身分連接至**ssh**主節點，並使用 Grunt shell 以互動方式開發和執行 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 應用程式：
+ 互動性
+ 批次

當您使用主控台或 啟動長時間執行的叢集時 AWS CLI，您可以使用 SSH 以 Hadoop 使用者身分連接至主節點，並使用 Spark shell 以互動方式開發和執行 Spark 應用程式。以互動方式使用 Spark 可讓您以較在批次環境中更輕鬆的方式來原型或測試 Spark 應用程式。在互動式模式成功修訂 Spark 應用程式後，您可以將本機檔案系統中該應用程式 JAR 或 Python 程式放在 Amazon S3 上的叢集主節點。然後，您可以批次工作流程的方式提交應用程式。

在批次模式中，您會將 Spark 指令碼上傳至 Amazon S3 或本機主節點檔案系統，然後將工作提交到叢集作為一步驟。您可以將 Spark 步驟提交到長時間執行的叢集或暫時性叢集。

## 使用安裝的 Spark 建立叢集
<a name="emr-3x-spark-install"></a>

**使用主控台並透過安裝好的 Spark 來啟動叢集**

1. 導覽至新的 Amazon EMR 主控台，然後從側邊導覽選取**切換至舊主控台**。如需有關切換至舊主控台時預期情況的詳細資訊，請參閱[使用舊主控台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 選擇 **Create Cluster** (建立叢集)。

1. 對於 **Software Configuration (軟體組態)**，選擇您需要的 AMI 發行版本。

1.  對於 **Applications to be installed (要安裝的應用程式)**，從清單中選擇 **Spark (Spark)**，然後選擇 ** Configure and add (設定和新增)**。

1. 新增引數來視需要變更 Spark 組態。如需詳細資訊，請參閱[設定 Spark](#emr-3x-spark-configure)。選擇**新增**。

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>

透過執行位於 [awslabs/emr-bootstrap-actions/spark repository on Github](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 使用您正在安裝之 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)主題。

# S3DistCp 公用程式與 Amazon EMR 舊版 AMI 的差異
<a name="emr-3x-s3distcp"></a>

## 在 Amazon EMR 中支援的 S3DistCp 版本
<a name="emr-s3distcp-verisons"></a>

在 Amazon EMR AMI 版本中支援以下 S3DistCp 版本。可直接在叢集上找到 1.0.7 之後的 S3DistCp 版本。在 `/home/hadoop/lib` 使用 JAR 以取得最新的功能。


| 版本 | Description | 發行日期 | 
| --- | --- | --- | 
| 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` 選項中指定的一般表達式來提升效能，以將指定的某小時內的所有日誌合併成單一檔案。Amazon EMR 叢集在處理一些、大型、LZO 壓縮的檔案時，會較處理許多、小型、Gzip 壓縮的檔案來得有效率。若要分割 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 會將檔案複製、串連和壓縮為以下兩個檔案，其中檔案名稱取決於一般表達式的相符程度。  

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