El Servicio de transferencia de Storage admite transferencias desde fuentes del sistema de archivos distribuidos de Hadoop (HDFS) en la nube y on-premise.
Las transferencias desde HDFS deben usar Cloud Storage como destino.
Entre los casos prácticos se incluyen la migración del almacenamiento local a Cloud Storage, el archivado de datos para liberar espacio de almacenamiento local, la replicación de datos en Google Cloud para garantizar la continuidad del negocio o la transferencia de datos a Google Cloud para su análisis y procesamiento.
Configurar permisos
Antes de crear una transferencia, debe configurar los permisos de las siguientes entidades:
| La cuenta de usuario que se usa para crear la transferencia. Esta es la cuenta con la que se ha iniciado sesión en la consola Google Cloud o la cuenta que se ha especificado al autenticar la CLI de `gcloud`. La cuenta de usuario puede ser una cuenta de usuario normal o una cuenta de servicio gestionada por el usuario. | |
La cuenta de servicio gestionada por Google, también conocida como agente de servicio, que usa el Servicio de transferencia de Storage. Esta cuenta se identifica generalmente por su dirección de correo, que tiene el formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
|
|
![]() |
La cuenta de agente de transferencia que proporciona permisos de Google Cloud a los agentes de transferencia. Las cuentas de agente de transferencia usan las credenciales del usuario que las instala o las credenciales de una cuenta de servicio gestionada por el usuario para autenticarse. |
Consulta las instrucciones en Permisos de transferencia basados en agentes.
Instalar agentes en un grupo de agentes
Las transferencias basadas en agentes usan agentes de software para coordinar las transferencias. Estos agentes deben instalarse en una o varias máquinas con acceso a tu sistema de archivos. Los agentes deben tener acceso al nodo de nombres, a todos los nodos de datos, al servidor de gestión de claves (KMS) de Hadoop y al centro de distribución de claves (KDC) de Kerberos.
Los agentes de transferencia trabajan juntos en un grupo de agentes. Aumentar el número de agentes puede mejorar el rendimiento general de los trabajos, pero esto depende de varios factores.
Añadir más agentes puede ayudar, hasta aproximadamente la mitad del número de nodos de tu clúster de HDFS. Por ejemplo, en un clúster de 30 nodos, aumentar el número de agentes de 5 a 15 debería mejorar el rendimiento, pero es poco probable que aumentarlo más de 15 suponga una gran diferencia.
En un clúster de HDFS pequeño, puede ser suficiente con un agente.
Los agentes adicionales suelen tener un mayor impacto en el rendimiento cuando una transferencia incluye un gran número de archivos pequeños. El Servicio de transferencia de Storage consigue un alto rendimiento paralelizando las tareas de transferencia entre varios agentes. Cuantos más archivos haya en la carga de trabajo, más ventajas tendrá al añadir más agentes.
Crear un grupo de agentes
Crea un grupo de agentes. Usa tu cuenta de usuario
para realizar esta acción.
Instalar agentes
Instala agentes en el grupo de agentes. Usa tu cuenta de agente de transferencias
para realizar esta acción.
Google Cloud console
En la consola de Google Cloud , ve a la página Grupos de agentes.
Selecciona el grupo de agentes al que quieras añadir el nuevo agente.
Haz clic en Instalar agente.
Sigue las instrucciones 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 varios agentes con gcloud CLI, ejecuta el siguiente comando:
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 \
Donde:
--hdfs-namenode-uriespecifica un clúster HDFS que incluye un esquema, un nodo de nombres y un puerto en formato URI. Por ejemplo:rpc://my-namenode:8020http://my-namenode:9870
Usa HTTP o HTTPS para WebHDFS. Si no se proporciona ningún esquema, se asume que es RPC. Si no se indica ningún puerto, el valor predeterminado es
8020para RPC,9870para HTTP y9871para HTTPS. Por ejemplo, la entradamy-namenodese convierte enrpc://my-namenode:8020.Si tu clúster está configurado con varios namenodes, especifica el nodo principal actual. Consulta más información en Clústeres con varios nodos de nombres.
--hdfs-usernamees el nombre de usuario para conectarse a un clúster de HDFS con autenticación simple. Omite esta marca si te autenticas con Kerberos o si te conectas sin autenticación.--hdfs-data-transfer-protection(opcional) es la configuración de calidad por parte del cliente de la protección (QOP) de los clústeres Kerberizados. El valor no puede ser más restrictivo que el valor de QOP del lado del servidor. Los valores válidos son:authentication,integrityyprivacy.
Si te autenticas con Kerberos, incluye también las siguientes marcas:
--kerberos-config-filees la ruta a un archivo de configuración de Kerberos. Por ejemplo,--kerberos-config-file=/etc/krb5.conf.--kerberos-user-principales el principal de usuario de Kerberos que se va a usar. Por ejemplo,--kerberos-user-principal=user1.--kerberos-keytab-filees la ruta a un archivo Keytab que contiene el principal de usuario especificado con la marca--kerberos-user-principal. Por ejemplo,--kerberos-keytab-file=/home/me/kerberos/user1.keytab.--kerberos-service-principales el nombre principal del servicio Kerberos que se va a usar, con el formato<primary>/<instance>. El dominio se asigna desde el archivo de configuración de Kerberos. Se ignora cualquier dominio proporcionado. Si no se especifica esta marca, el valor predeterminado eshdfs/<namenode_fqdn>, donde<namenode_fqdn>es el nombre de dominio completo especificado en el archivo de configuración.Por ejemplo,
--kerberos-service-principal=hdfs/my-namenode.a.example.com.
La herramienta te guiará por los pasos necesarios para instalar los agentes. Este comando instala NUM_AGENTS agentes en tu máquina, asignados al nombre del grupo especificado como POOL_NAME, y autentica al agente con tus credenciales de gcloud. El nombre del grupo debe existir o se devolverá un error.
La marca --mount-directories es opcional, pero muy recomendable. Su valor es una lista separada por comas de los directorios del sistema de archivos a los que se debe conceder acceso al agente.
Si se omite esta marca, se montará todo el sistema de archivos en el contenedor del agente. Consulta más información en la referencia de gcloud.
docker run
Antes de usar docker run para instalar agentes, sigue las instrucciones para instalar Docker.
El comando docker run instala un agente. Para aumentar el número de agentes de tu grupo, vuelve a ejecutar este comando tantas veces como sea necesario.
Las marcas de comando necesarias dependen del tipo de autenticación que utilices.
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
Donde:
--network=hostdebe omitirse si ejecutas más de un agente en este equipo.--hdfs-namenode-uri: un esquema, un nodo de nombres y un puerto en formato URI que representa un clúster de HDFS. Por ejemplo:rpc://my-namenode:8020http://my-namenode:9870
Usa HTTP o HTTPS para WebHDFS. Si no se proporciona ningún esquema, se asume que es RPC. Si no se indica 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 más información en Clústeres con varios nodos de nombres.
--kerberos-config-file: ruta 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: ruta a un archivo Keytab que contiene el principal de usuario especificado con--kerberos-user-principal.--kerberos-service-principal: nombre principal del servicio Kerberos que se va a usar, con el formato "servicio/instancia". El dominio se asigna desde el archivo de configuración de Kerberos. Se ignora cualquier dominio proporcionado. Si no se especifica esta marca, el valor predeterminado eshdfs/<namenode_fqdn>, dondefqdnes el nombre de dominio completo.
Autenticación simple
Para autenticarte en tu sistema de archivos mediante la autenticación simple, sigue estos pasos:
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}"
Donde:
--hdfs-username: nombre de usuario que se usará al conectarse a un clúster de HDFS mediante autenticación simple.--hdfs-namenode-uri: un esquema, un nodo de nombres y un puerto en formato URI que representa un clúster de HDFS. Por ejemplo:rpc://my-namenode:8020http://my-namenode:9870
Usa HTTP o HTTPS para WebHDFS. Si no se proporciona ningún esquema, se asume que es RPC.
Si no se indica 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 más información en Clústeres con varios nodos de nombres.
Sin autenticación
Para conectarte a tu sistema de archivos sin autenticación, sigue estos pasos:
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 \
Donde:
--hdfs-namenode-uri: un esquema, un nodo de nombres y un puerto en formato URI que representa un clúster de HDFS. Por ejemplo:rpc://my-namenode:8020http://my-namenode:9870
Usa HTTP o HTTPS para WebHDFS. Si no se proporciona ningún esquema, se asume que es RPC.
Si no se indica 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 más información en Clusters with multiple namenodes (Clusters con varios namenodes).
Opciones de transferencia
Las siguientes funciones del servicio de transferencia de Storage están disponibles para las transferencias de HDFS a Cloud Storage.
Los archivos transferidos desde HDFS no conservan sus metadatos.
Crear una transferencia
No incluyas información sensible, como información personal identificable (IPI) o datos de seguridad, en el nombre del trabajo de transferencia. Los nombres de los recursos pueden propagarse a los nombres de otros recursos de Google Cloud y pueden exponerse a sistemas internos de Google fuera de tu proyecto.
El Servicio de transferencia de Storage ofrece varias interfaces para crear una transferencia.
Google Cloud console
Ve a la página Storage Transfer Service de la Google Cloud consola.
Haz clic en Crear tarea de transferencia. Se muestra la página Crear tarea de transferencia.
Seleccione Sistema de archivos distribuidos de Hadoop como Tipo de fuente. El destino debe ser Google Cloud Storage.
Haz clic en Siguiente paso.
Configurar una base de datos de origen
Especifica la información necesaria para esta transferencia:
Selecciona el grupo de agentes que has configurado para esta transferencia.
Introduce la ruta desde la que se va a transferir, en relación con el directorio raíz.
Si quiere, especifique los filtros que quiera aplicar a los datos de origen.
Haz clic en Siguiente paso.
Configurar el receptor
En el campo Segmento o carpeta, introduce el nombre del segmento de destino y, opcionalmente, el de la carpeta. También puedes hacer clic en Examinar para seleccionar un segmento de la lista de segmentos de tu proyecto. Para crear un nuevo contenedor, haz clic en
Crear contenedor.Haz clic en Siguiente paso.
Programar la transferencia
Puedes programar la transferencia para que se ejecute una sola vez o configurar una transferencia periódica.
Haz clic en Siguiente paso.
Elegir la configuración de la transferencia
En el campo Descripción, introduce una descripción de la transferencia. Como práctica recomendada, introduce una descripción significativa y única para poder distinguir los trabajos.
En Opciones de metadatos, selecciona la clase de almacenamiento de Cloud Storage y si quieres guardar la hora de creación de cada objeto. Para obtener más información, consulta Conservación de metadatos.
En Cuándo sobrescribir, seleccione una de las siguientes opciones:
Nunca: no sobrescribir los archivos de destino. Si ya existe un archivo con el mismo nombre, no se transferirá.
Si es diferente: sobrescribe los archivos de destino si el archivo de origen con el mismo nombre tiene valores de ETag o de suma de comprobación diferentes.
Siempre: siempre sobrescribe los archivos de destino cuando el archivo de origen tiene el mismo nombre, aunque sean idénticos.
En Cuándo eliminar, selecciona una de las siguientes opciones:
Nunca: no elimina nunca los archivos del origen ni del destino.
Eliminar los archivos en el destino si tampoco están en el origen: si los archivos del segmento de Cloud Storage de destino no están en el origen, elimínelos del segmento de Cloud Storage.
Esta opción asegura que el segmento de destino de Cloud Storage coincida exactamente con el de origen.
Seleccione si quiere habilitar el registro de transferencias o las notificaciones de Pub/Sub.
Haz clic en Crear para crear la tarea de transferencia.
CLI de gcloud
Para crear una tarea de transferencia, usa el comando gcloud transfer jobs create. Si no se especifica una programación o un --do-not-run, al crear una tarea se iniciará la transferencia especificada.
gcloud transfer jobs create \
hdfs:///PATH/ gs://BUCKET_NAME/PATH/
--source-agent-pool=AGENT_POOL_NAME
Donde:
PATHes una ruta absoluta desde la raíz del clúster de HDFS. El nombre de nodo y el puerto del clúster se configuran a nivel de agente, por lo que el comando de creación de tareas solo necesita especificar la ruta (opcional) y el grupo de agentes.--source-agent-poolespecifica el grupo de agentes de origen que se usará para esta transferencia.
Entre las opciones adicionales se incluyen:
--do-not-runimpide que el Servicio de transferencia de Storage ejecute el trabajo al enviar el comando. Para ejecutar el trabajo, actualízalo para añadir una programación o usajobs runpara iniciarlo manualmente.--manifest-fileespecifica la ruta a un archivo CSV de Cloud Storage que contiene una lista de archivos que se van a transferir desde la fuente. Para obtener información sobre el formato del archivo de manifiesto, consulta el artículo Transferir archivos u objetos específicos mediante un manifiesto.Información del trabajo: puedes especificar
--namey--description.Programación: especifica
--schedule-starts,--schedule-repeats-everyy--schedule-repeats-until, o--do-not-run.Condiciones de los objetos: usa condiciones para determinar qué objetos se transfieren. Entre ellas se incluyen
--include-prefixesy--exclude-prefixes, así como las condiciones basadas en el tiempo que se describen en--include-modified-[before | after]-[absolute | relative]. Si has especificado una carpeta con tu fuente, los filtros de prefijo son relativos a esa carpeta. Para obtener más información, consulta Filtrar objetos de origen por prefijo.Opciones de transferencia: especifique si quiere sobrescribir los archivos de destino (
--overwrite-when=differentoalways) y si quiere eliminar determinados archivos durante o después de la transferencia (--delete-from=destination-if-uniqueosource-after-transfer). También puede definir una clase de almacenamiento para los objetos transferidos (--custom-storage-class).Notificaciones: configura las notificaciones de Pub/Sub para las transferencias con
--notification-pubsub-topic,--notification-event-typesy--notification-payload-format.
Para ver todas las opciones, ejecuta gcloud transfer jobs create --help o consulta la documentación de referencia de gcloud.
API REST
Para crear una transferencia desde una fuente HDFS mediante la API 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 información sobre los campos admitidos adicionales.
Clústeres con varios nodos de nombres
Los agentes del Servicio de transferencia de Storage solo se pueden configurar con un único nodo de nombres. Si tu clúster de HDFS está configurado con varios nodos de nombres ("alta disponibilidad") y se produce una conmutación por error que da como resultado un nuevo nodo de nombres principal, debes volver a instalar tus agentes con el nodo de nombres correcto.
Para eliminar los agentes antiguos, consulta Eliminar un agente.
Puedes obtener el namenode activo de tu clúster ejecutando el siguiente comando:
hdfs haadmin -getAllServiceState