

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

# 批量处理小文件以提高到 Snowball Edge 的数据传输性能
<a name="batching-small-files"></a>

因为要进行加密，每个复制操作都会产生一些开销。为了加快将小文件传输到 AWS Snowball Edge 设备的过程，您可以将它们一起批处理到一个存档中。批量处理文件时，在将它们导入到 Amazon S3 中时可以进行自动提取（如果以一个受支持的存档格式对它们进行批处理）。

通常，1 MB 或更小的文件应包含在批处理中。对您可以在一个批处理中拥有的文件数量没有硬限制，虽然我们建议您将批处理限制在约 10,000 个文件。一个批处理中的文件超过 100,000 个可能会影响您返回设备后这些文件导入 Amazon S3 的速度。我们建议每个批次的总大小不超过 100 GB。

批处理文件是一个手动过程，您管理该过程。对文件进行批处理后，使用带有选项的 AWS CLI `cp`命令将它们传输到 Snowball Edge 设备。`--metadata snowball-auto-extract=true`如果指定 `snowball-auto-extract=true`，在数据导入 Amazon S3 时，只要批处理文件的大小不超过 100 GB，将自动提取存档文件的内容。

**注意**  
任何大于 100 GB 的批次在导入到 Amazon S3 时都不会被提取。

**要批量处理小文件，请执行以下操作**

1. 决定要以哪种格式批处理您的小文件。自动提取功能支持 `TAR`、`ZIP` 和 `tar.gz` 格式。

1. 确定要批量处理那些小文件，包括它们的大小和要批量处理的文件的总数。

1. 在命令行上批处理文件，如以下示例所示。
   + 对于 Linux，您可以在用于将文件传输到设备的相同命令行中批处理这些文件。

     ```
     tar -cf - {{/Logs/April}} | aws s3 cp - {{s3://amzn-s3-demo-bucket/batch01.tar}} --metadata snowball-auto-extract=true --endpoint {{http://192.0.2.0:8080}}
     ```
**注意**  
或者，您可以使用您选择的存档实用工具将文件批量处理到一个或多个大型档案。但是，这种方法需要额外的本地存储空间来保存档案，然后再将其传输到 Snowball Edge。
   + 对于 Windows，当所有文件都位于运行该命令的同一目录中时，请使用以下示例命令对文件进行批处理：

     ```
     7z a -tzip -so "test" | aws s3 cp - {{s3://amzn-s3-demo-bucket/batch01.zip}} --metadata snowball-auto-extract=true --endpoint {{http://192.0.2.0:8080}}
     ```

     要对运行命令的不同目录中的文件进行批量处理，请使用以下示例命令：

     ```
     7z a -tzip -so "test" "{{c:\temp}}" | aws s3 cp - {{s3://amzn-s3-demo-bucket/batch01.zip}} --metadata snowball-auto-extract=true --endpoint {{http://10.x.x.x:8080}}
     ```
**注意**  
对于 Microsoft Windows 2016，tar 不可用，但您可以从 *Tar for Windows* 网站下载。  
您可以从 7ZIP 网站下载 7 ZIP。

1. 重复此步骤，直到您已存档所有要使用 Snowball Edge 传输到 Amazon S3 的小文件。

1. 将存档的文件传输到 Snowball。如果您希望自动提取数据，并且使用了前面在步骤 1 中提到的支持的存档格式之一，请使用带`--metadata snowball-auto-extract=true`选项的 AWS CLI `cp`命令。
**注意**  
如果存在非存档文件，请不要使用此命令。

创建存档文件时，提取将保持当前的数据结构。这意味着，如果您创建包含文件和文件夹的存档文件，Snowball Edge 将在提取到 Amazon S3 的过程中重新创建该文件。

存档文件将解压缩到其存储位置的同一目录中，并相应地构建文件夹结构。请记住，在复制存档文件时，设置标志 `--metadata snowball-auto-extract=true` 很重要。否则，当数据导入到 Amazon S3 时，Snowball Edge 将不会提取数据。

使用第 3 步中的示例，如果您的文件夹结构为 /Logs/April/，其中包含文件 `a.txt`、`b.txt` 和 `c.txt`。如果将此存档文件放在 /amzn-s3-demo-bucket/ 的根目录中，则提取后的数据将如下所示：

```
/amzn-s3-demo-bucket/Logs/April/a.txt
/amzn-s3-demo-bucket/Logs/April/b.txt
/amzn-s3-demo-bucket/Logs/April/c.txt
```



如果将此存档文件放在 /amzn-s3-demo-bucket/Test/ 中，则提取的内容将如下所示：

```
/amzn-s3-demo-bucket/Test/Logs/April/a.txt
/amzn-s3-demo-bucket/Test/Logs/April/b.txt
/amzn-s3-demo-bucket/Test/Logs/April/c.txt
```