O ApsaraDB for SelectDB suporta consultas federadas em fontes de dados externas por meio de catalogs. Este tópico explica como conectar um cluster Hive ao SelectDB usando um catálogo Hive para consultar dados do Hive diretamente, sem movê-los.
Casos de uso
|
Cenário |
Descrição |
|
Aceleração de consultas |
Execute o mecanismo de consulta distribuído do SelectDB diretamente nos dados do Hive, sem ETL. |
|
Integração de dados |
Leia dados do Hive e carregue-os em tabelas internas do SelectDB com instruções INSERT INTO. |
Configurações suportadas
|
Dimensão |
Suportado |
|
Versões do Hive |
Hive 1, Hive 2, Hive 3 |
|
Tipos de tabela |
Tabelas gerenciadas, tabelas externas e algumas views do Hive |
|
Formatos de metadados |
Metadados Hive, Iceberg e Hudi armazenados em um metastore Hive |
|
Modo de acesso |
Somente leitura (o SelectDB não grava em catalogs externos) |
|
Backends de armazenamento |
HDFS (não HA e HA), Object Storage Service (OSS) |
Pré-requisitos
Antes de começar, verifique se:
Todos os nós do cluster Hive estão na mesma Virtual Private Cloud (VPC) da instância SelectDB ou se há conectividade entre VPCs estabelecida. Em caso de falhas de conexão, consulte O que devo fazer se uma conexão falhar ao ser estabelecida entre uma instância do ApsaraDB for SelectDB e uma fonte de dados?.
Os endereços IP de todos os nós do cluster Hive foram adicionados à lista de permissões de endereços IP da instância SelectDB. Consulte Configurar uma lista de permissões de endereços IP.
Se o cluster Hive impuser sua própria lista de permissões, os endereços IP da VPC da instância SelectDB também devem constar nessa lista. Para obter o endereço IP da VPC da instância SelectDB, consulte Como visualizo os endereços IP na VPC à qual minha instância do ApsaraDB SelectDB pertence?.
-
Se o cluster Hive usar HDFS como armazenamento, as portas listadas abaixo devem estar abertas para permitir a transferência de dados entre o cluster Hive e o SelectDB:
Parâmetro
Porta padrão
hive.metastore.uris9083
dfs.namenode.rpc-address8020
dfs.datanode.address9866
Você conhece os conceitos e as operações de catalogs. Consulte Data lakehouse.
Ambiente de exemplo
O tutorial deste tópico usa a configuração a seguir. Substitua pelos seus próprios valores sempre que esses parâmetros aparecerem.
|
Parâmetro |
Valor |
|
Modo de alta disponibilidade (HA) |
Não HA |
|
Armazenamento do cluster Hive |
HDFS |
|
Banco de dados de origem |
|
|
Tabela de origem |
|
Preparar os dados de origem
Faça login no cluster Hive que deseja consultar.
-
Crie um banco de dados chamado
test_db.CREATE DATABASE IF NOT EXISTS test_db; -
Crie uma tabela chamada
test_t.CREATE TABLE IF NOT EXISTS test_t ( id INT, name STRING, age INT ); -
Insira dados de exemplo.
INSERT INTO TABLE test_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
Conectar um cluster Hive ao SelectDB
Etapa 1: Conectar-se a uma instância do ApsaraDB for SelectDB
Conecte-se à instância SelectDB usando um cliente MySQL. Consulte Conectar-se a uma instância do ApsaraDB for SelectDB usando um cliente MySQL.
Etapa 2: Criar um catálogo Hive
Crie um catálogo externo que mapeie o cluster Hive. O SelectDB descobre automaticamente os bancos de dados e as tabelas no catálogo e mapeia os tipos de coluna do Hive para os tipos do SelectDB. Para visualizar a tabela completa de mapeamento de tipos, consulte Mapeamentos de tipos de dados de coluna.
Selecione a configuração correspondente ao seu backend de armazenamento.
Hive baseado em HDFS (não HA)
Use esta configuração quando o HDFS tiver um único NameNode ativo.
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://<metastore-host>:9083'
);
Exemplo:
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Tipo de catálogo. Defina como |
|
|
Sim |
URI do metastore Hive no formato |
Hive baseado em HDFS (HA)
Use esta configuração quando o HDFS utilizar alta disponibilidade com múltiplos NameNodes.
CREATE CATALOG <catalog_name> PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://<metastore-host>:9083',
'hadoop.username' = '<hadoop-username>',
'dfs.nameservices' = '<nameservice-id>',
'dfs.ha.namenodes.<nameservice-id>' = '<nn1>,<nn2>',
'dfs.namenode.rpc-address.<nameservice-id>.<nn1>' = '<host1>:<port1>',
'dfs.namenode.rpc-address.<nameservice-id>.<nn2>' = '<host2>:<port2>',
'dfs.client.failover.proxy.provider.<nameservice-id>' = '<dfs.client.failover.proxy.provider.your-nameservice>'
);
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Tipo de catálogo. Defina como |
|
|
Sim |
URI do metastore Hive. Formato: |
|
|
Não |
Nome de usuário para acesso ao HDFS. |
|
|
Não |
ID do NameService. Deve corresponder ao valor em |
|
|
Não |
IDs dos NameNodes. Devem corresponder aos valores em |
|
|
Não |
Endereço de chamada de procedimento remoto (RPC) de cada NameNode. Deve corresponder aos valores em |
|
|
Não |
Classe Java para failover do NameNode ativo. Use |
Hive baseado em OSS
Use esta configuração quando os dados do Hive estiverem armazenados no Object Storage Service (OSS). A sintaxe é idêntica à variante HDFS; apenas os parâmetros de armazenamento diferem.
CREATE CATALOG hive_catalog PROPERTIES (
"type" = "hms",
"hive.metastore.uris" = "thrift://172.0.0.1:9083",
"oss.endpoint" = "oss-cn-beijing.aliyuncs.com",
"oss.access_key" = "<your-access-key-id>",
"oss.secret_key" = "<your-access-key-secret>"
);
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Tipo de catálogo. Defina como |
|
|
Sim |
URI do metastore Hive. Formato: |
|
|
Sim |
Endpoint do OSS para a região onde os dados estão armazenados. Consulte Regiões e endpoints. |
|
|
Sim |
AccessKey ID usado para acessar o OSS. |
|
|
Sim |
AccessKey secret usado para acessar o OSS. |
Etapa 3: Verificar o catálogo
Confirme se o catálogo foi criado com sucesso.
SHOW CATALOGS;
Saída esperada:
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 436009309195 | hive_catalog | hms | | 2024-07-19 17:09:08.058 | 2024-07-19 18:04:37 | |
| 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
Etapa 4: Consultar dados do Hive
Após a conexão, o SelectDB usa o catálogo interno por padrão. Alterne para o catálogo Hive para acessar os dados do Hive.
Os dois estilos de consulta abaixo são equivalentes. Utilize o que melhor se adequar ao seu fluxo de trabalho.
-- Style 1: Switch catalog, then use database and table
SWITCH hive_catalog;
USE test_db;
SELECT * FROM test_t;
-- Style 2: Use the fully qualified table name (no switch required)
SELECT * FROM hive_catalog.test_db.test_t;
Para explorar o catálogo antes de executar consultas:
SWITCH hive_catalog;
SHOW DATABASES; -- list all databases in the Hive catalog
USE test_db;
SHOW TABLES; -- list all tables in test_db
Após alternar para o catálogo externo, navegue pelos bancos de dados e tabelas da mesma forma que no catálogo interno.
Migrar dados do Hive para o SelectDB
Depois de conectar o catálogo Hive, use instruções INSERT INTO para migrar dados históricos do Hive para tabelas internas do SelectDB. Consulte Importar dados usando instruções INSERT INTO.
Mapeamentos de tipos de dados de coluna
O SelectDB mapeia automaticamente os tipos de coluna do Hive para os tipos do SelectDB quando você cria um catálogo. Os mapeamentos abaixo aplicam-se a metadados Hive, Iceberg e Hudi armazenados em um metastore Hive.
Tipos complexos podem ser aninhados. Por exemplo:
array<map<string, int>>map<string, array<int>>struct<col1: array<int>, col2: map<int, date>>
|
Tipo no metastore Hive |
Tipo no SelectDB |
Observação |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Suporta aninhamento, por exemplo |
|
|
|
Suporta aninhamento, por exemplo |
|
|
|
Suporta aninhamento, por exemplo |
|
Outros |
não suportado |
Próximos passos
Data lakehouse — Saiba mais sobre catalogs externos e conceitos de consulta federada.
Importar dados usando instruções INSERT INTO — Mova dados do Hive para tabelas internas do SelectDB.