Este tema describe cómo utilizar JindoDistCp.
Qué es JindoDistCp
JindoDistCp es una herramienta de copia distribuida de archivos desarrollada por el equipo de Alibaba Cloud Data Lake Storage para transferencias de datos a gran escala dentro de un clúster y entre clústeres. Utiliza MapReduce para distribuir archivos, gestionar errores y recuperarse de fallos. Toma como entrada una lista de archivos y directorios para las tareas de MapReduce, donde cada tarea copia una parte de la lista de origen. Admite completamente escenarios de copia de datos entre Hadoop Distributed File System (HDFS), OSS-HDFS, OSS y S3. Ofrece diversos parámetros y estrategias de copia personalizables. Está optimizado para copiar datos de HDFS a OSS-HDFS. Mediante un CopyCommitter personalizado, realiza copias sin cambio de nombre (No-Rename) y garantiza la consistencia de los datos al finalizar. Sus funciones están totalmente alineadas con las de S3 DistCp y HDFS DistCp. Ofrece mejoras significativas de rendimiento respecto a HDFS DistCp. JindoDistCp está diseñado para ser una herramienta de copia de datos eficiente, estable y segura.
Requisitos del entorno
JDK 1.8.0 o posterior.
-
Hadoop 2.3 o posterior. Debe descargar la versión más reciente del archivo
jindo-distcp-tool-x.x.x.jar. Este archivo JAR se incluye en el paquetejindosdk-${version}.tar.gz. Tras descomprimir el paquete, encontrará el archivo JAR en el directoriotools/. Para obtener más información, consulte JindoData downloads.NotaJindoDistCp se despliega en clústeres que ejecutan EMR V5.6.0 o posterior y EMR V3.40.0 o posterior. Puede encontrar el archivo
jindo-distcp-tool-x.x.x.jaren el directorio/opt/apps/JINDOSDK/jindosdk-current/tools.
Parámetros
JindoDistCp se proporciona como un paquete JAR. Puede usar el comando hadoop jar junto con una serie de parámetros para realizar operaciones de migración.
Parámetro | Tipo de parámetro | Descripción | Valor predeterminado | Versión | OSS | OSS-HDFS |
Obligatorio | Especifica el directorio de origen. Se admiten los siguientes prefijos:
| Ninguna | 4.3.0 o posterior | Compatible | Compatible | |
Obligatorio | Especifica el directorio de destino. Se admiten los siguientes prefijos:
| Ninguna | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica el límite de ancho de banda para un solo nodo. Unidad: MB. | -1 | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica el tipo de compresión. Los códecs compatibles incluyen gzip, gz, lzo, lzop y snappy. | keep (El tipo de compresión no se modifica). | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica la directiva de almacenamiento para el destino. Valores válidos: Standard, IA, Archive y ColdArchive. | Standard | 4.3.0 o posterior | Compatible | No compatible | |
Opcional | Especifica el archivo que contiene las reglas de filtro. | Ninguna | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | La configuración se aplica a los archivos que coinciden con la regla. | Ninguna | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica la concurrencia de la tarea DistCp. Corresponde al parámetro mapreduce.job.maps en una tarea de MapReduce. | 10 | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica el número de archivos que procesará cada trabajo de DistCp. | 10000 | 4.5.1 o posterior | Compatible | Compatible | |
Opcional | Especifica el número de archivos que procesará cada tarea de DistCp. | 1 | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica el directorio temporal. | /tmp | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Establece una configuración. | Ninguna | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica si se debe deshabilitar la verificación de suma de comprobación. | false | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica si se deben eliminar los archivos de origen. Se utiliza para mover datos. | false | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica si se deben habilitar transacciones para garantizar la atomicidad a nivel de trabajo. | false | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica si se deben ignorar las excepciones generadas durante la tarea de copia para evitar que esta se interrumpa. | false | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica si se debe habilitar el monitoreo y las alertas. | false | 4.5.1 o posterior | Compatible | Compatible | |
Opcional | Establece el modo DistCp en DIFF para consultar las diferencias entre los archivos del origen y el destino. | DistCpMode.COPY | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Establece el modo DistCp en UPDATE para habilitar la sincronización incremental. Omite archivos y directorios idénticos, y sincroniza del origen al destino únicamente los archivos y directorios nuevos o modificados. | DistCpMode.COPY | 4.3.0 o posterior | Compatible | Compatible | |
Opcional | Especifica si se debe conservar la información de metadatos. | false | 4.4.0 o posterior | No compatible | Compatible |
--src y --dest (obligatorios)
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--src: Especifica la ruta de los archivos de origen.--dest: Especifica la ruta de los archivos de destino.
A continuación se muestra un ejemplo de comando:
hadoop jar jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table
Puede especificar el directorio de destino mediante la ruta dest. Por ejemplo, el comando anterior copia archivos de /data/hourly_table al directorio hourly_table en el bucket example-oss-bucket. Este comportamiento difiere del de Hadoop DistCp. De forma predeterminada, JindoDistCp copia todos los archivos del directorio de origen a la ruta de destino especificada, pero no incluye el directorio raíz del origen. Puede especificar un directorio raíz en la ruta de destino. Si el directorio no existe, se crea automáticamente.
Para copiar un solo archivo, debe especificar un directorio como destino.
hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmp
Uso de --bandWidth
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--bandWidth: Especifica el ancho de banda que puede utilizar un solo nodo para la tarea de DistCp, en MB. Este parámetro evita que un solo nodo consuma demasiado ancho de banda.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6
Uso de --codec
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
Los archivos de origen suelen almacenarse en OSS u OSS-HDFS como texto sin comprimir, lo cual no es ideal para los costos de almacenamiento ni para el análisis de datos. Puede usar la opción --codec para almacenar datos de manera eficiente mediante la compresión de archivos en línea.
--codec especifica el códec de compresión de archivos. Admite los codificadores gzip, gz, lzo, lzop y snappy, así como las palabras clave none y keep (predeterminado). Las palabras clave se describen a continuación:
none: Guarda los archivos sin comprimir. Si un archivo de origen ya está comprimido, JindoDistCp lo descomprime.keep(predeterminado): Copia los archivos tal como están, sin modificar su estado de compresión.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec gz
Después de ejecutar el comando, los archivos en la carpeta de destino se comprimen con el códec gz.
[root@emr-header-1 opt]# hdfs dfs -ls oss://example-oss-bucket/hourly_table/2017-02-01/03
Found 6 items
-rw-rw-rw- 1 938 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/000151.sst.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/1.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/2.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/OPTIONS-000109.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp01.txt.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp06.txt.gz
Para utilizar el códec lzo en un clúster de Hadoop de código abierto, debe instalar la biblioteca nativa gplcompression y el paquete hadoop-lzo. Si no cuenta con el entorno necesario, deberá emplear otro método de compresión.
Uso de --filters
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--filters: Especifica un archivo que contiene reglas de filtro.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --filters filter.txt
Por ejemplo, si el archivo filter.txt contiene .*test.*, los archivos cuyas rutas contengan la cadena "test" no se copiarán a OSS.
Uso de --srcPrefixesFile
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--srcPrefixesFile: Especifica un archivo que contiene reglas de inclusión.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --srcPrefixesFile prefixes.txt
Por ejemplo, si el archivo prefixes.txt contiene .*test.*, solo los archivos cuyas rutas contengan la cadena "test" se copiarán a OSS.
Uso de --parallelism
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--parallelism: Especifica el parámetro mapreduce.job.maps para la tarea de MapReduce. El valor predeterminado de este parámetro en un entorno EMR es 10. Puede personalizar el valor de este parámetro según los recursos de su clúster para controlar la concurrencia de la tarea de DistCp.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 20
Uso de --taskBatch
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--taskBatch: Especifica el número de archivos que procesará cada tarea de DistCp. El valor predeterminado es 1.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --taskBatch 1
Uso de --tmp
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--tmp: Especifica un directorio temporal en HDFS para almacenar datos temporales. El valor predeterminado es /tmp, que corresponde a hdfs:///tmp/.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --tmp /tmp
Configurar una AccessKey para acceder a OSS u OSS-HDFS
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--hadoopConf: Si no se encuentra en un entorno EMR o si el servicio de acceso sin contraseña presenta problemas, puede usar esta opción para especificar una AccessKey y acceder a OSS u OSS-HDFS.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret
Para evitar ingresar la AccessKey cada vez, puede preconfigurar el ID de AccessKey y el secreto de AccessKey para OSS u OSS-HDFS en el archivo core-site.xml de Hadoop. En la consola de EMR, agregue la siguiente configuración en la página core-site.xml del servicio Hadoop-Common.
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxx</value>
</property>
</configuration>
Uso de --disableChecksum
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--disableChecksum: Deshabilita la verificación de la suma de comprobación de archivos.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --disableChecksum
Uso de --deleteOnSuccess
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--deleteOnSuccess: Mueve datos en lugar de copiarlos. Esta opción es similar a una operación mv. Primero copia los archivos y luego los elimina del origen.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccess
Uso de --enableTransaction
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--enableTransaction: De forma predeterminada, JindoDistCp garantiza la integridad a nivel de tarea. Puede usar este parámetro para garantizar la integridad a nivel de trabajo y habilitar el soporte transaccional entre trabajos.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --enableTransaction
Uso de --ignore
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--ignore: Ignora las excepciones que ocurren durante la migración de datos. Los errores no interrumpen la tarea; en su lugar, se reportan como valores de JindoCounter. Si CMS está habilitado, también se envía una notificación.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --ignore
Uso de --diff
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--diff: Compara los archivos del origen y el destino. Si un archivo de origen no se ha sincronizado con el destino, se genera un archivo con las diferencias en el directorio actual. Si su tarea de JindoDistCp implica compresión o descompresión, --diff no podrá mostrar las diferencias correctas entre archivos porque el tamaño del archivo cambia durante el proceso.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff
Si se encuentran diferencias, se genera un archivo con dichas diferencias en el directorio actual y se muestra el siguiente mensaje:
JindoCounter
DIFF_FILES=1
Si su --dest es una ruta de HDFS, se admiten los formatos /path, hdfs://hostname:ip/path y hdfs://headerIp:ip/path. No se admiten los formatos hdfs:///path, hdfs:/path ni otros formatos personalizados.
Para consultar diferencias en los metadatos de los archivos, ejecute el comando --diff --preserveMeta:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff --preserveMeta
Uso de --update
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
Compatible |
--update: Habilita la sincronización incremental. Esta opción omite archivos y directorios idénticos, y sincroniza del origen al destino únicamente los archivos y directorios nuevos o modificados.
Si una tarea de JindoDistCp falla, puede usar este parámetro para reanudarla desde el punto de interrupción y copiar solo los archivos restantes. También puede utilizar este parámetro para copiar archivos nuevos que se hayan agregado al origen después de completar la tarea anterior de JindoDistCp.
A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --update
Escritura de datos en OSS con clases de almacenamiento Cold Archive, Archive o IA
|
Versión |
OSS |
OSS-HDFS |
|
4.3.0 o posterior |
Compatible |
No compatible |
--policy: Especifica la clase de almacenamiento para los datos que se escriben en OSS. Puede establecer este parámetro en Cold Archive, Archive o IA. Si no especifica este parámetro, los datos se escriben en la clase de almacenamiento Standard de forma predeterminada.
-
Escritura de datos en la clase de almacenamiento Cold Archive (coldArchive) en OSS
Esta función solo está disponible en regiones específicas. Para obtener más información, consulte OSS storage classes. A continuación se muestra un ejemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20 -
Escritura de datos en la clase de almacenamiento Archive (archive) en OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20 -
Escritura de datos en la clase de almacenamiento IA (ia) en OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20
Uso de --preserveMeta
|
Versión |
OSS |
OSS-HDFS |
|
4.4.0 o posterior |
No compatible |
Compatible |
--preserveMeta: Especifica que los metadatos se migran junto con los datos. Los metadatos incluyen Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs y ACL.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --preserveMeta
Uso de --jobBatch
|
Versión |
OSS |
OSS-HDFS |
|
4.5.1 o posterior |
Compatible |
Compatible |
--jobBatch: Cuando su tarea de DistCp escribe datos en OSS, puede usar --jobBatch para especificar el número de archivos que procesará cada trabajo de DistCp. El valor predeterminado es 10,000.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000
Uso de --enableCMS
|
Versión |
OSS |
OSS-HDFS |
|
4.5.1 o posterior |
Compatible |
Compatible |
--enableCMS: Habilita la función de alertas de CMS .
Contadores de JindoDistCp
Los contadores de JindoDistCp resumen los resultados de una tarea de JindoDistCp. La siguiente tabla describe los contadores.
|
Parámetro |
Descripción |
|
COPY_FAILED |
Número de archivos cuya copia falló. |
|
CHECKSUM_DIFF |
Número de archivos que no superaron la verificación de suma de comprobación. Se incluye en COPY_FAILED. |
|
FILES_EXPECTED |
Número de archivos que se espera copiar. |
|
BYTES_EXPECTED |
Número de bytes que se espera copiar. |
|
FILES_COPIED |
Número de archivos copiados correctamente. |
|
BYTES_COPIED |
Número de bytes copiados correctamente. |
|
FILES_SKIPPED |
Número de archivos omitidos durante una actualización incremental. |
|
BYTES_SKIPPED |
Número de bytes omitidos durante una actualización incremental. |
|
DIFF_FILES |
Número de archivos diferentes entre las rutas de origen y destino. |
|
SAME_FILES |
Número de archivos idénticos entre las rutas de origen y destino. |
|
DST_MISS |
Número de archivos inexistentes en la ruta de destino. Se incluye en DIFF_FILES. |
|
LENGTH_DIFF |
Número de archivos con tamaños distintos entre el origen y el destino. Se incluye en DIFF_FILES. |
|
CHECKSUM_DIFF |
Número de archivos que no superaron la verificación de suma de comprobación. Se incluye en DIFF_FILES. |
|
DIFF_FAILED |
Número de archivos cuya operación de comparación presentó anomalías. |