Le service de transfert de stockage est compatible avec les transferts depuis des sources HDFS (système de fichiers distribué Hadoop) sur site et cloud.
Les transferts depuis HDFS doivent utiliser Cloud Storage comme destination.
Les cas d'utilisation incluent la migration d'un stockage sur site vers Cloud Storage, l'archivage de données pour libérer de l'espace de stockage sur site, la réplication de données vers Google Cloud pour assurer la continuité des opérations ou le transfert de données vers Google Cloud pour les analyser et les traiter.
Prérequis
Avant de configurer votre transfert, assurez-vous d'avoir configuré les éléments suivants :
- Autorisations utilisateur : assurez-vous que votre compte utilisateur ou votre compte de service géré par l'utilisateur dispose des autorisations nécessaires pour créer des jobs de transfert et des pools d'agents. Consultez Autorisations utilisateur requises.
- Autorisations au niveau du projet basées sur l'agent : assurez-vous d'avoir configuré les rôles requis au niveau du projet pour votre agent de service et votre compte d'agent de transfert. Consultez Autorisations au niveau du projet basées sur l'agent.
- Autorisations du bucket de destination : accordez les autorisations requises sur votre bucket Cloud Storage de destination. Consultez Configurer l'accès à un récepteur : Cloud Storage.
Installer des agents dans un pool d'agents
Les transferts basés sur des agents utilisent des agents logiciels pour orchestrer les transferts. Ces agents doivent être installés sur une ou plusieurs machines ayant accès à votre système de fichiers. Les agents doivent avoir accès au namenode, à tous les datanodes, au serveur de gestion des clés (KMS) Hadoop et au centre de distribution de clés (KDC) Kerberos.
Les agents de transfert travaillent ensemble dans un pool d'agents. L'augmentation du nombre d'agents peut améliorer les performances globales du job, mais cela dépend de plusieurs facteurs.
L'ajout d'agents peut être utile, jusqu'à environ la moitié du nombre de nœuds de votre cluster HDFS. Par exemple, avec un cluster de 30 nœuds, passer de 5 à 15 agents devrait améliorer les performances, mais au-delà de 15, cela ne fera probablement pas beaucoup de différence.
Pour un petit cluster HDFS, un seul agent peut suffire.
Les agents supplémentaires ont tendance à avoir un impact plus important sur les performances lorsqu'un transfert inclut un grand nombre de petits fichiers. Le service de transfert de stockage atteint un débit élevé en parallélisant les tâches de transfert entre plusieurs agents. Plus la charge de travail contient de fichiers, plus il est avantageux d'ajouter des agents.
Créer un pool d'agents
Créez un pool d'agents. Utilisez votre compte utilisateur pour cette action.
Installer des agents
Installez des agents dans le pool d'agents. Utilisez votre compte d'agent de transfert
pour cette action.
Console Google Cloud
Dans la console Google Cloud , accédez à la page Pools d'agents.
Sélectionnez le pool d'agents auquel ajouter le nouvel agent.
Cliquez sur Installer l'agent.
Suivez les instructions pour installer et exécuter l'agent.
Pour en savoir plus sur les options de ligne de commande de l'agent, consultez la section Options de ligne de commande de l'agent.
CLI gcloud
Pour installer un ou plusieurs agents à l'aide de la gcloud CLI, exécutez la commande 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 \
Remplacez les éléments suivants :
--hdfs-namenode-urispécifie un cluster HDFS, y compris un schéma, un namenode et un port, au format URI. Exemple :rpc://my-namenode:8020http://my-namenode:9870
Utilisez HTTP ou HTTPS pour WebHDFS. Si aucun schéma n'est fourni, nous supposons qu'il s'agit d'un RPC. Si aucun port n'est fourni, la valeur par défaut est
8020pour RPC,9870pour HTTP et9871pour HTTPS. Par exemple, l'entréemy-namenodedevientrpc://my-namenode:8020.Si votre cluster est configuré avec plusieurs nœuds de noms, spécifiez le nœud principal actuel. Pour en savoir plus, consultez Clusters avec plusieurs nœuds de noms.
--hdfs-usernameest le nom d'utilisateur permettant de se connecter à un cluster HDFS avec une authentification simple. Omettez cette option si vous vous authentifiez avec Kerberos ou si vous vous connectez sans authentification.--hdfs-data-transfer-protection(facultatif) est le paramètre de qualité de protection (QOP) côté client pour les clusters Kerberized. La valeur ne peut pas être plus restrictive que la valeur QOP côté serveur. Les valeurs valides sontauthentication,integrityetprivacy.
Si vous vous authentifiez avec Kerberos, incluez également les options suivantes :
--kerberos-config-fileest le chemin d'accès à un fichier de configuration Kerberos. Exemple :--kerberos-config-file=/etc/krb5.conf.--kerberos-user-principalest le compte principal de l'utilisateur Kerberos à utiliser. Exemple :--kerberos-user-principal=user1.--kerberos-keytab-fileest le chemin d'accès à un fichier Keytab contenant le compte principal de l'utilisateur spécifié avec l'option--kerberos-user-principal. Exemple :--kerberos-keytab-file=/home/me/kerberos/user1.keytab.--kerberos-service-principalest le compte principal du service Kerberos à utiliser, au format<primary>/<instance>. Le domaine est mappé à partir de votre fichier de configuration Kerberos. Tout domaine fourni est ignoré. Si cette option n'est pas spécifiée, la valeur par défaut esthdfs/<namenode_fqdn>, où<namenode_fqdn>est le nom de domaine complet spécifié dans le fichier de configuration.Par exemple,
--kerberos-service-principal=hdfs/my-namenode.a.example.com.
L'outil vous guide tout au long du processus d'installation des agents. Cette commande installe le ou les agents NUM_AGENTS sur votre ordinateur, mappés au nom du pool spécifié en tant que POOL_NAME et authentifie l'agent à l'aide de vos identifiants gcloud. Si le nom du pool n'existe pas, une erreur est renvoyée.
L'option --mount-directories est facultative, mais vivement recommandée. Sa valeur est une liste de répertoires du système de fichiers, séparés par une virgule, auxquels l'agent est autorisé à accéder.
Si vous omettez cette option, l'intégralité du système de fichiers est installée sur le conteneur de l'agent. Pour en savoir plus, consultez la documentation de référence sur gcloud.
docker run
Avant d'utiliser docker run pour installer des agents, suivez les instructions pour installer Docker.
La commande docker run installe un agent. Pour augmenter le nombre d'agents dans votre pool, exécutez à nouveau cette commande autant de fois que nécessaire.
Les options de commande requises dépendent du type d'authentification que vous utilisez.
Kerberos
Pour vous authentifier auprès de votre système de fichiers à l'aide de Kerberos, utilisez la commande suivante :
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
Remplacez les éléments suivants :
--network=hostdoit être omis si vous exécutez plusieurs agents sur cette machine.--hdfs-namenode-uri: schéma, namenode et port, au format URI, représentant un cluster HDFS. Exemple :rpc://my-namenode:8020http://my-namenode:9870
Utilisez HTTP ou HTTPS pour WebHDFS. Si aucun schéma n'est fourni, nous supposons qu'il s'agit d'un RPC. Si aucun port n'est fourni, la valeur par défaut est 8020 pour RPC, 9870 pour HTTP et 9871 pour HTTPS. Par exemple, l'entrée my-namenode devient rpc://my-namenode:8020.
Si votre cluster est configuré avec plusieurs nœuds de noms, spécifiez le nœud principal actuel. Pour en savoir plus, consultez Clusters avec plusieurs nœuds de noms.
--kerberos-config-file: chemin d'accès à un fichier de configuration Kerberos. La valeur par défaut est/etc/krb5.conf.--kerberos-user-principal: compte principal de l'utilisateur Kerberos.--kerberos-keytab-file: chemin d'accès à un fichier Keytab contenant le compte principal d'utilisateur spécifié avec--kerberos-user-principal.--kerberos-service-principal: compte principal du service Kerberos à utiliser, au format "service/instance". Le domaine est mappé à partir de votre fichier de configuration Kerberos. Tout domaine fourni est ignoré. Si cette option n'est pas spécifiée, la valeur par défaut esthdfs/<namenode_fqdn>, oùfqdnest le nom de domaine complet.
Authentification simple
Pour vous authentifier auprès de votre système de fichiers à l'aide de l'authentification simple :
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}"
Remplacez les éléments suivants :
--hdfs-username: nom d'utilisateur à utiliser lors de la connexion à un cluster HDFS à l'aide de l'authentification simple.--hdfs-namenode-uri: schéma, namenode et port, au format URI, représentant un cluster HDFS. Exemple :rpc://my-namenode:8020http://my-namenode:9870
Utilisez HTTP ou HTTPS pour WebHDFS. Si aucun schéma n'est fourni, nous supposons qu'il s'agit d'un RPC.
Si aucun port n'est fourni, la valeur par défaut est 8020 pour RPC, 9870 pour HTTP et 9871 pour HTTPS. Par exemple, l'entrée my-namenode devient rpc://my-namenode:8020.
Si votre cluster est configuré avec plusieurs nœuds de noms, spécifiez le nœud principal actuel. Pour en savoir plus, consultez Clusters avec plusieurs nœuds de noms.
Pas d'authentification
Pour vous connecter à votre système de fichiers sans authentification :
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 \
Remplacez les éléments suivants :
--hdfs-namenode-uri: schéma, namenode et port, au format URI, représentant un cluster HDFS. Exemple :rpc://my-namenode:8020http://my-namenode:9870
Utilisez HTTP ou HTTPS pour WebHDFS. Si aucun schéma n'est fourni, nous supposons qu'il s'agit d'un RPC.
Si aucun port n'est fourni, la valeur par défaut est 8020 pour RPC, 9870 pour HTTP et 9871 pour HTTPS. Par exemple, l'entrée my-namenode devient rpc://my-namenode:8020.
Si votre cluster est configuré avec plusieurs nœuds de noms, spécifiez le nœud principal actuel. Pour en savoir plus, consultez Clusters avec plusieurs nœuds de noms.
Options de transfert
Les fonctionnalités suivantes du service de transfert de stockage sont disponibles pour les transferts de HDFS vers Cloud Storage.
Les fichiers transférés depuis HDFS ne conservent pas leurs métadonnées.
Créer un transfert
N'incluez pas d'informations sensibles telles que des informations permettant d'identifier personnellement l'utilisateur ou des données de sécurité dans le nom de votre job de transfert. Les noms de ressources peuvent être propagés aux noms d'autres ressources Google Cloud et peuvent être exposés aux systèmes internes de Google en dehors de votre projet.
Le service de transfert de stockage fournit plusieurs interfaces permettant de créer un transfert.
Console Google Cloud
Accédez à la page Service de transfert de stockage dans la console Google Cloud .
Cliquez sur Créer une tâche de transfert. La page Créer une tâche de transfert s'affiche.
Sélectionnez Système de fichiers distribué Hadoop comme Type de source. La destination doit être définie sur Google Cloud Storage.
Cliquez sur Next step (Étape suivante).
Configurer votre source
Spécifiez les informations requises pour ce transfert :
Sélectionnez le pool d'agents que vous avez configuré pour ce transfert.
Saisissez le chemin d'accès à partir duquel effectuer le transfert, par rapport au répertoire racine.
Si vous le souhaitez, spécifiez les filtres à appliquer aux données sources.
Cliquez sur Étape suivante.
Configurer le récepteur
Dans le champ Bucket ou dossier, saisissez le nom du bucket de destination et (éventuellement) le nom du dossier, ou cliquez sur Parcourir pour sélectionner un bucket dans une liste existante de buckets de votre projet actuel. Pour créer un bucket, cliquez sur
Créer un bucket.Cliquez sur Étape suivante.
Programmer le transfert
Vous pouvez programmer votre transfert pour qu'il ne s'exécute qu'une seule fois, ou bien configurer un transfert récurrent.
Cliquez sur Étape suivante.
Choisir les paramètres de transfert
Dans le champ Description, saisissez une description du transfert. Nous vous recommandons de saisir une description pertinente et unique afin de pouvoir différencier les tâches.
Sous Options de métadonnées, sélectionnez votre classe de stockage Cloud Storage et indiquez si vous souhaitez enregistrer l'heure de création de chaque objet. Pour en savoir plus, consultez la section Conservation des métadonnées.
Sous Écrasement, sélectionnez l'une des options suivantes :
Jamais : n'écrase pas les fichiers de destination. Si un fichier portant le même nom existe déjà, il ne sera pas transféré.
S'ils sont différents : écrase les fichiers de destination si le fichier source du même nom contient d'autres ETags ou valeurs de somme de contrôle.
Toujours : écrit toujours les fichiers de destination lorsque le fichier source porte le même nom, même s'ils sont identiques.
Sous Dans quel contexte effectuer des suppressions, sélectionnez l'une des options suivantes :
Jamais : ne supprime jamais les fichiers de la source ou de la destination.
Supprimer les fichiers de la destination s'ils ne figurent pas dans la source : si les fichiers du bucket Cloud Storage de destination ne figurent pas dans la source, supprimez-les du bucket.
Cette option garantit que le bucket Cloud Storage de destination correspond exactement à votre source.
Indiquez si vous souhaitez activer la journalisation des transferts et/ou les notifications Pub/Sub.
Cliquez sur Créer pour créer la tâche de transfert.
gcloud CLI
Pour créer une tâche de transfert, utilisez la commande gcloud transfer jobs create. La création d'une tâche lance le transfert spécifié, sauf si un calendrier ou une valeur --do-not-run est spécifié.
gcloud transfer jobs create \
hdfs:///PATH/ gs://BUCKET_NAME/PATH/ \
--source-agent-pool=AGENT_POOL_NAME
Remplacez les éléments suivants :
PATHest un chemin absolu à partir de la racine du cluster HDFS. Le nœud de nom et le port du cluster sont configurés au niveau de l'agent. Par conséquent, la commande de création de job ne doit spécifier que le chemin d'accès (facultatif) et le pool d'agents.--source-agent-poolspécifie le pool d'agents sources à utiliser pour ce transfert.
Des options supplémentaires vous sont proposées :
--do-not-runempêche le service de transfert de stockage d'exécuter la tâche lors de l'envoi de la commande. Pour exécuter la tâche, mettez-la à jour pour ajouter une planification ou utilisezjobs runpour la démarrer manuellement.--manifest-filespécifie le chemin d'accès à un fichier CSV dans Cloud Storage contenant une liste des fichiers à transférer depuis votre source. Pour en savoir plus sur la mise en forme du fichier manifeste, consultez la section Transférer des fichiers ou objets spécifiques à l'aide d'un fichier manifeste.Informations sur la tâche: vous pouvez spécifier
--nameet--description.Programmation: spécifiez
--schedule-starts,--schedule-repeats-every,--schedule-repeats-untilou--do-not-run.Conditions des objets: utilisez les conditions pour déterminer les objets à transférer. Cela inclut
--include-prefixeset--exclude-prefixes, ainsi que les conditions basées sur l'heure dans--include-modified-[before | after]-[absolute | relative]. Si vous avez spécifié un dossier avec votre source, les filtres de préfixe sont relatifs à ce dossier. Pour en savoir plus, consultez Filtrer les objets sources par préfixe.Options de transfert : indiquez si vous souhaitez remplacer les fichiers de destination (
--overwrite-when=differentoualways) et si vous souhaitez supprimer certains fichiers pendant ou après le transfert (--delete-from=destination-if-uniqueousource-after-transfer) ; et éventuellement définissez une classe de stockage sur des objets transférés (--custom-storage-class).Notifications: configurez des notifications Pub/Sub pour les transferts avec
--notification-pubsub-topic,--notification-event-typeset--notification-payload-format.
Pour afficher toutes les options, exécutez gcloud transfer jobs create --help ou reportez-vous à la documentation de référence gcloud.
API REST
Pour créer un transfert à partir d'une source HDFS à l'aide de l'API REST, créez un objet JSON semblable à l'exemple suivant.
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
...
"transferSpec": {
"source_agent_pool_name":"POOL_NAME",
"hdfsDataSource": {
"path": "/mount"
},
"gcsDataSink": {
"bucketName": "SINK_NAME"
},
"transferOptions": {
"deleteObjectsFromSourceAfterTransfer": false
}
}
}
Pour en savoir plus sur les autres champs compatibles, consultez la documentation de référence sur transferJobs.create.
Clusters avec plusieurs nœuds de noms
Les agents du service de transfert de stockage ne peuvent être configurés qu'avec un seul namenode. Si votre cluster HDFS est configuré avec plusieurs namenodes ("haute disponibilité") et qu'un événement de basculement entraîne un nouveau namenode principal, vous devez réinstaller vos agents avec le namenode approprié.
Pour supprimer les anciens agents, consultez Supprimer un agent.
Vous pouvez récupérer le namenode actif de votre cluster en exécutant la commande suivante :
hdfs haadmin -getAllServiceState