ApsaraDB for SelectDB oferece suporte a consultas federadas, permitindo integrar rapidamente fontes de dados externas, como data lakes, bancos de dados e arquivos remotos, para simplificar e acelerar a análise de dados. Este tópico descreve como o SelectDB usa um catalog para integrar uma fonte de dados Hive e executar análises federadas nesses dados.
Pré-requisitos
-
Garanta que todos os nós do cluster Hive tenham conectividade de rede com a instância SelectDB.
Todos os nós do cluster Hive e a instância SelectDB devem estar na mesma virtual private cloud (VPC). Caso contrário, estabeleça a conectividade de rede antes de prosseguir. Para mais informações, consulte What do I do if a connection fails to be established between an ApsaraDB for SelectDB instance and a data source?
Adicione os endereços IP de todos os nós do cluster Hive à lista de permissões do SelectDB. Para mais informações, consulte Configure an IP address whitelist.
-
Se o cluster Hive possuir um mecanismo de lista de permissões, adicione os blocos CIDR de IP da rede onde reside a instância SelectDB à lista de permissões do cluster Hive.
Para obter o intervalo de IPs da VPC onde sua instância SelectDB reside, consulte How do I find the IP CIDR block of the VPC where my ApsaraDB for SelectDB instance is located?
Para obter o endereço IP público da sua instância SelectDB, use o comando
pingno endpoint público do SelectDB.
-
Se o Hive for construído sobre HDFS, garanta que as seguintes portas estejam abertas para transferência de dados entre o Hive e o SelectDB.
Porta especificada em
hive.metastore.uris. A porta padrão é 9083.Porta especificada em
dfs.namenode.rpc-address. A porta padrão é 8020.Porta especificada em
dfs.datanode.address. A porta padrão é 9866.
Compreenda o conceito de catalog e como executar operações básicas nele. Para mais informações, consulte lakehouse.
Considerações
Compatível com as versões 1, 2 e 3 do Hive.
Oferece suporte a tabelas gerenciadas, tabelas externas e algumas views do Hive.
Permite a descoberta de metadados do Hive, Iceberg e Hudi armazenados em um metastore do Hive.
Atualmente, o ApsaraDB for SelectDB suporta apenas operações de leitura em dados de um catalog externo.
Ambiente de exemplo
Este tópico utiliza um sistema Linux como exemplo. No SelectDB, execute uma consulta federada em test_db.test_t em um cluster Hive construído sobre HDFS. Substitua os valores de exemplo pelos correspondentes ao seu sistema e ambiente reais. O ambiente de exemplo é o seguinte:
Caso de uso: sem alta disponibilidade (non-HA)
Backend de armazenamento do Hive: HDFS
Banco de dados de origem: test_db
Tabela de origem: test_t
Preparar os dados de origem
Faça login no cluster Hive.
-
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 na tabela.
-- Insert data INSERT INTO TABLE test_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
Procedimento
Etapa 1: Conectar-se a uma instância
Conecte-se à sua instância SelectDB. Para instruções, consulte Connect to an ApsaraDB for SelectDB instance by using a MySQL client.
Etapa 2: Integrar o Hive
O SelectDB integra fontes de dados externas por meio da criação de um catalog externo. Diferentes casos de uso exigem propriedades distintas para o catalog. Escolha a sintaxe e os valores de parâmetros adequados ao seu ambiente.
Após criar o catalog, o ApsaraDB for SelectDB sincroniza automaticamente bancos de dados e tabelas da fonte de dados. O ApsaraDB for SelectDB mapeia colunas entre diferentes fontes de dados e formatos de tabela. Se você não estiver familiarizado com o mapeamento de tipos entre Hive e SelectDB, consulte Mapeamento de tipos de coluna.
Hive on HDFS
Sintaxe
CREATE CATALOG <catalog_name> PROPERTIES (
'type'='<type>',
'hive.metastore.uris' = '<hive.metastore.uris>',
'hadoop.username' = '<hadoop.username>',
'dfs.nameservices'='<hadoop.username>',
'dfs.ha.namenodes.your-nameservice'='<dfs.ha.namenodes.your-nameservice>',
'dfs.namenode.rpc-address.your-nameservice.nn1'='<dfs.namenode.rpc-address.your-nameservice.nn1>',
'dfs.namenode.rpc-address.your-nameservice.nn2'='<dfs.namenode.rpc-address.your-nameservice.nn2>',
'dfs.client.failover.proxy.provider.your-nameservice'='<dfs.client.failover.proxy.provider.your-nameservice>'
);
Parâmetros
Cenário sem alta disponibilidade (Non-HA)
Parâmetro | Obrigatório | Descrição |
catalog_name | Sim | Nome do catalog. |
type | Sim | Tipo do catalog. Defina este parâmetro como |
hive.metastore.uris | Sim | URI do metastore do Hive.
|
Cenário de alta disponibilidade (HA)
Parâmetro | Obrigatório | Descrição |
catalog_name | Sim | Nome do catalog. |
type | Sim | Tipo do catalog. Defina este parâmetro como |
hive.metastore.uris | Sim | URI do metastore do Hive.
|
hadoop.username | Não | Nome de usuário para o HDFS. |
dfs.nameservices | Não | Nome do Name Service. Este valor deve corresponder ao valor de |
dfs.ha.namenodes.[nameservice ID] | Não | Lista de IDs dos NameNodes. Este valor deve corresponder ao valor equivalente no arquivo de configuração hdfs-site.xml do seu ambiente Hive. |
dfs.namenode.rpc-address.[nameservice ID].[name node ID] | Não | Endereço RPC do NameNode. A quantidade de endereços deve ser igual ao número de NameNodes, e os endereços devem ser consistentes com os itens de configuração correspondentes no arquivo hdfs-site.xml do seu ambiente Hive. |
dfs.client.failover.proxy.provider.[nameservice ID] | Não | Classe Java usada pelo cliente HDFS para se conectar ao NameNode ativo. Na maioria dos casos, o valor é |
Exemplo de cenário sem alta disponibilidade
CREATE CATALOG hive_catalog PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);
Construção do Hive no Alibaba Cloud OSS
Sintaxe
A sintaxe é a mesma utilizada para Hive on HDFS, mas os parâmetros obrigatórios são diferentes.
Parâmetros
Parâmetro | Obrigatório | Descrição |
type | Sim | Tipo do catalog. Defina este parâmetro como |
hive.metastore.uris | Sim | URI do metastore do Hive.
|
oss.endpoint | Sim | O |
oss.access_key | Sim | O |
oss.secret_key | Sim | O |
Exemplo
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" = "ak",
"oss.secret_key" = "sk"
);
Etapa 3: Visualizar catalogs
Execute a seguinte instrução para verificar se o catalog foi criado com sucesso.
SHOW CATALOGS; -- Verify whether the catalog is created successfully.
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 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: Visualizar dados do Hive
-
Visualize bancos de dados e tabelas do Hive a partir do catalog externo.
NotaAo se conectar a uma instância SelectDB, o diretório de trabalho padrão é o catalog interno.
-
Mude para o catalog externo desejado.
SWITCH hive_catalog; -
Visualize os dados.
Após mudar para o catalog alvo, acesse seus dados da mesma forma que acessaria dados no catalog interno. Por exemplo:
Listar bancos de dados:
SHOW DATABASES;Mudar para um banco de dados:
USE test_db;Listar tabelas em um banco de dados:
SHOW TABLES;Consultar dados da tabela:
SELECT * FROM test_t;
-
-
Visualize dados do Hive diretamente pelo catalog interno.
-- View data from the test_t table in the test_db database under the hive_catalog. SELECT * FROM hive_catalog.test_db.test_t;
Mais operações: Migrar dados
Após integrar a fonte de dados, utilize a instrução INSERT INTO para migrar dados históricos do Hive para o SelectDB. Para mais informações, consulte INSERT INTO.
Mapeamento de tipos de coluna
Os seguintes mapeamentos de tipos do metastore do Hive aplicam-se a fontes de dados que utilizam um metastore do Hive, como Hive, Iceberg e Hudi.
-
Alguns dos tipos complexos do metastore do Hive e do SelectDB suportam aninhamento.
array<type>:Exemplo de aninhamento: array<map<string, int>>map<KeyType, ValueType>:Exemplo de aninhamento: map<string, array<int>>struct<col1: Type1, col2: Type2, ...>:Exemplo de aninhamento: struct<col1: array<int>, col2: map<int, date>>
|
Tipo HMS |
Tipo SelectDB |
|
BOOLEAN |
BOOLEAN |
|
TINYINT |
TINYINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
DATE |
DATE |
|
TIMESTAMP |
DATETIME |
|
FLOAT |
FLOAT |
|
DOUBLE |
DOUBLE |
|
CHAR |
CHAR |
|
VARCHAR |
VARCHAR |
|
DECIMAL |
DECIMAL |
|
ARRAY<type> |
ARRAY<type> |
|
MAP<KeyType, ValueType> |
MAP<KeyType, ValueType> |
|
STRUCT<col1: Type1, col2: Type2, ...> |
STRUCT<col1: Type1, col2: Type2, ...> |
|
Outros |
Não suportado |