Uma fonte de dados Hive permite ler e gravar dados no Hive. Este tópico descreve como o DataWorks sincroniza dados do Hive.
Funcionamento
O Hive é uma ferramenta de data warehouse construída sobre o Hadoop, utilizada para análise estatística de dados de log estruturados em grande escala. O Hive mapeia arquivos de dados estruturados para tabelas e oferece recursos de consulta SQL. Ele funciona como um mecanismo de análise SQL que utiliza o MapReduce para análise de dados, o HDFS para armazenamento e o YARN para executar programas MapReduce convertidos de HiveQL (HQL).
O plugin Hive Reader acessa o service HiveMetastore para obter metadados das tabelas configuradas. É possível ler dados de duas formas:
-
Leitura de dados por meio de arquivos HDFS
O plugin Hive Reader acessa o service HiveMetastore para obter o caminho de armazenamento, o formato de arquivo e os delimitadores da tabela configurada no HDFS. Em seguida, o plugin lê os dados diretamente dos arquivos HDFS subjacentes.
-
Leitura de dados por meio de uma conexão JDBC do Hive
O plugin Hive Reader conecta-se ao service HiveServer2 para ler dados. Esse método suporta filtragem de dados com uma cláusula where e permite a leitura direta de dados usando instruções SQL.
O plugin Hive Writer acessa o service HiveMetastore para obter informações como o caminho de armazenamento, o formato de arquivo e os delimitadores da tabela configurada no HDFS. Ele grava dados em arquivos HDFS e executa uma instrução LOAD DATA SQL por meio de um cliente JDBC do Hive para carregar os dados dos arquivos HDFS na tabela Hive.
A lógica subjacente do plugin Hive Writer é a mesma do plugin HDFS Writer. Você pode configure parâmetros do HDFS Writer no plugin Hive Writer, que são então repassados ao plugin HDFS Writer.
Versões suportadas
Limitações
A fonte de dados Hive suporta Grupos de recursos Serverless (recomendado) e grupos de recursos exclusivos para Data Integration.
Apenas os formatos TextFile, ORCFile e ParquetFile são suportados para leitura.
-
Durante uma sincronização offline para um cluster Hive, o Data Integration cria arquivos temporários no servidor. Esses arquivos são excluídos automaticamente após a conclusão da tarefa de sincronização. Monitore a contagem de arquivos no diretório HDFS para evitar que atinja o limite máximo, o que pode tornar o sistema de arquivos HDFS indisponível. O DataWorks não garante que o número de arquivos permaneça dentro do limite do diretório HDFS.
NotaNo servidor, modifique o parâmetro dfs.namenode.fs-limits.max-directory-items para definir o número máximo de diretórios ou arquivos não recursivos em um único diretório. O valor padrão é 1.048.576, e o intervalo válido vai de 1 a 6.400.000. Para resolver esse problema, aumente o valor do parâmetro HDFS dfs.namenode.fs-limits.max-directory-items ou exclua arquivos desnecessários.
Ao acessar uma fonte de dados Hive, a autenticação Kerberos e a
autenticação SSLsão suportadas atualmente. Se a autenticação não for necessária, selecione No Authentication para Authentication Method ao adicionar uma nova fonte de dados.-
Ao usar o DataWorks para acessar uma fonte de dados Hive com autenticação Kerberos, se tanto o HiveServer2 quanto o metastore tiverem a autenticação Kerberos ativada, mas usarem principals diferentes, adicione a seguinte configuração ao campo Extension Parameters:
{ "hive.metastore.kerberos.principal": "<your metastore principal>" }
Tipos de dados suportados
O plugin Hive Reader suporta os seguintes tipos de dados:
|
Categoria |
Tipo de dados Hive |
|
String |
CHAR, VARCHAR, STRING |
|
Inteiro |
TINYINT, SMALLINT, INT, INTEGER, BIGINT |
|
Ponto flutuante |
FLOAT, DOUBLE, DECIMAL |
|
Data e hora |
TIMESTAMP, DATE |
|
Booleano |
BOOLEAN |
Pré-requisitos
Os pré-requisitos variam conforme o modo de configuração da fonte de dados.
Modo de instância Alibaba Cloud
Para sincronizar uma tabela baseada em OSS, selecione uma Access Identity. Use uma Alibaba Cloud Account, um Alibaba Cloud RAM User ou uma RAM Role. Certifique-se de que a identidade selecionada tenha as permissões necessárias no OSS. Caso contrário, a sincronização de dados falhará devido à falta de permissões de leitura e gravação.
O teste de conectividade não verifica as permissões de leitura e gravação de dados.
Modo de string de conexão
Data Lake Formation (DLF)
Se sua fonte de dados Hive for um cluster EMR que usa o Data Lake Formation (DLF) para gerenciamento de metadados, adicione o seguinte ao campo Extension Parameters ao configurar a fonte de dados:
{"dlf.catalog.id" : "my_catalog_xxxx"}
Substitua my_catalog_xxxx pelo valor do parâmetro dlf.catalog.id da sua configuração do EMR Hive.
Alta disponibilidade (HA)
Se o cluster EMR Hive que você deseja sincronizar tiver a high availability (HA) ativada, ative a opção Enable High Availability Mode e configure as informações relacionadas à HA na seção Extension Parameters no formato a seguir. Acesse o console EMR, localize o cluster desejado e clique em Cluster Services na coluna Operations para obter os valores de configuração relevantes.
{
// The following code provides an example of HA configurations.
"dfs.nameservices":"testDfs",
"dfs.ha.namenodes.testDfs":"namenode1,namenode2",
"dfs.namenode.rpc-address.testDfs.namenode1": "",
"dfs.namenode.rpc-address.testDfs.namenode2": "",
"dfs.client.failover.proxy.provider.testDfs":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
// (Optional) If the underlying storage is OSS, configure the following parameters in Extension Parameters to connect to the OSS service.
"fs.oss.accessKeyId":"<yourAccessKeyId>",
"fs.oss.accessKeySecret":"<yourAccessKeySecret>",
"fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com"
}
Tabela externa OSS
Se o armazenamento subjacente for OSS, observe o seguinte:
Defina defaultFS com o prefixo oss://. Por exemplo,
oss://bucketName.-
Ao sincronizar uma tabela externa OSS, adicione a configuração do OSS ao campo Extension Parameters ao configurar a fonte de dados Hive.
{ "fs.oss.accessKeyId":"<yourAccessKeyId>", "fs.oss.accessKeySecret":"<yourAccessKeySecret>", "fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com" } -
Ao sincronizar uma tabela externa OSS-HDFS, adicione a configuração do OSS-HDFS ao campo Extension Parameters ao configurar a fonte de dados Hive.
{ "fs.oss.accessKeyId":"<yourAccessKeyId>", "fs.oss.accessKeySecret":"<yourAccessKeySecret>", "fs.oss.endpoint":"cn-<yourRegion>.oss-dls.aliyuncs.com" }
Modo CDH
Para configure uma fonte de dados Hive no modo CDH, é necessário registrar o cluster CDH no DataWorks.
Crie uma fonte de dados
Antes de desenvolver uma tarefa de sincronização de dados, crie uma fonte de dados no DataWorks. Para obter instruções, consulte Gerenciamento de fontes de dados. Para descrições detalhadas dos parâmetros, consulte as dicas inline na página de configuração.
As seções a seguir descrevem os parâmetros para diferentes Authentication Method.
Autenticação Kerberos
Parâmetro | Descrição |
keytab file | Arquivo .keytab gerado quando o service principal é registrado no ambiente Kerberos. |
conf file | O arquivo
|
principal | Identidade (usuário ou serviço) que possui um nome exclusivo e uma chave de criptografia associada.
|
Autenticação SSL
|
Parâmetro |
Descrição |
|
Truststore certificate file |
Arquivo de certificado Truststore (por exemplo, |
|
Truststore password |
Senha definida ao gerar o arquivo de certificado Truststore para autenticação SSL. |
|
Keystore certificate file |
Arquivo de certificado Keystore gerado ao ativar a autenticação SSL, como o arquivo |
|
Keystore password |
Senha definida ao gerar o arquivo de certificado Keystore para autenticação SSL. |
Desenvolvimento de tarefas de sincronização
Para informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os guias de configuração a seguir.
Sincronização offline de tabela única
Para o procedimento, consulte Configure uma tarefa na UI sem código e Configure uma tarefa no editor de código.
Para uma lista completa de parâmetros e exemplos de scripts para o editor de código, consulte Apêndice: Exemplos de scripts e referência de parâmetros.
Sincronização offline de banco de dados completo
Para o procedimento, consulte Tarefa de sincronização offline para um banco de dados inteiro.
Apêndice: Exemplos de scripts e referência de parâmetros
Configure uma tarefa de sincronização em lote usando o editor de código
Para configure uma tarefa de sincronização em lote usando o editor de código, configure os parâmetros relacionados no script de acordo com os requisitos unificados de formato de script. Para mais informações, consulte Configuração no modo Script. As informações a seguir descrevem os parâmetros que devem ser configurados para fontes de dados ao utilizar o editor de código para tarefas de sincronização em lote.
Exemplos de script do Reader
É possível ler dados usando arquivos HDFS ou uma conexão JDBC do Hive.
-
Leitura de dados usando arquivos HDFS
{ "type": "job", "steps": [ { "stepType": "hive", "parameter": { "partition": "pt1=a,pt2=b,pt3=c", // Partition information "datasource": "hive_not_ha_****", // Data source name "column": [ // Columns to read "id", "pt2", "pt1" ], "readMode": "hdfs", // Read mode "table": "part_table_1", "fileSystemUsername" : "hdfs", "hivePartitionColumn": [ { "type": "string", "value": "Partition Name 1" }, { "type": "string", "value": "Partition Name 2" } ], "successOnNoFile":true }, "name": "Reader", "category": "reader" }, { "stepType": "hive", "parameter": { }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" // The number of error records allowed }, "speed": { "concurrent": 2, // The concurrency level for the task. "throttle": true, // Enables or disables throttling. If false, the mbps parameter is ignored. "mbps":"12" // The maximum transfer rate in MBps. } } } -
Leitura de dados usando uma conexão JDBC do Hive
{ "type": "job", "steps": [ { "stepType": "hive", "parameter": { "querySql": "select id,name,age from part_table_1 where pt2='B'", "datasource": "hive_not_ha_****", // Data source name "session": [ "mapred.task.timeout=600000" ], "column": [ // Columns to read "id", "name", "age" ], "where": "", "table": "part_table_1", "readMode": "jdbc" // Read mode }, "name": "Reader", "category": "reader" }, { "stepType": "hive", "parameter": { }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, // The concurrency level for the task. "throttle": true, // Enables or disables throttling. If false, the mbps parameter is ignored. "mbps":"12" // The maximum transfer rate in MBps. } } }
Parâmetros do Reader
Parâmetro | Descrição | Obrigatório | Padrão |
datasource | Nome da fonte de dados criada no DataWorks. | Sim | Nenhum |
table | Nome da tabela a ser sincronizada. Nota O nome da tabela diferencia maiúsculas de minúsculas. | Sim | Nenhum |
readMode | Modo de leitura. Valores válidos:
Nota
| Não | Nenhum |
partition | Informações de partição da tabela Hive.
| Não | Nenhum |
session | Configurações no nível de sessão para leitura de dados via conexão JDBC do Hive. É possível defina parâmetros de cliente como | Não | Nenhum |
column | Colunas a serem lidas, por exemplo
| Sim | Nenhum |
querySql | Ao ler dados usando uma conexão JDBC do Hive, configure diretamente o parâmetro querySql para ler dados. | Não | Nenhum |
where | Ao ler dados usando uma conexão JDBC do Hive, use uma cláusula where para filtrar dados. | Não | Nenhum |
fileSystemUsername | As leituras de dados que usam o método HDFS utilizam, por padrão, o usuário configurado na página da fonte de dados Hive. Se o login anônimo estiver configurado na página da fonte de dados, a conta | Não | Nenhum |
hivePartitionColumn | Para sincronizar os valores dos campos de partição downstream, mude para o editor de código e configure o parâmetro hivePartitionColumn. | Não | Nenhum |
successOnNoFile | No modo de leitura HDFS, especifica se a tarefa de sincronização é considerada bem-sucedida quando o diretório está vazio. | Não | Nenhum |
Exemplo de script do Writer
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "hive",
"parameter": {
"partition": "year=a,month=b,day=c", // Partition configuration
"datasource": "hive_ha_shanghai", // Data source
"table": "partitiontable2", // Destination table
"column": [ // Column configuration
"id",
"name",
"age"
],
"writeMode": "append" ,// Write mode
"fileSystemUsername" : "hdfs"
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": ""
},
"speed": {
"throttle":true, // If you set throttle to false, the mbps parameter does not take effect, which indicates that no throttling is triggered. If you set throttle to true, throttling is enabled.
"concurrent":2, // The number of concurrent jobs.
"mbps":"12" // Throttling rate
}
}
}
Parâmetros do Writer
Parâmetro | Descrição | Obrigatório | Padrão |
datasource | Nome da fonte de dados. Deve corresponder ao nome da fonte de dados criada. | Sim | Nenhum |
column | Colunas a serem gravadas, por exemplo,
| Sim | Nenhum |
table | Nome da tabela Hive na qual você deseja gravar dados. Nota O nome da tabela diferencia maiúsculas de minúsculas. | Sim | Nenhum |
partition | Informações de partição da tabela Hive.
| Não | Nenhum |
writeMode | Modo de gravação para dados da tabela Hive. Após os dados serem gravados em um arquivo HDFS, o plugin Hive Writer execute o comando O parâmetro writeMode especifica o comportamento de carregamento de dados:
Nota O parâmetro writeMode é de alto risco. Preste muita atenção ao diretório de saída de dados e ao comportamento do writeMode para evitar exclusão acidental de dados. O comportamento de carregamento de dados requer o parâmetro hiveConfig. Verifique sua configuração. | Sim | Nenhum |
hiveConfig | É possível configure mais parâmetros de extensão do Hive em hiveConfig, incluindo hiveCommand, jdbcUrl, username e password.
| Sim | Nenhum |
fileSystemUsername | Ao gravar dados em uma tabela Hive, o usuário configurado na página da fonte de dados Hive é usado por padrão. Se o login anônimo estiver configurado na página da fonte de dados, a conta admin será usada por padrão. Se ocorrer um problema de permissão durante a tarefa de sincronização, mude para o editor de código e configure o parâmetro fileSystemUsername. | Não | Nenhum |
enableColumnExchange | Se este parâmetro for definido como True, a reordenação de colunas será ativada. Nota Este parâmetro é suportado apenas para o formato Text. | Não | Nenhum |
nullFormat | O Data Integration usa o parâmetro nullFormat para defina quais valores de string são tratados como nulos. Por exemplo, se você configure Nota A string "null" (os quatro caracteres n, u, l, l) é diferente de um valor nulo real. | Não | Nenhum |