S3DistCp (s3-dist-cp) - Amazon EMR

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.

S3DistCp (s3-dist-cp)

Apache DistCp es una herramienta de código abierto que puede utilizar para copiar grandes cantidades de datos. S3DistCpes similar a DistCp, pero optimizado para trabajar conAWS, en particular Amazon S3. El comando para S3DistCp en Amazon EMR versión 4.0 y posteriores ess3-dist-cp, que se añade como un paso en un clúster o en la línea de comando. Mediante S3DistCp puede copiar de forma eficaz grandes cantidades de datos desde Amazon S3 a HDFS, donde se pueden procesar en pasos posteriores en su clúster de Amazon EMR. También puede utilizar S3DistCp para copiar datos entre buckets de Amazon S3 o desde HDFS a Amazon S3. S3DistCp es más escalable y eficiente para copiar en paralelo un gran número de objetos en buckets y entre cuentas de AWS.

Para ver comandos específicos que demuestran la flexibilidad de S3DistCp en situaciones del mundo real, consulteSiete consejos para usar S3DistCpen elAWSBlog de Big Data.

Al igual que DistCp, S3DistCp usa MapReduce para realizar la copia de manera 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 abierto Apache DistCp, consulteGuía de DistCpen la documentación de Apache Hadoop.

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

importante

S3DistCp no es compatible con nombres de bucket de Amazon S3 que contengan caracteres de guión bajo.

S3DistCP no admite la concatenación para archivos Parquet. Use PySpark en su lugar. Para obtener más información, consulteConcatenación de archivos de parquet en Amazon EMR.

Opciones de S3DistCp

Si bien es similar a DistCp, S3DistCp es compatible con un conjunto diferente de opciones para cambiar la forma en la 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 tabla siguiente se muestran ejemplos de argumentos de S3DistCp.

Opción 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://DOC-EXAMPLE-BUCKET1/logs/j-3GYXXXXXX9IOJ/node

importante

S3DistCp no es compatible con nombres de bucket de Amazon S3 que contengan caracteres de guión bajo.

--dest=LOCATION

Destino de los datos. Puede ser una ubicación de HDFS o Amazon S3.

Ejemplo: --dest=hdfs:///output

importante

S3DistCp no es compatible con nombres de bucket de Amazon S3 que contengan caracteres de guión bajo.

--srcPattern=PATTERN

Una expresión regular 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 (*), la expresión regular o toda la cadena --args debe estar escrita entre comillas (').

Ejemplo: --srcPattern=.*daemons.*-hadoop-.*

No
--groupBy=PATTERN

Una expresión regular que hace que S3DistCp 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 instrucción parentética, se produce un error en el clúster en el paso S3DistCp y devuelve un error.

Si el argumento de expresión regular contiene caracteres especiales, como un asterisco (*), 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 se haya establecido --targetSize, S3DistCp intenta ajustarse a 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 S3DistCp cuando se copia a archivos desde Amazon S3 a HDFS 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 cifran automáticamente en Amazon S3 mediante unAWSclave del lado del servicio. Cuando se recuperan datos con 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, consulteUso de cifrado de datos.

Ejemplo: --s3ServerSideEncryption

No
--deleteOnSuccess

Si la operación de copia se realiza correctamente, esta opción hace que S3DistCp elimine los archivos copiados desde 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, del tamaño de parte de la carga multiparte. De forma predeterminada, utiliza la carga multiparte al escribir en Amazon S3. El tamaño de fragmento predeterminado es de 16 MiB.

Ejemplo: --multipartUploadChunkSize=32

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 S3DistCp.

Ejemplo: --outputManifest=manifest-1.gz

No
--previousManifest=PATH

Lee un archivo de manifiesto que se ha creado durante una llamada anterior a S3DistCp mediante la marca --outputManifest. Cuando la marca --previousManifest está definida, S3DistCp excluye los archivos que se enumeran en el manifiesto desde la operación de copia. 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 anterior 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 para hacer que S3DistCp use el archivo de manifiesto especificado como una lista de archivos que copiar, en lugar de una lista de archivos que excluir de la copia.

Ejemplo: --copyFromManifest --previousManifest=/usr/bin/manifest-1.gz

No
--s3Endpoint=ENDPOINT

Especifica el punto de enlace 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 enlace de Amazon S3, consulte.Regiones y puntos de enlace.

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_REDUNDANCY. Si esta opción no se especifica, S3DistCp intenta 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 desrcprefijos, un prefijo por línea.

Si se proporciona srcPrefixesFile, S3DistCp no 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, S3DistCp implementa la interfaz Tool lo que significa que admite las opciones genéricas.

Agregar S3DistCp como paso en un clúster

Puede llamar a S3DistCp añadiéndolo como paso en el 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. Los siguientes ejemplos muestran como se añade un paso de S3DistCp a un clúster en ejecución. Para obtener más información acerca de la adición de pasos a un clúster, consulte.Enviar trabajo a un clústeren laGuía de administración de Amazon EMR.

Para añadir un paso de S3DistCp a un clúster en ejecución utilizando laAWS CLI

Para obtener más información sobre cómo utilizar los comandos de Amazon EMR en laAWS CLI, consulte laAWS CLIReferencia de los comandos de la.

  • Para añadir un paso a un clúster que llama a S3DistCp, transfiera los parámetros que especifican cómo debe realizar S3DistCp la operación de copia como argumentos.

    El siguiente ejemplo copia registros de demonio desde Amazon S3 ahdfs:///output. En el comando siguiente:

    • --cluster-id especifica el clúster

    • Jar es la ubicación del archivo JAR S3DistCp

    • Args es una lista separada por comas de las parejas de nombre-valor opcionales que transferir a S3DistCp. Para ver una lista completa de las opciones disponibles, consulte Opciones de S3DistCp.

    Para añadir un paso de copia de S3DistCp a un clúster en ejecución, coloque lo siguiente en un archivo JSON guardado en Amazon S3 o su sistema de archivos local comomyStep.jsonpara este ejemplo. ReemplazarJ-3Gyxxxxxx9iOKcon su ID de clúster y reemplacemybucketcon el nombre de su bucket de Amazon S3.

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://mybucket/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

ejemplo Copie los archivos de registro de Amazon S3 a HDFS

Este ejemplo también muestra cómo copiar archivos de registro almacenados en un bucket de Amazon S3 en HDFS añadiendo 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 demonio.

Para copiar archivos de registro desde Amazon S3 a HDFS mediante la--srcPattern, coloque lo siguiente en un archivo JSON guardado en Amazon S3 o su sistema de archivos local comomyStep.jsonpara este ejemplo. ReemplazarJ-3Gyxxxxxx9iOKcon su ID de clúster y reemplacemybucketcon el nombre de su bucket de Amazon S3.

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