A partir da versão V2.2, o Hologres oferece suporte ao Hive Metastore (HMS) como fonte de metadados para data lakes construídos no Object Storage Service (OSS). Se o seu data lake for executado em um cluster E-MapReduce (EMR) com OSS ou OSS-HDFS como camada de armazenamento, conecte o Hologres ao HMS para consultar dados do OSS diretamente via SQL, sem necessidade de migrar ou copiar dados.
Pré-requisitos
Antes de começar, verifique se você possui:
O serviço OSS ativado. Consulte Início rápido do console.
-
Um cluster de data lake do EMR com dados de teste carregados. Consulte Acessar o OSS-HDFS no EMR Hive ou Spark e Criar um cluster. O cluster deve atender a todas as condições abaixo:
Hive versão 3.1.3 ou posterior
Autenticação Kerberos desativada
Metadata definido como Self-managed RDS ou Built-in MySQL
-
Uma instância do Hologres com aceleração de data lake ativada e um banco de dados criado. Consulte Comprar uma instância do Hologres e Criar um banco de dados.
Para ativar a aceleração de data lake, acesse o console do Hologres. Na coluna Actions da instância desejada, clique em Lake Acceleration e confirme.
-
Uma conexão de rede entre o Hologres e o cluster EMR. Como o Hologres é implantado em uma rede clássica e o EMR opera em uma Virtual Private Cloud (VPC), é necessário um endpoint reverso para que os dois serviços se comuniquem. Envie uma solicitação de conexão de rede. A equipe de suporte do Hologres orientará você nas etapas a seguir:
Faça login no console da VPC e crie um endpoint reverso. Consulte Acessar serviços da Alibaba Cloud.
-
No parâmetro Type, selecione Other Endpoint Services e insira o nome do serviço de endpoint correspondente à região onde seu cluster EMR está localizado:
Região
Nome do serviço de endpoint
China (Beijing)
com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmbChina (Shanghai)
com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3xChina (Zhangjiakou)
com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp
Caso sua região não esteja listada, a equipe do Hologres criará um serviço de endpoint e fornecerá o nome após o envio da solicitação. A conexão utiliza um endereço IP. Se o endereço IP do cluster EMR mudar, reconfigure a conexão.
Limitações
Instâncias secundárias do Hologres somente leitura não oferecem suporte à aceleração de data lake.
Os comandos
UPDATE,DELETEeTRUNCATEnão são suportados em tabelas externas.O recurso Auto Load (mapeamento em lote de tabelas externas a partir do HMS) não é suportado.
Clusters EMR com autenticação Kerberos ativada não são suportados.
Conectar o Hologres ao HMS
Etapa 1: Criar a extensão
Execute o seguinte comando SQL para instalar o foreign data wrapper (FDW) hive_fdw. Esta operação requer permissões de superusuário e precisa ser executada apenas uma vez por banco de dados.
CREATE EXTENSION IF NOT EXISTS hive_fdw;
Etapa 2: Criar um servidor externo
Crie um servidor externo que aponte para sua instância do HMS e para o armazenamento OSS.
Antes de executar o comando, reúna os seguintes valores:
Endereço IP do HMS: No console do E-MapReduce, clique em Node Management referente ao seu cluster. Na aba Node Management, localize o Internal IP do nó mestre.
Endpoint do OSS: No console do OSS, abra a página de visão geral do bucket e verifique a área Access Ports.
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER hive_fdw
OPTIONS (
hive_metastore_uris 'thrift://<hms_ip>:<port>',
oss_endpoint '<oss_endpoint>'
);
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Nome personalizado para o servidor externo. |
|
|
|
Sim |
URI do Hive Metastore. Formato: |
|
|
|
Sim |
Endpoint do OSS. Para OSS nativo, utilize o endpoint interno para obter melhor desempenho. Para OSS-HDFS, apenas o endpoint interno é suportado. |
Veja os exemplos abaixo |
Para oss_endpoint, escolha a opção adequada ao seu tipo de armazenamento:
-
OSS Nativo: Utilize o endpoint interno.
oss-cn-shanghai-internal.aliyuncs.com -
OSS-HDFS: Apenas o acesso pela rede interna é suportado.
<bucket_name>.cn-beijing.oss-dls.aliyuncs.com
Etapa 3: (Opcional) Criar um mapeamento de usuário
O mapeamento de usuário controla quais contas do Hologres podem acessar dados externos por meio de um servidor externo. Por exemplo, o proprietário de um servidor externo pode conceder a um usuário do Resource Access Management (RAM) acesso aos dados do OSS.
Para detalhes sobre a sintaxe do CREATE USER MAPPING, consulte a documentação do PostgreSQL.
-- Grant the current user access to the foreign server
CREATE USER MAPPING FOR current_user SERVER <server_name> OPTIONS (
dlf_access_id '<AccessKey_ID>',
dlf_access_key '<AccessKey_Secret>',
oss_access_id '<AccessKey_ID>',
oss_access_key '<AccessKey_Secret>'
);
-- Grant a RAM user (123xxx) access to the foreign server
CREATE USER MAPPING FOR "p4_123xxx" SERVER <server_name> OPTIONS (
dlf_access_id '<AccessKey_ID>',
dlf_access_key '<AccessKey_Secret>',
oss_access_id '<AccessKey_ID>',
oss_access_key '<AccessKey_Secret>'
);
-- Remove user mappings
DROP USER MAPPING FOR CURRENT_USER SERVER <server_name>;
DROP USER MAPPING FOR "p4_123xxx" SERVER <server_name>;
Etapa 4: Criar uma tabela externa
O Hologres oferece dois comandos para criar tabelas externas:
|
Comando |
Mais indicado para |
|
Pequena quantidade de tabelas, ou quando é necessário mapear um subconjunto de colunas ou atribuir um nome personalizado à tabela. |
|
|
Mapeamento em lote de múltiplas tabelas de um schema externo. |
O Hologres oferece suporte a tabelas particionadas no OSS. Os tipos de chave de partição suportados são TEXT, VARCHAR e INT.
Ao utilizar CREATE FOREIGN TABLE : defina os campos de partição como colunas regulares, pois este comando mapeia o schema sem armazenar dados.
Ao utilizar IMPORT FOREIGN SCHEMA : o sistema mapeia os campos automaticamente.
Se o nome de uma tabela externa entrar em conflito com uma tabela interna existente no Hologres, o comandoIMPORT FOREIGN SCHEMAignorará essa tabela. UtilizeCREATE FOREIGN TABLEpara mapeá-la com um nome diferente.
-- Create a single foreign table
CREATE FOREIGN TABLE <holo_schema_name>.<table_name>
(
column_name data_type
[, ...]
)
SERVER <hive_server_name>
OPTIONS (
schema_name '<ext_db_name>',
table_name '<ext_table_name>'
);
-- Import multiple foreign tables in batch
IMPORT FOREIGN SCHEMA <ext_db_name>
[
{ LIMIT TO | EXCEPT }
( table_name [, ...] )
]
FROM SERVER <hive_server_name>
INTO <holo_schema_name>
OPTIONS (
if_table_exist 'update',
if_unsupported_type 'error'
);
Etapa 5: Consultar a tabela externa
Após criar a tabela externa, consulte-a diretamente para ler os dados do OSS.
Tabela não particionada:
SELECT * FROM <holo_schema>.<hive_table>;
Tabela particionada:
SELECT * FROM <holo_schema>.<hive_partition_table>
WHERE <partition_key> = '<partition_value>';