La commande MoveTo migre les données des tables et des partitions vers un nouveau chemin de stockage.
Prérequis
Le kit de développement Java (JDK) 8 est installé.
Un cluster a été créé. Pour plus d'informations, consultez la rubrique Créer un cluster.
Contexte
La commande MoveTo copie les données sous-jacentes et met automatiquement à jour les métadonnées afin de migrer intégralement les données des tables et des partitions vers un nouveau chemin. Utilisez des conditions de filtrage pour copier plusieurs partitions simultanément. Des mécanismes de sécurité intégrés garantissent l'intégrité des données pendant la migration.
Limites
La commande MoveTo est prise en charge sur les clusters exécutant EMR V3.36.0 ou version ultérieure, ainsi que sur ceux exécutant EMR V5.2.0 ou version ultérieure.
Utiliser la commande MoveTo
Un seul processus MoveTo peut s'exécuter à la fois sur un cluster. Si un processus MoveTo est déjà en cours d'exécution, un nouveau processus ne parvient pas à obtenir le verrou de configuration et se termine. Le système vous informe qu'un processus est en cours. Dans ce cas, arrêtez le processus en cours d'exécution et démarrez-en un nouveau, ou attendez la fin du processus actuel.
Connectez-vous au cluster via Secure Shell (SSH). Pour plus d'informations, consultez la rubrique Se connecter à un cluster.
-
Exécutez la commande suivante pour afficher l'aide.
jindo table -help moveToLes informations d'aide ressemblent à ce qui suit :
<dbName.tableName> The table to move. <destination path> The destination base directory which is always at the same level of a 'table location', where the moved partitions or un-partitioned data would located in. <condition>/-fullTable A filter condition to determine which partitions should be moved, supporting common operators (like '>') and built-in UDFs (like to_date) (UDFs not supported yet...), while -fullTable means that all partitions (or a whole un-partitioned table) should be moved. One but only one option must be specified among -c "<condition>" and -fullTable. <before days> Optional, saying that table/partitions should be moved only when they are created (not updated or modified) more than some days before from now. <parallelism> The maximum concurrency when copying partitions, 1 by default. <OSS storage policy>: Storage policy for OSS destination, which can be Standard (by default), IA, Archive, or ColdArchive. Not applicable for destinations other than OSS. NOTE: if you are willing to use ColdArchive storage policy, please make sure that Cold Archive has been enabled for your OSS bucket. -o/-overWrite Overwriting the final paths where the data would be moved. For partitioned tables this overwrites partitions' locations which are subdirectories of <destination path>; for un-partitioned table this overwrites the <destination path> itself. -r/-removeSource Let the source data be removed when the corresponding table/partition is successfully moved to the new destination. Otherwise (by default), the source data would be left as it was. -skipTrash Applicable only when [-r/-removeSource] is enabled. If present, source data would be immediately deleted from the file system, bypassing the trash. -e/-explain If present, the command would not really move data, but only prints the table/partitions that would be moved for given conditions. <log directory> A directory to locate log files, '/tmp/<current user>/' by default.La syntaxe de la commande MoveTo est la suivante :
jindo table -moveTo \ -t <dbName.tableName> \ -d <destination path> \ [-c "<condition>" | -fullTable] \ [-b/-before <before days>] \ [-p/-parallel <parallelism>] \ [-s/-storagePolicy <OSS storage policy>] \ [-o/-overWrite] \ [-r/-removeSource] \ [-skipTrash] \ [-e/-explain] \ [-l/-logDir <log directory>]Paramètre Description Obligatoire -t <dbName.tableName> Nom de la table à déplacer. Utilisez le format database_name.table_name.Le nom de la base de données et le nom de la table sont séparés par un point (.). La table peut être partitionnée ou non partitionnée.
Oui -d <destination path> Chemin de destination. Que vous déplaciez des partitions ou une table entière non partitionnée, ce chemin correspond à l'emplacement au niveau de la table. Si vous déplacez une partition, le chemin complet de la partition correspond au chemin de destination suivi du nom de la partition, par exemple <destination path>/p1=v1/p2=v2/.Oui -c "<condition>" | -fullTable Spécifiez soit -c "<condition>", soit-fullTable.- Si vous spécifiez
-fullTable, la table entière est déplacée. La table peut être partitionnée ou non partitionnée. - Si vous spécifiez
-c "<condition>", une condition de filtrage est fournie pour sélectionner les partitions à déplacer. Les opérateurs courants, tels que le signe supérieur à (>), sont pris en charge.Par exemple, pour une colonne de clé de partition
dsde type de données String, si vous souhaitez sélectionner les partitions dont le nom est supérieur à « d », utilisez-c " ds > 'd' ".
Non -b/before <before days> Déplace uniquement les tables ou partitions créées il y a plus d'un nombre de jours spécifié. Non -p/-parallel <parallelism> Degré de parallélisme de l'opération de migration. Non -s/-storagePolicy <OSS storage policy> Politique de stockage pour les données copiées vers OSS. Les politiques suivantes sont disponibles : - Standard : (Stockage d'archives).
- IA : Stockage à accès peu fréquent (IA).
- Classe de stockage : Standard
- ColdArchive : Stockage d'archives froides.Remarque Assurez-vous que cette fonctionnalité est activée pour votre compartiment OSS avant d'utiliser cette politique.
Non -o/-overWrite Indique s'il faut écraser le chemin de destination. Pour une table partitionnée, cette option efface uniquement les chemins des partitions à déplacer, et non le chemin entier de la table. Non -r/-removeSource Indique s'il faut supprimer les données source une fois la migration terminée et les métadonnées mises à jour. Pour une table partitionnée, cette option supprime uniquement les chemins source des partitions qui ont été déplacées avec succès. Non -skipTrash Indique s'il faut contourner la corbeille lors de la suppression du chemin source. Remarque Ce paramètre s'applique uniquement lorsque -r/-removeSource est spécifié.Non -e/-explain Si cette option est spécifiée, la commande s'exécute en mode explicatif. Elle répertorie les partitions qui seraient déplacées, mais ne déplace aucune donnée. Non -l/-logDir <log directory> Spécifie le répertoire des fichiers journaux. Non - Si vous spécifiez
Configurer le répertoire de verrouillage
L'outil MoveTo utilise un verrou de processus, qui nécessite un chemin Hadoop Distributed File System (HDFS) pour stocker le fichier LOCK. Par défaut, le chemin est
hdfs:///tmp/jindotable-lock/
.
Le chemin du fichier LOCK doit être un chemin HDFS. Si vous ne disposez pas des autorisations requises pour le chemin par défaut, suivez les étapes ci-dessous pour configurer un chemin personnalisé.
-
Accédez à la page du service HDFS.
Connectez-vous à la console Alibaba Cloud E-MapReduce.
Dans la barre de menu supérieure, sélectionnez la région et le groupe de ressources où se trouve votre cluster.
Cliquez sur l'onglet Clusters.
Sur la page Clusters, cliquez sur Details dans la ligne du cluster souhaité.
Dans le volet de navigation de gauche, choisissez Services > HDFS.
-
Modifiez la configuration.
Sur la page du service HDFS, cliquez sur l'onglet Configure. Cliquez ensuite sur l'onglet hdfs-site ou core-site.
Dans le coin supérieur droit, cliquez sur Custom Configuration.
-
Dans la boîte de dialogue Add Configuration Item, ajoutez l'élément de configuration jindotable.moveto.tablelock.base.dir et définissez sa valeur sur un chemin HDFS existant.
ImportantAvant de configurer un répertoire de verrouillage personnalisé, assurez-vous qu'aucun processus MoveTo n'est en cours d'exécution sur aucun nœud du cluster. Sinon, l'opération MoveTo risque d'échouer ou de provoquer une corruption des données.
-
Enregistrez la configuration.
Dans le coin supérieur droit, cliquez sur Save.
Dans la boîte de dialogue Confirm, saisissez une raison pour la modification et cliquez sur OK.