Se você usa o Hive para construir um data warehouse offline tradicional com armazenamento em HDFS, os custos podem aumentar significativamente conforme o volume de dados cresce. Nesse cenário, use o OSS-HDFS (JindoFS) como armazenamento subjacente do data warehouse Hive e utilize o JindoSDK para obter melhor desempenho de leitura e escrita.
Pré-requisitos
Por exemplo, se você usar o Alibaba Cloud ECS para sua implantação, será necessário comprar uma instância ECS.
O serviço OSS-HDFS está ativado para um bucket e o acesso ao serviço está autorizado. Para mais informações, consulte Ative o serviço OSS-HDFS.
Um cliente Hive está implantado.
Procedimento
Conecte-se à instância ECS. Para mais informações, consulte Conectar-se a uma instância ECS.
-
Configure o JindoSDK.
Baixe a versão mais recente do pacote JAR do JindoSDK. Para baixe o JindoSDK, visite o GitHub.
-
Descompacte o pacote JAR do JindoSDK.
O código de exemplo a seguir mostra como descompactar um pacote chamado
jindosdk-x.x.x-linux.tar.gz. Se você usar outra versão do JindoSDK, substitua o nome pelo arquivo JAR correspondente.tar zxvf jindosdk-x.x.x-linux.tar.gzNotax.x.x representa o número da versão do pacote JAR do JindoSDK.
-
Copie o pacote JAR do JindoSDK para o caminho classpath do Hive.
cp jindosdk-x.x.x-linux/lib/*.jar $HIVE_HOME/lib/
-
Configure a classe de implementação do OSS-HDFS e o par de AccessKey usado para acessar um bucket
-
Defina a classe de implementação do OSS-HDFS no arquivo core-site.xml do Hive.
<configuration> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOSS</value> </property> <property> <name>fs.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value> </property> </configuration> -
No arquivo core-site.xml do Hive, especifique o AccessKey ID e o AccessKey secret que deseja usar para acessar o bucket com o OSS-HDFS ativado.
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>LTAI******** </value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>KZo1********</value> </property> </configuration>
-
-
Configure o endpoint do OSS-HDFS.
Especifique o endpoint do OSS-HDFS para acessar buckets no Object Storage Service (OSS). Recomendamos configurar o caminho de acesso ao OSS-HDFS no formato
oss://<Bucket>.<Endpoint>/<Object>(exemplo:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt). Após essa configuração, o JindoSDK acessará a operação correspondente do OSS-HDFS com base no endpoint definido no caminho.Também é possível definir o endpoint do OSS-HDFS por outros métodos. Endpoints configurados de formas distintas possuem prioridades diferentes. Para mais detalhes, consulte Início rápido: Conectar um cluster não EMR ao serviço OSS-HDFS.
ImportanteApós concluir as configurações anteriores, reinicie o Hive para que elas entrem em vigor.
-
Execute o comando a seguir no terminal para se conectar ao Hive.
Para outros métodos de conexão, consulte Métodos de conexão do Hive.
hive -
Use o OSS-HDFS para armazenar dados.
Ao crie um banco de dados ou tabela, use um dos métodos a seguir para defina um caminho do OSS-HDFS como local de armazenamento:
-
Método 1: Especifique o caminho de armazenamento do OSS-HDFS diretamente no comando
-
Defina o caminho do OSS-HDFS durante a criação do banco de dados:
CREATE DATABASE db_on_oss1 LOCATION 'oss://bucket_name.endpoint_name/path/to/db1'; -
Indique o caminho do OSS-HDFS ao crie uma tabela:
CREATE TABLE db2.table_on_oss ( id INT, name STRING, age INT ) LOCATION 'oss://bucket_name.endpoint_name/path/to/db2/tablepath';
-
-
Método 2: Configure o caminho de armazenamento do OSS-HDFS no arquivo de configuração do Hive
Defina o valor de hive.metastore.warehouse.dir como o caminho do OSS-HDFS no arquivo de configuração hive-site.xml do Hive Metastore e reinicie o Hive Metastore. Bancos de dados e tabelas criados posteriormente serão armazenados no caminho especificado.
O exemplo a seguir ilustra como defina hive.metastore.warehouse.dir para o caminho de armazenamento do OSS-HDFS:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>oss://bucket_name.endpoint_name/path/to/warehouse</value> </property> </configuration>
-
-
Adicione partições a uma tabela existente.
A adição de partições permite organizar os dados de uma tabela em unidades menores. Ao filtrar consultas por partições, apenas os segmentos relevantes são verificados, o que melhora o desempenho das buscas.
-
Sintaxe do comando
ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...] LOCATION 'location';A tabela a seguir descreve os parâmetros do comando anterior.
Parâmetro
Obrigatório
Descrição
table_name
Sim
Nome da tabela à qual as partições serão adicionadas.
IF NOT EXISTS
Não
Evita erros caso já exista uma partição com o mesmo nome. Se omitido e houver duplicidade, a operação falhará e retornará um erro.
pt_spec
Sim
Partições a serem adicionadas. O valor segue o formato
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...), ondepartition_colrepresenta os nomes das colunas de chave de partição epartition_col_valueseus respectivos valores. Os nomes das colunas não diferenciam maiúsculas de minúsculas, mas os valores diferenciam.location
Sim
Caminho do OSS destinado ao armazenamento dos dados da partição.
-
Exemplos
O código a seguir demonstra como adicionar uma partição à tabela sale_detail para registrar vendas da região China (Hangzhou) em dezembro de 2021, definindo também o caminho do OSS para esses dados:
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202112', region='hangzhou') LOCATION 'oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/path/2021/';
-