

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

# 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
```