

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# S3 DistCp 实用程序与早期 AMI 版本的 Amazon EMR 的区别
<a name="emr-3x-s3distcp"></a>

## 亚马逊 EMR 支持的 S3 DistCp 版本
<a name="emr-s3distcp-verisons"></a>

亚马逊 EMR AMI DistCp 版本支持以下 S3 版本。1.0.7 之后的 S3 DistCp 版本可以直接在集群上找到。使用 `/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 | 提高了指定要运行哪个 S3 DistCp 版本的能力。 | 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 | S3 的初始版本DistCp。 | 2012 年 1 月 19 日 | 

## 向集群添加 S3 DistCp 复制步骤
<a name="emr-3x-s3distcp-add-step"></a>

要向正在运行的集群添加 S3 DistCp 复制步骤，请键入以下命令，{{j-3GYXXXXXX9IOK}}替换为您的集群 ID，然后{{amzn-s3-demo-bucket}}替换为您的 Amazon S3 存储桶名称。

**注意**  
为了便于读取，包含 Linux 行继续符（\\）。它们可以通过 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 将亚马逊 CloudFront 日志加载到 HDFS**  
此示例通过向正在运行的集群添加步骤将 Amazon CloudFront 日志加载到 HDFS 中。在此过程中，压缩格式由 Gzip ( CloudFront 默认格式) 更改为 LZO。这很有用，因为使用 LZO 压缩的数据在解压缩时能拆分成多个映射，所以，与 Gzip 格式不同，您不必等到压缩完成。当您使用 Amazon EMR 分析数据时，这可以提供更好的性能。此示例还通过以下方式提高性能：使用在 `--groupBy` 选项中指定的正则表达式，将给定小时内的所有日志组合成为单个文件。Amazon EMR 集群处理几个大型 LZO 压缩文件的效率比处理许多小型 Gzip 压缩文件的效率更高。要拆分 LZO 文件，您必须为这些文件编制索引并使用 hadoop-lzo 第三方库。  
要将亚马逊 CloudFront 日志加载到 HDFS 中，请键入以下命令，{{j-3GYXXXXXX9IOK}}替换为您的集群 ID，然后{{amzn-s3-demo-bucket}}替换为您的 Amazon S3 存储桶名称。  
为了便于读取，包含 Linux 行继续符（\\）。它们可以通过 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
```
S3 将文件DistCp 复制、连接和压缩到以下两个文件中，其中文件名由正则表达式的匹配确定。  

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