Uso de la utilidad de línea de comandos odcp para copiar datos

Utilice la utilidad de línea de comandos odcp para gestionar los datos de trabajos de copia entre HDFS en el cluster y los proveedores de almacenamiento remoto.

Nota

La CLI odcp solo se puede utilizar en clusters que utilicen Cloudera Distribution con Hadoop.

odcp utiliza Spark para proporcionar una transferencia paralela de uno o más archivos. Divide el archivo de entrada en fragmentos, que a continuación se transfieren en paralelo al destino. Por defecto, los fragmentos transferidos se fusionan a continuación en un archivo de salida.

odcp soporta la copia de archivos cuando se utiliza lo siguiente:
  • Apache Hadoop Distributed File Service (HDFS)

  • Apache WebHDFS and Secure WebHDFS (SWebHDFS)

  • Amazon Simple Storage Service (S3)

  • Oracle Cloud Infrastructure Object Storage

  • Protocolo de transferencia de hipertexto (HTTP) y protocolo seguro de transferencia de hipertexto (HTTPS): se utiliza solo para orígenes.

Antes de empezar

En los temas siguientes se indica cómo utilizar las opciones del comando odcp para copiar datos entre HDFS en el cluster y los proveedores de almacenamiento externo.

Para todas las operaciones, cada nodo de cluster debe tener:
  • Acceso a todos los servicios de almacenamiento en ejecución.

  • Todas las credenciales necesarias establecidas, por ejemplo, las instancias de Oracle Cloud Infrastructure Object Storage.

Consulte Referencia de odcp para ver la sintaxis, los parámetros y las opciones de odcp.

Uso de bda-oss-admin con odcp

Utilice los comandos bda-oss-admin a fin de configurar el cluster para su uso con proveedores de almacenamiento. Esto facilita y agiliza el uso de odcp con el proveedor de almacenamiento.

Cualquier usuario con privilegios de acceso al clúster puede ejecutar odcp.

Nota

Para copiar datos entre HDFS y un proveedor de almacenamiento, por ejemplo, Oracle Cloud Infrastructure Object Storage, debe tener una cuenta con el almacén de datos y acceder al mismo.

Para copiar datos entre HDFS y un proveedor de almacenamiento:

  1. Abra un shell de comandos y conéctese al cluster. Puede conectarse a cualquier nodo para el que tenga derechos de acceso de HDFS. Consulte Conexión a un nodo de cluster mediante SSH.
  2. Configure los valores de las variables de entorno de shell para el acceso de Cloudera Manager. Consulte Descripción de las variables de entorno de bda-oss-admin.

    Configure estas variables de entorno

    • CM_ADMIN: nombre de usuario del administrador de Cloudera Manager (administrador de cluster)

    • CM_PASSWORD: contraseña del administrador de Cloudera Manager (administrador de cluster)

    • CM_URL: URL de Cloudera Manager

  3. También debe tener privilegios de acceso al proveedor de almacenamiento que desea utilizar.
    • Configure la variable de entorno PROVIDER_NAME para hacer referencia al proveedor que desea utilizar. Por ejemplo, si tiene un proveedor denominado rssfeeds-admin2, utilice SSH para conectarse al cluster e introduzca lo siguiente:

      PROVIDER_NAME="rssfeeds-admin2"

      O bien en un script de shell:

      export PROVIDER_NAME="rssfeeds-admin2"
  4. Puede utilizar el comando hadoop fs -ls para examinar los datos de HDFS y de almacenamiento.
  5. Utilice el comando odcp para copiar archivos. Consulte Referencia de odcp.

Copia de datos en un cluster seguro

El uso de odcp para copiar datos en un cluster activado para Kerberos necesita algunos pasos adicionales.

Nota

En Oracle Big Data Service, un cluster está activado para Kerberos cuando se crea con la opción Seguridad y alta disponibilidad (HA) seleccionada.

Si desea ejecutar un trabajo de larga duración o ejecutar odcp desde un script de shell automatizado o desde un servicio de flujo de trabajo como Apache Oozie, debe transferir al comando odcp un principal de Kerberos y la ruta de acceso completa al archivo keytab del principal, como se describe a continuación:

  1. Utilice SSH para conectarse a cualquier nodo del cluster.
  2. Seleccione el principal que se va a utilizar para ejecutar el comando odcp. En el siguiente ejemplo que es odcp@BDACLOUDSERVICE.EXAMPLE.COM.
  3. Genere un archivo keytab para el principal, como se muestra a continuación: 
    $ kutil
    ktutil:  addent -password -p odcp@BDSERVICE.EXAMPLE.COM -k 1 -e rc4-hmac
    Password for odcp@BDSERVICE.EXAMPLE.COM: [enter your password]
    ktutil:  addent -password -p odcp@BDSERVICE.EXAMPLE.COM -k 1 -e aes256-cts
    Password for odcp@BDSERVICE.EXAMPLE.COM: [enter your password]
    ktutil:  wkt /home/odcp/odcp.keytab
    ktutil:  quit
  4. Transfiera el principal y la ruta de acceso completa al archivo keytab al comando odcp, por ejemplo:
    odcp --krb-principal odcp@BDSERVICE.EXAMPLE.COM --krb-keytab /home/odcp/odcp.keytab source destination
Si solo desea ejecutar un trabajo de corta ejecución odcp en la consola, no tiene que generar un archivo keytab ni especificar el principal. Solo debe tener un token de Kerberos activo (creado con el comando kinit).

Reintento de un trabajo de copia fallido

Si falla un trabajo de copia, puede volver a intentarlo. Al reintentar el trabajo, el origen y el destino se sincronizan automáticamente. Por lo tanto, odcp no transfiere correctamente las partes del archivo transferidas del origen al destino.

Utilice lo siguiente:

odcp --retry <source> <target>

Depuración de odcp

Debe configurar el cluster a fin de activar la depuración para odcp.

Configuración de un cluster para activar la depuración

Para configurar el cluster:
  1. Como el usuario root, agregue las siguientes líneas a /etc/hadoop/conf/log4j.properties en cada nodo del cluster:
    log4j.logger.oracle.paas.bdcs.conductor=DEBUG
    log4j.logger.org.apche.hadoop.fs.swift.http=DEBUG
    

    O bien para configurar todos los nodos:

    $ dcli -c $NODES "echo 'log4j.logger.oracle.paas.bdcs.conductor=DEBUG' >> /etc/hadoop/conf/log4j.properties"
    $ dcli -c $NODES "echo 'log4j.logger.org.apche.hadoop.fs.swift.http=DEBUG' >> /etc/hadoop/conf/log4j.properties"
    
    
  2. Como el usuario oracle, busque los logs en el siguiente directorio HDFS: 

     hdfs:///tmp/logs/username/logs/application_application_id/

    Por ejemplo:

    $ hadoop fs -ls /tmp/logs/oracle/logs/
    Found 15 items
    drwxrwx---   - oracle hadoop       0 2016-08-23 07:29 /tmp/logs/oracle/logs/application_14789235086687_0029
    drwxrwx---   - oracle hadoop       0 2016-08-23 08:07 /tmp/logs/oracle/logs/application_14789235086687_0030
    drwxrwx---   - oracle hadoop       0 2016-08-23 08:20 /tmp/logs/oracle/logs/application_14789235086687_0001
    drwxrwx---   - oracle hadoop       0 2016-08-23 10:19 /tmp/logs/oracle/logs/application_14789235086687_0002
    drwxrwx---   - oracle hadoop       0 2016-08-23 10:20 /tmp/logs/oracle/logs/application_14789235086687_0003
    drwxrwx---   - oracle hadoop       0 2016-08-23 10:40 /tmp/logs/oracle/logs/application_14789235086687_0004
    ...
    
    # cat logs as:
    hadoop fs -cat /tmp/logs/oracle/logs/application_1469028504906_0032/slclbv0036.em3.oraclecloud.com_8041
    
    # copy to local FShadoop fs -copyToLocal /tmp/logs/oracle/logs/application_1469028504906_0032/slclbv0036.em3.oraclecloud.com_8041 /tmp/log/slclbv0036.em3.oraclecloud.com_8041

Recopilación de ratios de transferencia

Puede recopilar los ratios de transferencia cuando la depuración está activada.

Las tasas de transferencia se notifican después de cada:

  • Operación de lectura de fragmentos

  • Operación de escritura o carga de fragmentos

El rendimiento de resumen se notifica cuando termina una transferencia de fragmentos. El rendimiento de resumen incluye todo lo siguiente:

  • Operaciones de lectura

  • Operaciones de escritura o carga

  • Operaciones de marco de Spark (distribución de tareas, gestión de tareas, etc.)

Ejemplo de salida:

./get-transfer-rates.sh application_1476272395108_0054 2>/dev/null
Action,Speed [MBps],Start time,End time,Duration [s],Size [B]
Download from OSS,2.5855451864420473,2016-10-31 11:34:48,2016-10-31 11:38:06,198.024,536870912
Download from OSS,2.548912231791706,2016-10-31 11:34:47,2016-10-31 11:38:08,200.87,536870912
Download from OSS,2.53447780846872,2016-10-31 11:34:47,2016-10-31 11:38:09,202.014,536870912
Download from OSS,2.5130931169717226,2016-10-31 11:34:48,2016-10-31 11:38:11,203.733,536870912
Write to HDFS,208.04550995530275,2016-10-31 14:00:30,2016-10-31 14:00:33,2.46099999999999967435,536870912
Write to HDFS,271.76220806794055,2016-10-31 14:00:38,2016-10-31 14:00:40,1.88400000000000001398,536870912
Write to HDFS,277.5067750677507,2016-10-31 14:00:43,2016-10-31 14:00:45,1.84499999999999985045,536870912
Write to HDFS,218.0579216354344,2016-10-31 14:00:44,2016-10-31 14:00:46,2.34800000000000013207,536870912
Write to HDFS,195.56913674560735,2016-10-31 14:00:44,2016-10-31 14:00:47,2.61799999999999978370,536870912

Utilice el siguiente comando para recopilar los ratios de salida:

get-transfer-rates.sh application_id

Referencia de odcp

La utilidad de la línea de comandos odcp tiene el comando único odcp con los parámetros y opciones que se describen a continuación.

Sintaxis

odcp [<options>] <source1> [<source2> ...] <destination>

Parámetros

Parámetro Descripción
<source1> [<source2> ...]

El origen puede ser cualquiera de los siguientes:

  • Uno o más archivos individuales. Se permiten caracteres comodín (patrones glob).

  • Uno o más directorios de HDFS.

  • Uno o más contenedores de almacenamiento.

Si especifica varios orígenes, enumere uno después de otro:

odcp <source1> <source2> <source3> <destination>

Si dos o más archivos de origen tienen el mismo nombre, no se copia nada y odcp devuelve una excepción.

Se soportan expresiones regulares mediante estos parámetros:

  • --srcPattern <pattern>

    Se copian los archivos con nombres coincidentes. Este parámetro se ignora si se configura el parámetro ––groupBy.

  • --groupBy <pattern>

    Se copian los archivos con nombres coincidentes y, a continuación, se concatenan en un archivo de salida. Configure un nombre para el nombre de archivo concatenado mediante el parámetro --groupName output_file_name.

    Cuando se utiliza el parámetro --groupBy, se ignora el parámetro --srcPattern.

<destination>

El destino puede ser cualquiera de los siguientes:

  • Un archivo especificado en un directorio de HDFS o un contenedor de almacenamiento

    Si no especifica un nombre de archivo, se utilizará el nombre del archivo de origen para el archivo copiado en el destino. Sin embargo, puede especificar un nombre de archivo diferente en el destino para evitar sobrescribir un archivo con el mismo nombre.

  • Un directorio de HDFS

  • Un contenedor de almacenamiento

Opciones

Opción Descripción

-b

--block-size

Tamaño de parte del archivo de destino en bytes.

  • Valor por defecto = 134217728

  • Mínimo = 1048576

  • Máximo = 2147483647

El resto después de dividir partSize entre blockSize debe ser igual a cero.

-c

--concat

Concatene los fragmentos de archivo (valor por defecto).

--executor-cores

Especifique el número de núcleos del ejecutor.

El valor por defecto es 5.

--executor-memory

Especifique el límite de memoria de ejecutores en gigabytes.

El valor por defecto es 40 GB.

--extra-conf

Especifique las opciones de configuración adicionales. Por ejemplo:

--extra-conf spark.kryoserializer.buffer.max=128m

--groupBy

Especifique los archivos que se van a concatenar a un archivo <destination> haciendo coincidir los nombres de archivo de origen con una expresión regular.

-h

--help

Permite mostrar ayuda para este comando.

--krb-keytab

Ruta de acceso completa al archivo keytab del principal de Kerberos. (Utilizar solo en un entorno de Spark activado para Kerberos).

--krb-principal

Principal de Kerberos. (Utilizar solo en un entorno de Spark activado para Kerberos).

-n

--no-clobber

No sobrescriba un archivo existente.

--non-recursive

No copie archivos de forma recursiva.

--num-executors

Especifique el número de ejecutores. El valor por defecto es 3 ejecutores.

--progress

Muestre el progreso de la transferencia de datos.

--retry

Vuelva a intentarlo si la transferencia anterior ha fallado o se ha interrumpido.

--partSize

Tamaño de parte del archivo de destino en bytes.

  • Valor por defecto = 536870912

  • Mínimo = 1048576

  • Máximo = 2147483647

El resto después de dividir partSize entre blockSize debe ser igual a cero.

--spark-home 

Ruta de acceso a un directorio que contiene una instalación de Apache Spark. Si no se especifica nada, odcp intenta encontrarlo en /opt/cloudera directory.

--srcPattern

Filtra los orígenes haciendo coincidir el nombre de origen con una expresión regular.

--srcPattern se ignora cuando se utiliza el parámetro --groupBy.

--sync

Sincronice <destination> con <source>.

-V

Active el modo detallado para la depuración.