O comando MoveTo migra dados de tabelas e partições para um novo caminho de armazenamento.
Pré-requisitos
O Java Development Kit (JDK) 8 está instalado.
Um cluster foi criado. Para mais informações, consulte Create a cluster.
Visão geral
O comando MoveTo copia os dados subjacentes e atualiza automaticamente os metadados para migrar completamente os dados de tabelas e partições para um novo caminho. Use condições de filtro para copiar múltiplas partições simultaneamente. Salvaguardas integradas protegem a integridade dos dados durante a migração.
Limites
O comando MoveTo é compatível com clusters que executam EMR V3.36.0 ou posterior, ou EMR V5.2.0 ou posterior.
Usar o comando MoveTo
Apenas um processo MoveTo pode ser executado em um cluster por vez. Se já houver um processo MoveTo em execução, o novo processo não conseguirá obter o lock de configuração e será encerrado. O sistema notifica você sobre o processo em andamento. Nesse caso, interrompa o processo em execução e inicie um novo, ou aguarde a conclusão do processo atual.
Faça login no cluster via Secure Shell (SSH). Para mais informações, consulte Log on to a cluster.
-
Execute o comando a seguir para visualize as informações de ajuda.
jindo table -help moveToAs informações de ajuda são semelhantes ao seguinte:
<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.A sintaxe do comando MoveTo é a seguinte:
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>]Parâmetro Descrição Obrigatório -t <dbName.tableName> Nome da tabela a ser movida. Use o formato database_name.table_name.O nome do banco de dados e o nome da tabela são separados por um ponto (.). A tabela pode ser particionada ou não particionada.
Sim -d <destination path> O caminho de destino. Independentemente de você mover partições ou uma tabela inteira não particionada, esse caminho corresponde ao local no nível da tabela. Ao mover uma partição, o caminho completo da partição é o caminho de destino mais o nome da partição, como <destination path>/p1=v1/p2=v2/.Sim -c "<condition>" | -fullTable É obrigatório especifique -c "<condition>"ou-fullTable.- Com
-fullTable, toda a tabela é movida. A tabela pode ser particionada ou não particionada. - Com
-c "<condition>", uma condição de filtro é aplicada para selecione as partições a mover. Operadores comuns, como o sinal de maior que (>), são compatíveis.Por exemplo, para uma coluna de chave de partição
dsdo tipo String, para selecione partições cujo nome seja maior que 'd', use-c " ds > 'd' ".
Não -b/before <before days> Move apenas tabelas ou partições criadas há mais de um número especificado de dias. Não -p/-parallel <parallelism> O grau de paralelismo da operação de migração. Não -s/-storagePolicy <OSS storage policy> A política de armazenamento para dados copiados para o OSS. As seguintes políticas estão disponíveis: - Standard: (Archive Storage).
- IA: armazenamento de Acesso Infrequente (IA).
- Storage class: Standard
- ColdArchive: armazenamento Cold Archive.Nota Certifique-se de que esse recurso esteja ativado no seu bucket OSS antes de usar esta política.
Não -o/-overWrite Define se o caminho de destino será sobrescrito. Para uma tabela particionada, esta opção limpa apenas os caminhos das partições a serem movidas, não o caminho completo da tabela. Não -r/-removeSource Define se os dados de origem serão removidos após a conclusão da migração e a atualização dos metadados. Para uma tabela particionada, esta opção remove apenas os caminhos de origem das partições que foram movidas com sucesso. Não -skipTrash Define se a Lixeira será ignorada ao remover o caminho de origem. Nota Este parâmetro é aplicável apenas quando -r/-removeSource é especificado.Não -e/-explain Quando especificado, o comando é executado em modo de explicação. Ele lista as partições que seriam movidas, mas não move nenhum dado de fato. Não -l/-logDir <log directory> Especifica o diretório para os arquivos de log. Não - Com
Configure o diretório de lock
A ferramenta MoveTo utiliza um lock de processo, que requer um caminho no Hadoop Distributed File System (HDFS) para armazenar o arquivo LOCK. Por padrão, o caminho é
hdfs:///tmp/jindotable-lock/
.
O caminho para o arquivo LOCK deve ser um caminho HDFS. Caso você não tenha as permissões necessárias para o caminho padrão, siga as etapas abaixo para configure um caminho personalizado.
-
Acesse a página do service HDFS.
Faça login no Alibaba Cloud E-MapReduce console.
Na barra de menus superior, selecione a região e o grupo de recursos onde seu cluster está localizado.
Clique em Clusters.
Na página Clusters, clique em Details na linha do cluster desejado.
No painel de navegação à esquerda, escolha Services > HDFS.
-
Modifique a configuração.
Na página do service HDFS, clique em Configure. Em seguida, clique na aba hdfs-site ou core-site.
No canto superior direito, clique em Custom Configuration.
-
Na caixa de diálogo Add Configuration Item, adicione o item de configuração jindotable.moveto.tablelock.base.dir e defina seu valor como um caminho HDFS existente.
ImportanteAntes de configure um diretório de lock personalizado, certifique-se de que nenhum processo MoveTo esteja em execução em qualquer nó do cluster. Caso contrário, a operação MoveTo poderá falhar ou causar corrupção de dados.
-
Salve a configuração.
No canto superior direito, clique em Save.
Na caixa de diálogo Confirm, insira o motivo da alteração e clique em OK.