A integração de dados do DataWorks oferece suporte à sincronização de dados de alto desempenho entre fontes heterogêneas por meio do formato de armazenamento colunar Apache Arrow. Essa solução utiliza transferência direta em memória e tecnologia de cópia zero para converter a transferência de dados de um modelo baseado em linhas para um modelo baseado em colunas, aumentando significativamente o throughput de sincronização para grandes volumes de dados. Em cenários de teste, o desempenho pode aumentar quase 10 vezes.
Casos de uso
Ao processar grandes volumes de dados, soluções de sincronização baseadas em armazenamento por linhas frequentemente enfrentam gargalos de desempenho causados por serializações, desserializações e conversões de tipo frequentes. Esse cenário é comum durante migrações de data warehouse, como de Hive para MaxCompute, ou na construção de arquiteturas de data lakehouse. Tempos prolongados de sincronização para terabytes de dados podem comprometer o lançamento de serviços e a eficiência da análise de dados. Esta solução resolve a ineficiência no repasse de dados entre fontes de armazenamento colunar em grande escala e reduz o tempo de sincronização de horas para minutos.
Cenário 1: Migração de big data
Desafio: Migrar centenas de terabytes de dados do Hive para o MaxCompute consome muito tempo e atrasa o lançamento de serviços. Solução: Ative a sincronização de alto desempenho com Apache Arrow para transferir dados diretamente em formato colunar e evitar sobrecarga de conversão. Resultado: O tempo de migração cai de horas para minutos, com aumento de desempenho superior a 10x.
Cenário 2: Integração de fontes de dados heterogêneas e arquitetura de data lakehouse
Os dados fluem de forma livre e eficiente entre o data lake (como o ecossistema Hive) e o data warehouse (Hologres/MaxCompute). O valor central reside no uso de uma única cópia dos dados para múltiplas finalidades, possibilitando a sinergia entre lake e warehouse.
Arquitetura da solução
A integração de dados do DataWorks incorpora o padrão colunar em memória Apache Arrow. Ela refatora o método de transferência de dados entre o Reader e o Writer, alterando o processo de um tratamento baseado em linhas para uma passagem direta baseada em colunas.
Arquitetura tradicional de sincronização com armazenamento por linhas
Na arquitetura tradicional, os dados são processados linha por linha. Mesmo que a source e o destino utilizem formato de armazenamento colunar, como Parquet ou ORC, o mecanismo de sincronização converte os dados em objetos Record genéricos baseados em linhas. Esse formato foi projetado para armazenamento de linha única. Cada objeto Record define várias colunas (Columns), e cada Column contém o valor (Value) daquela coluna na linha atual. Considere, por exemplo, a sincronização de dados de armazenamento colunar do MaxCompute (ODPS) para o MaxCompute (ODPS):
Esse processo inclui as etapas abaixo e gera a seguinte sobrecarga de desempenho:
Decodificação pelo Reader: O reader lê dados colunares da source, como o MaxCompute, decodifica e converte linha por linha em objetos
Recordinternos do framework.Transferência pelo framework: O framework transfere uma grande quantidade de objetos
Recordpor meio de uma fila em memória.Codificação pelo Writer: O writer recupera os objetos
Recorddo framework e os codifica no formato colunar exigido pelo destino antes da gravação.
Esse fluxo envolve múltiplas conversões de formato de dados, serialização/desserialização e criação frequente de objetos. Consequentemente, há alto consumo de recursos de CPU e memória, coleta de lixo (GC) frequente e limitação do throughput geral.
Arquitetura de sincronização com armazenamento colunar Arrow
A nova arquitetura baseada em Arrow implementa um fluxo de dados colunares de ponta a ponta. Os dados mantêm seu formato de armazenamento colunar durante todo o pipeline de sincronização, o que evita a sobrecarga da conversão baseada em linhas.
A introdução da estrutura de dados ArrowTabularRecord otimiza o processo de sincronização da seguinte forma:
Leitura direta: O reader usa a API Tunnel Arrow do MaxCompute para ler dados colunares diretamente da source e os encapsula em objetos
ArrowTabularRecordpara entrega em lote ao framework.Transferência pelo framework: O framework transfere diretamente o
ArrowTabularRecord, que contém dados binários colunares.Gravação direta: O writer utiliza a API Tunnel Arrow para recuperar dados binários formatados em Arrow diretamente do
ArrowTabularRecord. Em seguida, emprega tecnologia de cópia zero para transferir os dados ao destino, como um Tunnel Server, sem nova serialização.
Essa arquitetura fornece suporte nativo ao Arrow e elimina a etapa intermediária de conversão baseada em linhas. Assim, alcança-se uma "sincronização em curto-circuito" de ponta a ponta para armazenamentos colunares, melhorando expressivamente o throughput e reduzindo a latência.
Etapas de implementação
Adicione parâmetros específicos a uma tarefa de integração de dados do DataWorks para ativar a sincronização Arrow de alto desempenho. Atualmente, esse recurso é compatível com tarefas de sincronização offline de banco de dados completo e de tabela única nas quais a source e o destino são MaxCompute, Hologres ou Hive/OSS/Hadoop Distributed File System (HDFS) (Parquet/ORC).
Método 1: Sincronização offline de banco de dados completo
Ao utilizar uma tarefa de sincronização offline de banco de dados completo, como em uma migração do Hive para o MaxCompute, o sistema detecta automaticamente os tipos de campo das tabelas de source e destino e ativa a sincronização de alto desempenho com Apache Arrow. Nenhuma configuração manual é necessária. Visualize essa definição no editor de tarefas navegando até .
Nas configurações de Runtime Config, localize o parâmetro Enable Arrow short-circuit transfer. As opções disponíveis incluem Auto (padrão), Force enable e Force disable.
Método 2: Sincronização offline de tabela única
Ao configure uma tarefa de sincronização offline de tabela única, ative manualmente esse recurso no editor de código adicionando "useArrow": true à configuração de parameter tanto do Reader quanto do Writer.
Pré-requisito: Para ativar esse recurso, as definições de tipo de coluna das tabelas de source e destino devem ser idênticas, pois esse modo ignora a etapa de conversão de tipo e transfere os dados diretamente na memória.
Veja abaixo um exemplo de configuração para sincronizar dados do Hive (Reader) para o MaxCompute (Writer):
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
"useArrow": true,
"datasource": "my_datasource",
"column": [
"col1",
"col2"
],
"readMode": "hdfs",
"table": "table"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
"useArrow": true,
"truncate": false,
"datasource": "odps_test",
"column": [
"col1",
"col2"
],
"table": "table"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"speed": {
"concurrent": 3
}
}
}
Validação de desempenho
As seções a seguir apresentam a melhoria de desempenho para diversas combinações de fontes de dados. As condições de teste para validação de desempenho são:
Condições do teste de estresse: Especificações do servidor: 64 núcleos, 256 GB de memória. Placa de rede: 25 Gbit/s.
Volume de dados do teste: 42.045.700 registros.
|
Fonte de dados |
Recurso suportado |
Melhoria no desempenho de replicação |
|
MaxCompute |
Leitura direta de dados de armazenamento colunar via API Tunnel Arrow |
Desempenho de replicação melhorou em 200% |
|
Hologres |
Suporte à exportação em formato Arrow para evitar gargalos de JDBC baseados em linhas |
Desempenho de replicação melhorou em 95% |
|
Hive, OSS, HDFS e outros sistemas de arquivos distribuídos |
Leitura direta de dados subjacentes em formato Arrow de Parquet/ORC |
Desempenho de sincronização PARQUET melhorou em 5,55 vezes. Desempenho de sincronização ORC melhorou em 9,85 vezes. |
Cenário 1: Sincronização em curto-circuito de armazenamento colunar do MaxCompute (Arrow → Arrow)
|
Simultaneidade |
Armazenamento por linhas tradicional |
Armazenamento colunar Arrow |
Melhoria de desempenho |
|
1 |
67,8 MB/s 3740 R/s |
212,6 MB/s 11462 R/s |
+206,5% |
|
3 |
185,6 MB/s 10226 R/s |
569,9 MB/s 30728 R/s |
+200,5% |
|
8 |
462,1 MB/s 25467 R/s |
1321,0 MB/s 71143 R/s |
+197,4% |
Cenário 2: Sincronização Hologres → MaxCompute
|
Simultaneidade |
Sincronização tradicional |
Sincronização Arrow |
Melhoria de desempenho |
|
4 |
439,1 MB/s 216480 R/s |
906,1 MB/s 404270 R/s |
+87% |
|
8 |
773,3 MB/s 381300 R/s |
1669,1 MB/s 745654 R/s |
+95% |
Cenário 3: Sincronização Parquet/ORC → MaxCompute
|
Formato de armazenamento colunar |
Sincronização tradicional |
Sincronização Arrow |
Melhoria de desempenho |
|
Parquet |
26,1 MB/s 35631 R/s |
1198,1 MB/s 233587 R/s |
5,55 vezes |
|
ORC |
21,4 MB/s 27661 R/s |
3256,3 MB/s 300326 R/s |
10,86x |
Parquet e ORC são formatos de armazenamento colunar utilizados em sistemas de arquivos distribuídos, como HDFS e OSS.