El Servicio de transferencia de almacenamiento admite transferencias desde fuentes en la nube y del sistema de archivos distribuidos de Hadoop (HDFS) local.
Las transferencias desde HDFS deben usar Cloud Storage como destino.
Los casos de uso 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 la continuidad del negocio o la transferencia de datos a Google Cloud para su análisis y procesamiento.
Configura permisos
Antes de crear una transferencia, debes configurar los permisos para las siguientes entidades:
La cuenta de usuario que se usa para crear la transferencia. Esta es la cuenta con la que se accedió a la consola de Google Cloud o la cuenta que se especifica cuando se autentica 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 el agente de servicio, que usa el Servicio de transferencia de almacenamiento. Por lo general, 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 permisos de Google Cloud para 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 administrada por el usuario para autenticarse. |
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 deben instalarse en una o más máquinas con acceso al sistema de archivos. Los agentes deben tener acceso al nombre del nodo, a todos los datanode, al servidor de administración de claves (KMS) de Hadoop y al centro de distribución de claves (KDC) de Kerberos.
Los agentes de transferencia trabajan en conjunto en un grupo de agentes. El aumento de la cantidad de agentes puede incrementar el rendimiento general de los trabajos, pero esto depende de varios factores.
Agregar más agentes puede ayudar, hasta aproximadamente la mitad de la cantidad de nodos en tu clúster de HDFS. Por ejemplo, con un clúster de 30 nodos, aumentar de 5 a 15 agentes debería mejorar el rendimiento, pero es poco probable que más de 15 no haga una gran diferencia.
Para un clúster HDFS pequeño, un agente puede ser suficiente.
Los agentes adicionales tienden a tener un mayor impacto en el rendimiento cuando una transferencia incluye una gran cantidad de archivos pequeños. El Servicio de transferencia de almacenamiento logra una alta capacidad de procesamiento mediante la paralelización de las tareas de transferencia entre varios agentes. Cuantos más archivos haya en la carga de trabajo, más beneficios será agregar más agentes.
Crea 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 transferencia para realizar esta acción.
Consola de Google Cloud
En la consola de Google Cloud, ve a la página Grupos de agentes.
Selecciona el grupo de agentes al que deseas agregar el agente nuevo.
Haz clic en Instalar agente.
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.
gcloud CLI
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 HDFS que incluye un esquema, un nodo de nombre y un puerto en formato de URI. Por ejemplo:rpc://my-namenode:8020
http://my-namenode:9870
Usa HTTP o HTTPS para WebHDFS. Si no se proporciona un esquema, suponemos RPC. Si no se proporciona ningún puerto, el valor predeterminado es
8020
para RPC,9870
para HTTP y9871
para HTTPS. Por ejemplo, lamy-namenode
de entrada se convierte enrpc://my-namenode:8020
.Si tu clúster está configurado con varios namenodes, especifica el nodo principal actual. Consulta Clústeres con varios nodos de nombre para obtener más información.
--hdfs-username
es el nombre de usuario para conectarse a un clúster de HDFS con una autenticación simple. Omite esta marca si autenticas con Kerberos o si te conectas sin autenticación.--hdfs-data-transfer-protection
(opcional) es la configuración de calidad de protección (QOP) del cliente para clústeres kerberizados. El valor no puede ser más restrictivo que el valor de QOP del servidor. Los valores válidos sonauthentication
,integrity
yprivacy
.
Si autenticas con Kerberos, también incluye 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 la principal de usuario de Kerberos que se usará. Por ejemplo,--kerberos-user-principal=user1
.--kerberos-keytab-file
es la ruta de acceso a un archivo Keytab que contiene la principal de usuario especificada 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á, con el formato<primary>/<instance>
. El dominio se asigna a partir de tu archivo de configuración de Kerberos; se ignora cualquier dominio proporcionado. Si no se especifica esta marca, el valor predeterminado eshdfs/<namenode_fqdn>
, en el que<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 es muy recomendable. Su valor es una lista de directorios separados por comas en el sistema de archivos al que se le otorga acceso al agente.
Si omites esta marca, se activa todo el sistema de archivos en el contenedor del agente. Consulta la referencia de gcloud
para obtener más detalles.
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 la cantidad de agentes en tu grupo, vuelve a ejecutar este comando tantas veces como sea necesario.
Las marcas de comando requeridas dependen del tipo de autenticación que uses.
Kerberos
Para autenticar 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 estás ejecutando más de un agente en esta máquina. --hdfs-namenode-uri
: Es un esquema, un nodo de nombre y un puerto, en formato de 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, suponemos 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 my-namenode
de entrada 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 nodos de nombre para obtener más información.
--kerberos-config-file
: Ruta a un archivo de configuración de Kerberos. El valor predeterminado es/etc/krb5.conf
.--kerberos-user-principal
: La principal del usuario de Kerberos.--kerberos-keytab-file
: Ruta de acceso a un archivo Keytab que contiene la principal de usuario especificada con--kerberos-user-principal
.--kerberos-service-principal
: Es el principal del servicio de Kerberos que se usará, con el formato “servicio/instancia”. El dominio se asigna a partir de tu archivo de configuración de Kerberos; se ignora cualquier dominio proporcionado. Si no se especifica esta marca, el valor predeterminado eshdfs/<namenode_fqdn>
, en el quefqdn
es el nombre de dominio completamente calificado.
Autenticación simple
Para autenticarte en tu sistema de archivos mediante la 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 se conecte a un clúster de HDFS con una autenticación simple.--hdfs-namenode-uri
: Es un esquema, un nodo de nombre y un puerto, en formato de 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, suponemos 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 my-namenode
de entrada 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 nodos de nombre para obtener más información.
Sin autenticación
Para conectarte a tu 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
: Es un esquema, un nodo de nombre y un puerto, en formato de 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, suponemos 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 my-namenode
de entrada 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 nodos de nombre para obtener más información.
Opciones de transferencia
Las siguientes funciones del Servicio de transferencia de almacenamiento están disponibles para 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 de identificación personal (PII) o datos de seguridad, en el nombre de tu trabajo de transferencia. Los nombres de recursos pueden propagarse a los nombres de otros recursos de Google Cloud y pueden exponerse a sistemas internos de Google fuera del proyecto.
El Servicio de transferencia de almacenamiento proporciona múltiples interfaces para crear una transferencia.
Consola de Google Cloud
Ve a la página Servicio de transferencia de almacenamiento en la consola de Google Cloud.
Haz clic en Crear trabajo de transferencia. Se muestra la página Crea un trabajo de transferencia.
En Tipo de fuente, selecciona Hadoop Distributed File System. El destino debe ser Google Cloud Storage.
Haz clic en Próximo paso.
Configura la fuente
Especifica la información necesaria para esta transferencia:
Selecciona el grupo de agentes que configuraste para esta transferencia.
Ingresa la Ruta de acceso desde la que deseas realizar la transferencia, en relación con el directorio raíz.
De manera opcional, especifica cualquier filtro para aplicar a los datos de origen.
Haz clic en Próximo paso.
Configura tu receptor
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 Crear bucket nuevo.
Haz clic en Próximo paso.
Programar la transferencia
Puedes programar tu transferencia para que se ejecute una sola vez o configurar una transferencia recurrente.
Haz clic en Próximo paso.
Elige la configuración de transferencia
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.
En Opciones de metadatos, selecciona tu clase de almacenamiento de Cloud Storage y si deseas guardar la hora de creación de cada objeto. Consulta Preservación de metadatos para obtener más detalles.
En Cuándo reemplazar, selecciona una de las siguientes opciones:
Never: No reemplace los archivos de destino. Si existe un archivo 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.
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.
Selecciona si deseas habilitar el registro de transferencia o las 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 nodo y el puerto del clúster se configuran a nivel del agente, por lo que el comando de creación del trabajo 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 usajobs 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 fuente, los filtros de prefijo son relacionados con esa carpeta. Consulta Filtra los objetos de origen por prefijo para obtener más información.Opciones de transferencia: Especifica si se deben reemplazar los archivos de destino (
--overwrite-when=different
oalways
) y si se deben borrar ciertos archivos durante o después de la transferencia (--delete-from=destination-if-unique
osource-after-transfer
). De forma opcional, establece 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 de 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 los campos compatibles adicionales.
Clústeres con varios nombres de nodos
Los agentes del Servicio de transferencia de almacenamiento solo se pueden configurar con un único nombre de nodo. Si el clúster de HDFS está configurado con varios nodos de nombre ("alta disponibilidad") y hay un evento de conmutación por error que genera un nodo de nombre principal nuevo, debes volver a instalar tus agentes con el nombre del nodo correcto.
Para borrar los agentes anteriores, consulta Borra un agente.
Para recuperar el nombre del nodo activo de tu clúster, ejecuta lo siguiente:
hdfs haadmin -getAllServiceState