

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# S3 (s3-dist-cp) DistCp
<a name="UsingEMR_s3distcp"></a>

Apache DistCp es una herramienta de código abierto que puede utilizar para copiar grandes cantidades de datos. *S3 DistCp* es similar a Amazon S3 DistCp, pero está optimizado para funcionar con él AWS, especialmente. El comando para S3 DistCp en Amazon EMR versión 4.0 y versiones posteriores es `s3-dist-cp` el que se agrega como un paso en un clúster o en la línea de comandos. Con S3DistCp, puede copiar de manera eficiente grandes cantidades de datos de Amazon S3 a HDFS, donde se pueden procesar en los siguientes pasos de su clúster de Amazon EMR. También puede usar S3 DistCp para copiar datos entre buckets de Amazon S3 o desde HDFS a Amazon S3. S3 DistCp es más escalable y eficiente para copiar en paralelo grandes cantidades de objetos entre depósitos y AWS cuentas.

Para ver comandos específicos que demuestran la flexibilidad de S3DistCP en situaciones reales, consulte [Siete consejos para usar S3 DistCp](https://aws.amazon.com/blogs/big-data/seven-tips-for-using-s3distcp-on-amazon-emr-to-move-data-efficiently-between-hdfs-and-amazon-s3/) en el blog Big Data. AWS 

Por ejemplo DistCp, S3 DistCp suele MapReduce copiar de forma distribuida. Comparte las tareas de copia, tratamiento de errores, recuperación y elaboración de informes entre varios servidores. Para obtener más información sobre el proyecto de código DistCp abierto Apache, consulte la [DistCpguía](http://hadoop.apache.org/docs/stable/hadoop-distcp/DistCp.html) en la documentación de Apache Hadoop.

Si S3 no puede copiar algunos o todos los archivos especificados, DistCp se produce un error en el paso del clúster y devuelve un código de error distinto de cero. Si esto ocurre, S3 DistCp no limpia los archivos parcialmente copiados. 

**importante**  
S3 DistCp no admite nombres de bucket de Amazon S3 que contengan el carácter de subrayado.  
S3 no DistCp admite la concatenación de archivos de Parquet. Úselo en su lugar. PySpark Para obtener más información, consulte [Concatenación de archivos Parquet en Amazon EMR](https://aws.amazon.com/premiumsupport/knowledge-center/emr-concatenate-parquet-files/).  
Para evitar errores de copia al utilizar S3DistCP para copiar un único archivo (en lugar de un directorio) de S3 a HDFS, utilice Amazon EMR versión 5.33.0 o posterior, o Amazon EMR versión 6.3.0 o posterior.

## DistCp Opciones de S3
<a name="UsingEMR_s3distcp.options"></a>

Aunque es similar a DistCp, S3 DistCp admite un conjunto diferente de opciones para cambiar la forma en que copia y comprime los datos.

Al llamar a S3DistCp, puede especificar las opciones que se describen en la siguiente tabla. Las opciones se añaden al paso utilizando la lista de argumentos. En la siguiente tabla se muestran ejemplos de los DistCp argumentos de S3. 


| Opción  | Description (Descripción)  | Obligatorio  | 
| --- | --- | --- | 
| ‑‑src=LOCATION  |  Ubicación de los datos que copiar. Puede ser una ubicación de HDFS o Amazon S3.  Ejemplo: `‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node`   S3 DistCp no admite nombres de bucket de Amazon S3 que contengan el carácter de subrayado.   | Sí  | 
| ‑‑dest=LOCATION  |  Destino de los datos. Puede ser una ubicación de HDFS o Amazon S3.  Ejemplo: `‑‑dest=hdfs:///output`   S3 DistCp no admite nombres de bucket de Amazon S3 que contengan el carácter de subrayado.   | Sí  | 
| ‑‑srcPattern=PATTERN  |  Una [expresión regular](http://en.wikipedia.org/wiki/Regular_expression) que filtra la operación de copia para un subconjunto de los datos de `‑‑src`. Si no se especifica `‑‑srcPattern` ni `‑‑groupBy`, todos los datos de `‑‑src` se copian en `‑‑dest`.  Si el argumento de expresión regular contiene caracteres especiales, como un asterisco (\$1), la expresión regular o toda la cadena `‑‑args` debe estar escrita entre comillas (').  Ejemplo: `‑‑srcPattern=.*daemons.*-hadoop-.*`   | No  | 
| ‑‑groupBy=PATTERN  |  [Expresión regular](http://en.wikipedia.org/wiki/Regular_expression) que hace que S3 DistCp concatene los archivos que coinciden con la expresión. Por ejemplo, podría utilizar esta opción para combinar todos los archivos de registro escritos en una hora en un solo archivo. El nombre de archivo concatenado es el valor asignado por la expresión regular para la agrupación.  Los paréntesis indican cómo deberían agruparse los archivos, todos los elementos que coincidan con la instrucción parentética se combinan en un único archivo de salida. Si la expresión regular no incluye una sentencia entre paréntesis, el clúster falla en el DistCp paso S3 y devuelve un error.  Si el argumento de expresión regular contiene caracteres especiales, como un asterisco (\$1), la expresión regular o toda la cadena `‑‑args` debe estar escrita entre comillas (').  Cuando se especifica `‑‑groupBy`, solo se copian los archivos que coinciden con el patrón especificado. No tiene que especificar `‑‑groupBy` y `‑‑srcPattern` al mismo tiempo.  Ejemplo: `‑‑groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*`  | No  | 
| ‑‑targetSize=SIZE  |  El tamaño, en mebibytes (MiB), de los archivos a crear en función de la opción `‑‑groupBy`. Este valor debe ser un número entero. Cuando `‑‑targetSize` se establece, S3 DistCp intenta igualar este tamaño; el tamaño real de los archivos copiados puede ser mayor o menor que este valor. Los trabajos se agregan en función del tamaño del archivo de datos, por lo que es posible que el tamaño del archivo de destino coincida con el tamaño del archivo de datos de origen.  Si los archivos concatenados por `‑‑groupBy` son mayores que el valor de `‑‑targetSize`, se dividen en archivos parciales y se nombran de forma secuencial con un valor numérico junto al final. Por ejemplo, un archivo concatenado en `myfile.gz` se desglosaría en partes como: `myfile0.gz`, `myfile1.gz`, etc.  Ejemplo: `‑‑targetSize=2`   | No  | 
| ‑‑appendToLastFile |  Especifica el comportamiento de S3 DistCp al copiar archivos de Amazon S3 a HDFS que ya están presentes. Añade los nuevos datos de archivo a archivos existentes. Si utiliza `‑‑appendToLastFile` con `‑‑groupBy`, se añaden nuevos datos a los archivos que coincidirán con los mismos grupos. Esta opción también respeta el comportamiento `‑‑targetSize` cuando se utiliza con `‑‑groupBy.`  | No  | 
| ‑‑outputCodec=CODEC  |  Especifica el códec de compresión que utilizar para los archivos copiados. Esto puede tomar los valores: `gzip`, `gz`, `lzo`, `snappy` o bien `none`. Puede utilizar esta opción, por ejemplo, para convertir archivos de entrada comprimidos con Gzip en archivos de salida con compresión LZO o para descomprimir los archivos como parte de la operación de copia. Si elige un códec de salida, el nombre de archivo se agregará con la extensión adecuada (por ejemplo, `gz` y `gzip`, la extensión es `.gz`). Si no especifica un valor para `‑‑outputCodec`, los archivos se copian sin cambios en su compresión.  Ejemplo: `‑‑outputCodec=lzo`   | No  | 
| ‑‑s3ServerSideEncryption  |  Garantiza que los datos de destino se transfieran mediante SSL y se cifren automáticamente en Amazon S3 mediante una clave AWS del lado del servicio. Al recuperar datos mediante S3DistCp, los objetos se descifran automáticamente. Si intenta copiar un objeto sin cifrar en un bucket de Amazon S3 con cifrado requerido, la operación produce un error. Para obtener más información, consulte el tema relacionado con el [uso del cifrado de datos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).  Ejemplo: `‑‑s3ServerSideEncryption`   | No  | 
| ‑‑deleteOnSuccess  |  Si la operación de copia se realiza correctamente, esta opción hace DistCp que S3 elimine los archivos copiados de la ubicación de origen. Esto resulta útil si está copiando archivos de salida, como archivos de registro, desde una ubicación a otra como una tarea programada y no desea copiar los mismos archivos dos veces.  Ejemplo: `‑‑deleteOnSuccess`   | No  | 
| ‑‑disableMultipartUpload  |  Deshabilita el uso de la carga multiparte.  Ejemplo: `‑‑disableMultipartUpload`   | No  | 
| ‑‑multipartUploadChunkSize=SIZE  |  El tamaño, en MiB, de cada parte de una carga multiparte de Amazon S3. S3 DistCp utiliza la carga multiparte cuando copia datos de un tamaño superior al`multipartUploadChunkSize`. Para mejorar el rendimiento de los trabajos, puede aumentar el tamaño de cada parte. El tamaño predeterminado es 128 MB.  Ejemplo: `‑‑multipartUploadChunkSize=1000`   | No  | 
| ‑‑numberFiles  |  Añade archivos de salida con los números secuenciales. El recuento comienza en 0 a menos que se especifique un valor diferente mediante `‑‑startingIndex`.  Ejemplo: `‑‑numberFiles`   | No  | 
| ‑‑startingIndex=INDEX  |  Utilizado con `‑‑numberFiles` para especificar el primer número de la secuencia.  Ejemplo: `‑‑startingIndex=1`   | No  | 
| ‑‑outputManifest=FILENAME  |  Crea un archivo de texto, comprimido con Gzip, que contiene una lista de todos los archivos copiados por S3. DistCp  Ejemplo: `‑‑outputManifest=manifest-1.gz`   | No  | 
| ‑‑previousManifest=PATH  |  Lee un archivo de manifiesto que se creó durante una llamada anterior a S3 DistCp con la `‑‑outputManifest` marca. Cuando el `‑‑previousManifest` indicador está activado, S3 DistCp excluye de la operación de copia los archivos que figuran en el manifiesto. Si se especifica `‑‑outputManifest` junto con los archivos `‑‑previousManifest`, incluidos en el manifiesto anterior también aparecen en el nuevo archivo de manifiesto, aunque los archivos no se copiarán.  Ejemplo: `‑‑previousManifest=/usr/bin/manifest-1.gz`   | No  | 
| ‑‑requirePreviousManifest |  Requiere un manifiesto previo creado durante una llamada anterior a S3DistCp. Si se define como false, no se genera ningún error cuando no se especifica un manifiesto anterior. El valor predeterminado es true.  | No  | 
| ‑‑copyFromManifest  |  Invierte el comportamiento de `‑‑previousManifest` hacer que S3 DistCp utilice el archivo de manifiesto especificado como una lista de archivos para copiar, en lugar de una lista de archivos para excluirlos de la copia.  Ejemplo: `‑‑copyFromManifest ‑‑previousManifest=/usr/bin/manifest-1.gz`   | No  | 
| ‑‑s3Endpoint=ENDPOINT |  Especifica el punto de conexión de Amazon S3 que utilizar a la hora de cargar un archivo. Esta opción establece el punto de enlace para el origen y el destino. Si no se define, el punto de enlace predeterminado es `s3.amazonaws.com`. Para ver una lista de los puntos de conexión de Amazon S3, consulte [Regiones y puntos de conexión](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).  Ejemplo: `‑‑s3Endpoint=s3.eu-west-1.amazonaws.com`   | No  | 
| ‑‑storageClass=CLASS |  La clase de almacenamiento que utilizar cuando el destino es Amazon S3. Los valores válidos son STANDARD y REDUCED\$1REDUNDANCY. Si no se especifica esta opción, S3 DistCp intentará conservar la clase de almacenamiento. Ejemplo: `‑‑storageClass=STANDARD`  | No  | 
| ‑‑srcPrefixesFile=PATH |  un archivo de texto en Amazon S3 (s3://), HDFS (hdfs:///) o sistema de archivos local (file:/) que contiene una lista de prefijos `src`, un prefijo por línea.  Si `srcPrefixesFile` se proporciona, S3 no DistCp mostrará la ruta src. En lugar de ello, genera una lista de origen como resultado combinado de enumerar todos los prefijos especificados en este archivo. La ruta relativa en comparación con la ruta src, en lugar de estos prefijos, se utilizará para generar las rutas de destino. Si también se especifica `srcPattern`, se aplicará a los resultados de lista combinada de los prefijos de origen para filtrar aún más la entrada. Si se utiliza `copyFromManifest`, lo objetos en el manifiesto se copiarán y no se tendrá en cuenta `srcPrefixesFile`. Ejemplo: `‑‑srcPrefixesFile=PATH`  | No  | 

Además de las opciones anteriores, S3 DistCp implementa la [interfaz Tool](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/util/Tool.html), lo que significa que admite las opciones genéricas. 

## Añadir S3 DistCp como un paso de un clúster
<a name="UsingEMR_s3distcp.step"></a>

Para llamar a S3, DistCp agréguelo como un paso en su clúster. Los pasos se pueden añadir a un clúster en el momento de su lanzamiento o a un clúster en ejecución mediante la consola, la CLI o la API. En los siguientes ejemplos, se muestra cómo añadir un DistCp paso de S3 a un clúster en ejecución. Para obtener más información sobre cómo agregar pasos a un clúster, consulte [Enviar trabajo a un clúster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html) en la *Guía de administración de Amazon EMR*.

**Para añadir un DistCp paso S3 a un clúster en ejecución mediante el AWS CLI**

Para obtener más información sobre el uso de los comandos de Amazon EMR en AWS CLI, consulte la Referencia de [AWS CLI comandos](https://docs.aws.amazon.com/cli/latest/reference/emr).
+ Para añadir un paso a un clúster que llame a S3DistCp, pase los parámetros que especifican cómo S3 DistCp debe realizar la operación de copia como argumentos. 

  El siguiente ejemplo copia registros de daemon desde Amazon S3 a `hdfs:///output`. En el comando siguiente:
  + `‑‑cluster-id` especifica el clúster
  + `Jar`es la ubicación del archivo DistCp JAR de S3. Para ver un ejemplo de cómo ejecutar un comando en un clúster mediante command-runner.jar, consulte [Envío de un paso JAR personalizado para ejecutar un script o un comando](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html#emr-commandrunner-examples).
  + `Args`es una lista separada por comas de los pares nombre-valor de las opciones que se van a pasar a S3. DistCp Para ver una lista completa de las opciones disponibles, consulte [DistCp Opciones de S3](#UsingEMR_s3distcp.options). 

  Para añadir un paso de DistCp copia de S3 a un clúster en ejecución, coloque lo siguiente en un archivo JSON guardado en Amazon S3 o en su sistema de archivos local, como en este `myStep.json` ejemplo. *j-3GYXXXXXX9IOK*Sustitúyalo por tu ID de clúster y *amzn-s3-demo-bucket* sustitúyelo por el nombre de tu bucket de Amazon S3.

  ```
  [
      {
          "Name":"S3DistCp step",
          "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*[a-zA-Z,]+"],
          "ActionOnFailure":"CONTINUE",
          "Type":"CUSTOM_JAR",
          "Jar":"command-runner.jar"        
      }
  ]
  ```

  ```
  aws emr add-steps ‑‑cluster-id j-3GYXXXXXX9IOK ‑‑steps file://./myStep.json
  ```

**Example Copie los archivos de registro desde Amazon S3 a HDFS**  
Este ejemplo también muestra cómo copiar archivos de registro almacenados en un bucket de Amazon S3 en HDFS agregando un paso a un clúster en ejecución. En este ejemplo, la opción `‑‑srcPattern` se utiliza para limitar los datos copiados en los registros del daemon.   
Para copiar los archivos de registro desde Amazon S3 en HDFS mediante la opción `‑‑srcPattern`, coloque lo siguiente en un archivo JSON guardado en Amazon S3 o en el sistema de archivos local, como `myStep.json` en este ejemplo. *j-3GYXXXXXX9IOK*Sustitúyalo por tu ID de clúster y *amzn-s3-demo-bucket* sustitúyelo por el nombre de tu bucket de Amazon S3.  

```
[
    {
        "Name":"S3DistCp step",
        "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"],
        "ActionOnFailure":"CONTINUE",
        "Type":"CUSTOM_JAR",
        "Jar":"command-runner.jar"        
    }
]
```