Transférer des données de HDFS vers Cloud Storage

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 à partir de HDFS doivent utiliser Cloud Storage comme destination.

Les cas d'utilisation incluent la migration du 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.

Configurer les autorisations

Avant de créer un transfert, vous devez configurer les autorisations pour les éléments suivants : entités:

Compte utilisateur utilisé pour créer le transfert. Il s'agit du compte connecté à la console Google Cloud ou du compte spécifié lors de l'authentification à la CLI gcloud. Le compte utilisateur peut soit un compte utilisateur standard, soit un compte de service géré par l'utilisateur.
Compte de service géré par Google, également appelé agent de service, utilisé par le service de transfert de stockage. Ce compte est généralement identifié par son adresse e-mail, qui utilise le format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
Le compte d'agent de transfert qui fournit les services Google Cloud pour les agents de transfert. Les comptes d'agent de transfert utilisent les identifiants de l'utilisateur qui les installe ou les identifiants d'un compte de service géré par l'utilisateur pour s'authentifier.

Voir Autorisations de transfert basées sur les agents pour obtenir des instructions.

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 à "namenode", à tous les nœuds de données le serveur de gestion des clés Hadoop (KMS) et le centre de distribution de clés Kerberos (KDC).

Les agents de transfert fonctionnent ensemble dans un pool d'agents. Augmenter le nombre d'agents peut améliorer les performances globales de la tâche, mais cela dépend de plusieurs facteurs.

  • Il peut être utile d'ajouter d'autres agents (jusqu'à environ la moitié du nombre de nœuds dans votre HDFS). cluster. Par exemple, avec un cluster de 30 nœuds, qui passe de 5 à 15 agents devrait améliorer les performances, mais au-delà de 15, il est peu probable que cela fasse une grande 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 comprend un grand nombre de petits fichiers. le service de transfert de stockage atteint en parallèle des tâches de transfert entre plusieurs agents. Plus la charge de travail contient de fichiers, plus il est intéressant d'ajouter des agents.

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 pool d'agents ou dans le préfixe de l'ID de l'agent. Les noms de ressources peuvent être propagés vers les noms d'autres ressources Google Cloud et peuvent être exposés aux systèmes internes de Google, en dehors de votre projet.

Créer un pool d'agents

Créez un pool d'agents. Utilisez votre compte utilisateur Symbole du compte utilisateur pour cette action.

Installer des agents

Installez des agents dans le pool d'agents. Pour effectuer cette action, utilisez votre compte d'agent de transfert .

console Google Cloud

  1. Dans la console Google Cloud, accédez à la page Pools d'agents.

    Accéder aux pools d'agents

  2. Sélectionnez le pool d'agents auquel ajouter le nouvel agent.

  3. Cliquez sur Installer l'agent.

  4. 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 CLI gcloud, 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 \

Où :

  • --hdfs-namenode-uri spécifie un cluster HDFS y compris un schéma. namenode et port, au format URI. Exemple :

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

    Utilisez HTTP ou HTTPS pour WebHDFS. Si aucun schéma n'est fourni, nous considérons qu'il s'agit du protocole 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. Voir Clusters avec plusieurs namenodes pour en savoir plus des informations.

  • --hdfs-username est le nom d'utilisateur permettant de se connecter à un cluster HDFS avec une authentification simple. Omettez cet indicateur si vous vous authentifiez avec Kerberos, ou si vous vous connectez sans authentification.

  • --hdfs-data-transfer-protection (facultatif) correspond à la qualité côté client de de protection QOP (QOP) pour les clusters kerberisés. La valeur ne peut pas être plus restrictive que la valeur QOP côté serveur. Les valeurs valides sont authentication, integrity et privacy.

Si vous vous authentifiez avec Kerberos, incluez également les indicateurs suivants :

  • --kerberos-config-file est le chemin d'accès à un fichier de configuration Kerberos. Exemple : --kerberos-config-file=/etc/krb5.conf.

  • --kerberos-user-principal est le principal utilisateur Kerberos à utiliser. Exemple : --kerberos-user-principal=user1.

  • --kerberos-keytab-file est le chemin d'accès à un fichier Keytab contenant l'utilisateur. principal spécifié avec l'option --kerberos-user-principal. Exemple : --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal est le nom 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 cet indicateur n'est pas spécifié, la valeur par défaut est hdfs/<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 accorder l'accès à l'agent. Si vous omettez cet indicateur, l'ensemble du système de fichiers est installé sur le conteneur de l'agent. Voir la Documentation de référence sur gcloud pour en savoir plus.

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 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 le 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

Où :

  • --network=host doit être omis si vous exécutez plusieurs agents sur cette machine.
  • --hdfs-namenode-uri : schéma, nom de nœud et port, au format URI, représentant un cluster HDFS. Exemple :

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

Utilisez HTTP ou HTTPS pour WebHDFS. Si aucun schéma n'est fourni, nous considérons qu'il s'agit du protocole 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 la section Clusters avec plusieurs nœuds d'index.

  • --kerberos-config-file : chemin d'accès à un fichier de configuration Kerberos. Par défaut est /etc/krb5.conf.
  • --kerberos-user-principal : compte principal utilisateur Kerberos.
  • --kerberos-keytab-file : chemin d'accès à un fichier Keytab contenant le principal utilisateur spécifié avec --kerberos-user-principal.
  • --kerberos-service-principal : compte principal de service Kerberos à utiliser, au format "service/instance". Le domaine est mappé à partir de votre fichier de configuration Kerberos. Tout domaine fourni est ignoré. Si cet indicateur n'est pas spécifié, le la valeur par défaut est hdfs/<namenode_fqdn>, où fqdn est le nom complet nom de domaine.

Authentification simple

Pour vous authentifier auprès de votre système de fichiers à l'aide d'une 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}"

Où :

  • --hdfs-username: nom d'utilisateur à utiliser lors de la connexion à un cluster HDFS à l'aide d'une authentification simple.
  • --hdfs-namenode-uri : schéma, nom de nœud et port, au format URI, représentant un cluster HDFS. Exemple :
    • rpc://my-namenode:8020
    • http://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 NameNodes, spécifiez nœud principal actuel. Pour en savoir plus, consultez la section Clusters avec plusieurs nœuds d'index.

Aucune 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 \

Où :

  • --hdfs-namenode-uri : schéma, nom de nœud et port, au format URI, représentant un cluster HDFS. Exemple :
    • rpc://my-namenode:8020
    • http://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 nameNodes, spécifiez nœud principal actuel. Voir Clusters avec plusieurs namenodes pour en savoir plus des informations.

Options de transfert

Les fonctionnalités suivantes du service de transfert de stockage sont disponibles pour les transferts depuis HDFS vers Cloud Storage.

Les fichiers transférés depuis HDFS ne conservent pas leur métadonnées.

Créer un transfert

N'incluez pas d'informations sensibles, telles que des informations permettant d'identifier personnellement l'utilisateur. ou 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 à des systèmes internes à Google en dehors de votre projet.

Le service de transfert de stockage fournit plusieurs interfaces pour créer transfert de données.

console Google Cloud

  1. Accédez à la page Service de transfert de stockage dans Google Cloud Console.

    Accéder au service de transfert de stockage

  2. Cliquez sur Créer une tâche de transfert. La page Créer une tâche de transfert s'affiche.

  3. Sélectionnez Hadoop Distributed File System (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

  1. Spécifiez les informations requises pour ce transfert :

    1. Sélectionnez le pool d'agents que vous avez configuré pour ce transfert.

    2. Saisissez le chemin d'accès depuis lequel effectuer le transfert, relatif au répertoire racine.

  2. Vous pouvez éventuellement spécifier des filtres à appliquer aux données sources.

  3. Cliquez sur Étape suivante.

Configurer le récepteur

  1. 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 Icône Bucket Créer un bucket.

  2. 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

  1. 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.

  2. Sous Metadata options (Options de métadonnées), sélectionnez votre classe de stockage Cloud Storage. et s'il faut enregistrer chaque objet au moment de leur création. Pour en savoir plus, consultez la section Conservation des métadonnées.

  3. Sous Écrasement, sélectionnez l'une des options suivantes :

    • Jamais : n'écrasez pas les fichiers de destination. Si un fichier existe avec le même nom, 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.

  4. 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.

  5. Indiquez si vous souhaitez activer journalisation des transferts et/ou Notifications Pub/Sub

Cliquez sur Créer pour créer la tâche de transfert.

CLI gcloud

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

Où :

  • PATH est un chemin absolu à partir de la racine du cluster HDFS. Le nom de nœud et le port du cluster sont configurés au niveau de l'agent. La commande de création de tâche ne doit donc spécifier que le chemin (facultatif) et le pool d'agents.

  • --source-agent-pool spécifie le pool d'agents sources à utiliser pour ce transfert.

Des options supplémentaires vous sont proposées :

  • --do-not-run empê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 utilisez jobs run pour la démarrer manuellement.

  • --manifest-file spé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 --name et --description.

  • Programmation: spécifiez --schedule-starts, --schedule-repeats-every, --schedule-repeats-until ou --do-not-run.

  • Conditions des objets: utilisez les conditions pour déterminer les objets à transférer. Cela inclut --include-prefixes et --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 la section Filtrer les objets sources par préfixe.

  • Transfer options (Options de transfert) : indiquez si vous souhaitez remplacer la destination. (--overwrite-when=different ou always) et si vous souhaitez Supprimer certains fichiers pendant ou après le transfert (--delete-from=destination-if-unique ou source-after-transfer) ; et définir éventuellement une classe de stockage pour les objets transférés (--custom-storage-class).

  • Notifications: configurez des notifications Pub/Sub pour les transferts avec --notification-pubsub-topic, --notification-event-types et --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 composant NameNode. Si votre Le cluster HDFS est configuré avec plusieurs nœuds de noms ("haute disponibilité"). ou qu'un événement de basculement entraîne un nouveau nœud de nom principal, vous devez réinstallez vos agents avec le bon namenode.

Pour supprimer les anciens agents, consultez Supprimez un agent.

Vous pouvez récupérer le nomnode actif de votre cluster en exécutant la commande suivante :

hdfs haadmin -getAllServiceState