Transferencias de HDFS a Cloud Storage

El Servicio de transferencia de almacenamiento admite transferencias desde la nube y Hadoop local fuentes del sistema de archivos distribuidos (HDFS).

Las transferencias desde HDFS deben usar Cloud Storage como destino.

Los casos de uso incluyen la migración del almacenamiento local a Cloud Storage, archivar datos para liberar espacio de almacenamiento local y replicarlos para Google Cloud para la continuidad empresarial o la transferencia de datos a en Google Cloud para su análisis y procesamiento.

Configura permisos

Antes de crear una transferencia, debes configurar permisos para lo siguiente entidades:

La cuenta de usuario que se usa para crear la transferencia. Este es el con la que accediste a la consola de Google Cloud que se especifica cuando se realiza la autenticación en la CLI de “gcloud”. La cuenta de usuario puede ser una cuenta de usuario normal o una cuenta de servicio administrada por el usuario.
La cuenta de servicio administrada por Google, también conocida como la que usa el Servicio de transferencia de almacenamiento. Generalmente, esta cuenta se identifica por su dirección de correo electrónico, que usa el formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
La cuenta del agente de transferencia que proporciona Google Cloud para los agentes de transferencia. Las cuentas del agente de transferencia usan credenciales del usuario que las instala o las credenciales de un de servicio administrada por el usuario, para autenticar.

Consulta Permisos de transferencia basados en agentes para obtener instrucciones.

Instala agentes en un grupo de agentes

Las transferencias basadas en agentes usan agentes de software para organizar las transferencias. Estos agentes instalarse en una o más máquinas con acceso a tu sistema de archivos. Los agentes deben tener acceso al nombre, a todos el servidor de administración de claves (KMS) de Hadoop, y el centro de distribución de claves de Kerberos (KDC).

Los agentes de transferencia trabajan en conjunto en un grupo de agentes. Aumentar la cantidad de agentes puede mejorar el rendimiento general de la tarea, pero esto depende de varios factores.

  • Agregar más agentes puede ser útil, hasta la mitad de la cantidad de nodos en tu HDFS. clúster. Por ejemplo, con un clúster de 30 nodos, que aumentará de 5 a 15 agentes debería mejorar el rendimiento, pero, superior a 15, es poco probable que haga una gran diferencia.

  • Para un clúster de HDFS pequeño, un agente puede ser suficiente.

  • Los agentes adicionales suelen tener un mayor impacto en el rendimiento cuando se incluye una gran cantidad de archivos pequeños. Servicio de transferencia de almacenamientoo logra un alto de procesamiento mediante la paralelización de las tareas de transferencia entre varios agentes. Cuantos más en la carga de trabajo, mayor será el beneficio de agregar más agentes.

No incluyas información sensible, como información de identificación personal (PII) o datos de seguridad en el nombre del grupo de agentes o en el prefijo de ID del agente. Los nombres de los recursos se pueden propagar a los nombres de otros recursos de Google Cloud y pueden exponerse a sistemas internos de Google fuera de tu proyecto.

Crea un grupo de agentes

Crea un grupo de agentes. Usa tu cuenta de usuario Símbolo de la cuenta de usuario para esta acción.

Instalar agentes

Instala agentes en el grupo de agentes. Usar tu cuenta de agente de transferencia para esta acción.

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

  2. Selecciona el grupo de agentes al que deseas agregar el agente nuevo.

  3. Haz clic en Instalar agente.

  4. Sigue las instrucciones que se muestran para instalar y ejecutar el agente.

    Para obtener más información sobre las opciones de línea de comandos del agente, consulta Opciones de línea de comandos del agente.

CLI de gcloud

Para instalar uno o más agentes mediante la CLI de gcloud, ejecuta gcloud transfer agents install:

gcloud transfer agents install --pool=POOL_NAME \
  --count=NUM_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES \
  --hdfs-namenode-uri=HDFS_NAMENODE_URI \
  --hdfs-username=HDFS_USERNAME \
  --hdfs-data-transfer-protection=HDFS_DATA_TRANSFER_PROTECTION \
  --kerberos-config-file=KERBEROS_CONFIG_FILE \
  --kerberos-keytab-file=KERBEROS_KEYTAB_FILE \
  --kerberos-user-principal=KERBEROS_USER_PRINCIPAL \
  --kerberos-service-principal=KERBEROS_SERVICE_PRINCIPAL \

Aquí:

  • --hdfs-namenode-uri especifica un clúster de HDFS que incluye un esquema, un nombre de nodo y un puerto en formato URI. Por ejemplo:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

    Usa HTTP o HTTPS para WebHDFS. Si no se proporciona un esquema, se asume que es RPC. Si no se proporciona ningún puerto, el valor predeterminado es 8020 para RPC, 9870 para HTTP y 9871 para HTTPS. Por ejemplo, la entrada my-namenode se convierte en rpc://my-namenode:8020

    Si tu clúster está configurado con varios namenodes, especifica el nodo principal actual. Consulta Clústeres con varios namenodes para obtener más información.

  • --hdfs-username es el nombre de usuario para conectarse a un clúster HDFS con autenticación simple. Omite esta marca si te autenticas con Kerberos o si te conectas sin ninguna autenticación.

  • --hdfs-data-transfer-protection (opcional) es la calidad del cliente de (QOP) para clústeres con kerber. El valor no puede ser mayor restrictivo que el valor de QOP del servidor. Los valores válidos son authentication, integrity y privacy.

Si autenticas con Kerberos, incluye también las siguientes marcas:

  • --kerberos-config-file es la ruta de acceso a un archivo de configuración de Kerberos. Por ejemplo, --kerberos-config-file=/etc/krb5.conf.

  • --kerberos-user-principal es el usuario principal de Kerberos que se debe usar. Por ejemplo, --kerberos-user-principal=user1.

  • --kerberos-keytab-file es la ruta de acceso a un archivo Keytab que contiene el principal del usuario especificado con la marca --kerberos-user-principal. Por ejemplo, --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal es el principal del servicio de Kerberos que se usará, del formulario <primary>/<instance>. El dominio está asignado desde tu cuenta de Kerberos de configuración de Terraform; se ignora cualquier dominio proporcionado. Si esta marca no es especificado, el valor predeterminado es hdfs/<namenode_fqdn>, donde <namenode_fqdn> es el nombre de dominio completamente calificado especificado en el archivo de configuración.

    Por ejemplo, --kerberos-service-principal=hdfs/my-namenode.a.example.com.

La herramienta te guía a través de los pasos necesarios para instalar los agentes. Con este comando, se instalan NUM_AGENTS agentes en tu máquina, asignados al nombre del grupo especificado como POOL_NAME, y autentica al agente con tus credenciales gcloud. El nombre del grupo debe existir o se mostrará un error.

La marca --mount-directories es opcional, pero se recomienda. Es es una lista separada por comas de directorios en el sistema de archivos al que para otorgar acceso al agente. Si se omite esta marca, se activa todo el sistema de archivos en el contenedor del agente. Consulta el Referencia de gcloud para obtener más información.

docker run

Antes de usar docker run para instalar agentes, sigue las instrucciones para instalar Docker.

El comando docker run instala un agente. Aumentar la cantidad de agentes en tu grupo, vuelve a ejecutar este comando tantas veces como sea necesario.

Las marcas de comando necesarias dependen del tipo de autenticación que usan.

Kerberos

Para autenticarte en tu sistema de archivos con Kerberos, usa el siguiente comando:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="service_account.json" \
  --agent-pool=${AGENT_POOL_NAME} \
  --hdfs-namenode-uri=cluster-namenode \
  --kerberos-config-file=/etc/krb5.conf \
  --kerberos-user-principal=user \
  --kerberos-keytab-file=/path/to/folder.keytab

Aquí:

  • Se debe omitir --network=host si ejecutas más de un agente en esta máquina.
  • --hdfs-namenode-uri: Un esquema, un nodo de nombre y un puerto, en formato URI. que representan un clúster de HDFS. Por ejemplo:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

Usa HTTP o HTTPS para WebHDFS. Si no se proporciona un esquema, se asume que es RPC. Si no se proporciona ningún puerto, el valor predeterminado es 8020 para RPC, 9870 para HTTP y 9871 para HTTPS. Por ejemplo, la entrada my-namenode se convierte en rpc://my-namenode:8020

Si tu clúster está configurado con varios namenodes, especifica el nodo principal actual. Consulta Clústeres con varios namenodes para obtener más información.

  • --kerberos-config-file: Es la ruta de acceso a un archivo de configuración de Kerberos. El valor predeterminado es /etc/krb5.conf.
  • --kerberos-user-principal: El principal de usuario de Kerberos
  • --kerberos-keytab-file: Es la ruta de acceso a un archivo Keytab que contiene el usuario principal especificado con --kerberos-user-principal.
  • --kerberos-service-principal: Es el principal de servicio de Kerberos que se usará, del de “servicio/instancia”. El dominio se asigna desde tu archivo de configuración de Kerberos. Se ignora cualquier dominio proporcionado. Si no se especifica esta marca, el valor predeterminado es hdfs/<namenode_fqdn>, donde fqdn es el nombre de dominio completamente calificado.

Autenticación simple

Para autenticarte en tu sistema de archivos con una autenticación simple, haz lo siguiente:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \
  --hdfs-username="${USERNAME}"

Aquí:

  • --hdfs-username: Es el nombre de usuario que se usará cuando te conectes a un clúster de HDFS con autenticación simple.
  • --hdfs-namenode-uri: Un esquema, un nodo de nombre y un puerto, en formato URI. que representan un clúster de HDFS. Por ejemplo:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Usa HTTP o HTTPS para WebHDFS. Si no se proporciona un esquema, se asume que es RPC. Si no se proporciona ningún puerto, el valor predeterminado es 8020 para RPC, 9870 para HTTP, y 9871 para HTTPS. Por ejemplo, la entrada my-namenode se convierte en rpc://my-namenode:8020.

Si tu clúster está configurado con varios namenodes, especifica el nodo principal actual. Consulta Clústeres con varios namenodes para obtener más información.

Sin autenticación

Para conectarte al sistema de archivos sin autenticación, haz lo siguiente:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \

Aquí:

  • --hdfs-namenode-uri: Un esquema, un nombre de nodo y un puerto, en formato URI, que representa un clúster de HDFS. Por ejemplo:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Usa HTTP o HTTPS para WebHDFS. Si no se proporciona un esquema, se asume que es RPC. Si no se proporciona ningún puerto, el valor predeterminado es 8020 para RPC, 9870 para HTTP, y 9871 para HTTPS. Por ejemplo, la entrada my-namenode se convierte en rpc://my-namenode:8020.

Si tu clúster está configurado con varios namenodes, especifica el nodo principal actual. Consulta Clústeres con varios namenodes para obtener más información.

Opciones de transferencia

Las siguientes funciones del Servicio de transferencia de almacenamiento están disponibles para transferencias HDFS a Cloud Storage.

Los archivos transferidos desde HDFS no conservan su metadatos.

Crear una transferencia

No incluyas información sensible, como información de identificación personal (PII) o datos de seguridad en el nombre del trabajo de transferencia. Los nombres de recursos pueden ser se propagan a los nombres de otros recursos de Google Cloud y pueden exponerse a los sistemas internos de Google fuera de tu proyecto.

El Servicio de transferencia de almacenamiento proporciona múltiples interfaces para crear un de datos entre sitios.

Consola de Google Cloud

  1. Ve a la página Servicio de transferencia de almacenamiento en la consola de Google Cloud.

    Ir al Servicio de transferencia de almacenamiento

  2. Haz clic en Crear trabajo de transferencia. Se muestra la página Crea un trabajo de transferencia.

  3. Selecciona Sistema de archivos distribuidos de Hadoop como el Tipo de fuente. El el destino debe ser Google Cloud Storage.

    Haz clic en Próximo paso.

Configura la fuente

  1. Especifica la información necesaria para esta transferencia:

    1. Selecciona el grupo de agentes que configuraste para esta transferencia.

    2. Ingresa la ruta de acceso desde la que deseas transferir, en relación con el directorio raíz.

  2. Si lo deseas, puedes especificar filtros para se aplican a los datos de origen.

  3. Haz clic en Próximo paso.

Configura tu receptor

  1. En el campo Bucket o carpeta, ingresa el bucket de destino y el nombre de la carpeta (opcional) o haz clic en Explorar para seleccionar un bucket de una lista de buckets existentes en tu proyecto actual. Para crear un bucket nuevo, haz clic en Ícono de bucket Crear un bucket nuevo.

  2. Haz clic en Próximo paso.

Programar la transferencia

Puedes programar tu transferencia para que se ejecute una sola vez o configurar una de datos entre sitios.

Haz clic en Próximo paso.

Elige la configuración de transferencia

  1. En el campo Descripción, ingresa una descripción de la transferencia. Como práctica recomendada, ingresa una descripción que sea significativa y única para que puedas distinguir los trabajos.

  2. En Opciones de metadatos, selecciona tu clase de almacenamiento de Cloud Storage. y si guardar cada uno de los objetos hora de creación. Consulta Conservación de metadatos para conocer los detalles.

  3. En Cuándo reemplazar, selecciona una de las siguientes opciones:

    • Nunca: No reemplaces los archivos de destino. Si existe un archivo con con el mismo nombre, no se transferirá.

    • Si es diferente: Reemplaza los archivos de destino si el archivo de origen con el mismo nombre tiene diferentes ETags o valores de suma de verificación.

    • Siempre: Siempre escribe archivos de destino cuando el archivo de origen tiene el mismo nombre, incluso si son idénticos.

  4. En Cuándo borrar, selecciona una de las siguientes opciones:

    • Nunca: Nunca borres archivos de origen o de destino.

    • Borra los archivos del destino si no están también en el origen: Si los archivos en el bucket de Cloud Storage de destino no están también en el origen, borra los archivos del bucket de Cloud Storage.

      Esta opción garantiza que el bucket de destino de Cloud Storage coincida exactamente con tu fuente.

  5. Selecciona si deseas habilitar esta opción registro de transferencia y/o Notificaciones de Pub/Sub.

Haz clic en Crear para crear el trabajo de transferencia.

gcloud CLI

Para crear un nuevo trabajo de transferencia, usa el comando gcloud transfer jobs create. La creación de un trabajo nuevo inicia la transferencia especificada, a menos que se especifique un programa o --do-not-run.

gcloud transfer jobs create \
  hdfs:///PATH/ gs://BUCKET_NAME/PATH/
  --source-agent-pool=AGENT_POOL_NAME

Aquí:

  • PATH es una ruta de acceso absoluta desde la raíz del clúster de HDFS. El clúster namenode y el puerto se configuran a nivel del agente, por lo que la creación de trabajos solo necesita especificar la ruta de acceso (opcional) y el grupo de agentes.

  • --source-agent-pool especifica el grupo de agentes de origen que se usará para esta transferencia.

Las opciones adicionales incluyen:

  • --do-not-run evita que el Servicio de transferencia de almacenamiento ejecute el trabajo cuando se envía el comando. Si deseas ejecutar el trabajo, actualízalo para agregar una programación o usa jobs run a fin de iniciarlo de forma manual.

  • --manifest-file especifica la ruta a un archivo CSV en Cloud Storage, que contiene una lista de archivos para transferir de tu fuente. Para formatear archivos de manifiesto, consulta Transfiere archivos o objetos específicos con un manifiesto.

  • Información del trabajo: puedes especificar --name y --description.

  • Programa: Especifica --schedule-starts, --schedule-repeats-every, y --schedule-repeats-until o --do-not-run.

  • Condiciones de objetos: Usa condiciones para determinar qué objetos se transfieren. Estos incluyen --include-prefixes y --exclude-prefixes, y las condiciones basadas en el tiempo en --include-modified-[before | after]-[absolute | relative]. Si especificaste una carpeta con tu origen, los filtros de prefijo están relacionados con esa carpeta. Consulta Filtra objetos de origen por prefijo para obtener más información. información.

  • Opciones de transferencia: Especifica si deseas reemplazar los archivos de destino (--overwrite-when=different o always) y si deseas borrar ciertos archivos durante o después de la transferencia (--delete-from=destination-if-unique o source-after-transfer). De manera opcional, puedes configurar una clase de almacenamiento en los objetos transferidos (--custom-storage-class).

  • Notificaciones: Configura las notificaciones de Pub/Sub para transferencias con --notification-pubsub-topic, --notification-event-types y --notification-payload-format.

Para ver todas las opciones, ejecuta gcloud transfer jobs create --help o consulta la documentación de referencia de gcloud.

API de REST

Para crear una transferencia desde una fuente HDFS con la API de REST, crea un objeto JSON similar al siguiente ejemplo.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "hdfsDataSource": {
      "path": "/mount"
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

Consulta la referencia de transferJobs.create para obtener detalles sobre campos admitidos adicionales.

Clústeres con varios namenodes

Los agentes del Servicio de transferencia de almacenamiento solo se pueden configurar con un solo nodo de nombres. Si el El clúster de HDFS se configura con varios namenode (“alta disponibilidad”) y hay un evento de conmutación por error que genera un nodo de nombre principal nuevo, vuelve a instalar tus agentes con el namenode correcto.

Para borrar los agentes antiguos, consulta Borra un agente.

Para recuperar el nombre activo de tu clúster, ejecuta lo siguiente:

hdfs haadmin -getAllServiceState