Introdução
Num futuro distante, a humanidade expandiu seu alcance para a vasta extensão do espaço. A Interstellar Spaceport Authority (ISA) é responsável por gerenciar a intrincada rede de portos espaciais espalhados pela galáxia. Como Comandante Supremo da ISA, sua missão é otimizar as operações do porto espacial, aproveitando o poder das capacidades de particionamento e bucketing do Hadoop.
O centro de dados do porto espacial abriga uma enorme quantidade de informações, incluindo logs de voo, manifestos de carga e registros de passageiros. O gerenciamento eficiente de dados é crucial para garantir operações tranquilas e tomar decisões informadas. Seu objetivo é implementar estratégias de particionamento e bucketing para aprimorar o desempenho das consultas e a organização dos dados dentro do ecossistema Hadoop.
Criar uma Tabela Particionada
Nesta etapa, você criará uma tabela particionada para armazenar dados de logs de voo, o que ajudará a melhorar o desempenho das consultas e permitirá um gerenciamento eficiente de dados.
Primeiro, certifique-se de estar logado como o usuário hadoop executando o seguinte comando no terminal:
su - hadoop
Em seguida, inicie o shell do Hive executando o seguinte comando:
hive
Agora, crie um banco de dados se ele não existir:
CREATE DATABASE IF NOT EXISTS spaceport;
Mude para o banco de dados spaceport:
USE spaceport;
Em seguida, crie uma tabela particionada para logs de voo:
CREATE TABLE flight_logs (
flight_id STRING,
spacecraft STRING,
departure_time TIMESTAMP,
arrival_time TIMESTAMP,
destination STRING
)
PARTITIONED BY (year INT, month INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
Finalmente, saia do Hive com o seguinte comando:
EXIT;
No código acima, criamos uma tabela particionada flight_logs com colunas para ID do voo, espaçonave, hora de partida, hora de chegada e destino. A tabela é particionada pelas colunas year e month, o que significa que os dados serão organizados em partições separadas com base nos valores de ano e mês.
Carregar Dados na Tabela Particionada
Nesta etapa, você carregará dados de exemplo de logs de voo na tabela particionada que você criou na etapa anterior.
Primeiro, crie alguns arquivos de dados de exemplo de logs de voo:
cat > /home/hadoop/flight_logs_1.txt << EOF
FL001,Andromeda Explorer,2023-06-01 08:00:00,2023-06-02 12:30:00,Andromeda Galaxy
FL002,Milky Way Voyager,2023-06-15 10:15:00,2023-06-16 06:45:00,Milky Way Galaxy
EOF
cat > /home/hadoop/flight_logs_2.txt << EOF
FL003,Cygnus Cruiser,2023-07-20 14:30:00,2023-07-21 09:00:00,Cygnus Constellation
FL004,Orion Shuttle,2023-07-25 18:00:00,2023-07-26 03:15:00,Orion Nebula
EOF
Em seguida, carregue os dados na tabela particionada:
hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/flight_logs_1.txt' INTO TABLE spaceport.flight_logs PARTITION (year=2023, month=6);"
hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/flight_logs_2.txt' INTO TABLE spaceport.flight_logs PARTITION (year=2023, month=7);"
No código acima, primeiro criamos alguns arquivos de dados de exemplo de logs de voo flight_logs_1.txt e flight_logs_2.txt com quatro registros de voo. Em seguida, usamos o comando LOAD DATA no Hive para carregar os dados na tabela particionada flight_logs. Carregamos os dados duas vezes, uma vez para a partição year=2023 e month=6, e outra vez para a partição year=2023 e month=7.
Criar uma Tabela Bucketed
Nesta etapa, você criará uma tabela bucketed para armazenar dados de manifesto de carga, o que melhorará o desempenho das consultas para consultas envolvendo a coluna cargo_type.
Primeiro, inicie o shell do Hive executando o seguinte comando:
hive
Em seguida, mude para o banco de dados spaceport:
USE spaceport;
Agora, crie uma tabela bucketed para manifestos de carga:
CREATE TABLE cargo_manifests (
manifest_id STRING,
cargo_type STRING,
destination STRING,
weight DOUBLE,
volume DOUBLE
)
CLUSTERED BY (cargo_type) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
Finalmente, saia do Hive com o seguinte comando:
EXIT;
No código acima, criamos uma tabela bucketed cargo_manifests com colunas para ID do manifesto, tipo de carga, destino, peso e volume. A tabela é bucketed (agrupada) pela coluna cargo_type em 4 buckets para melhorar o desempenho das consultas para consultas envolvendo a coluna cargo_type.
Carregar Dados na Tabela Bucketed
Nesta etapa, você carregará dados de exemplo de manifesto de carga na tabela bucketed que você criou na etapa anterior.
Primeiro, crie um arquivo de dados de exemplo de manifesto de carga
cat > /home/hadoop/cargo_manifests.txt << EOF
CM001,Electronics,Andromeda Galaxy,5.2,2.1
CM002,Machinery,Milky Way Galaxy,12.8,8.5
CM003,Food,Cygnus Constellation,3.1,1.5
CM004,Electronics,Orion Nebula,7.9,3.2
EOF
Em seguida, carregue os dados na tabela bucketed
hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/cargo_manifests.txt' OVERWRITE INTO TABLE spaceport.cargo_manifests;"
No código acima, primeiro criamos um arquivo de dados de exemplo de manifesto de carga cargo_manifests.txt com quatro registros de carga. Em seguida, usamos o comando LOAD DATA no Hive para carregar os dados na tabela bucketed cargo_manifests.
Resumo
Neste laboratório, exploramos a implementação de partições e buckets no Hadoop Hive. Começamos criando uma tabela particionada para armazenar dados de log de voo, particionada por ano e mês. Essa abordagem permite consultas e gerenciamento de dados eficientes, organizando os dados em partições separadas com base em critérios específicos.
Em seguida, carregamos dados de exemplo de log de voo na tabela particionada usando o comando LOAD DATA, garantindo que os dados fossem corretamente particionados por ano e mês.
Depois, criamos uma tabela bucketed para armazenar dados de manifesto de carga, bucketed pela coluna cargo_type. O bucketing ajuda a melhorar o desempenho das consultas, dividindo os dados em pedaços menores e mais gerenciáveis com base em uma coluna específica.
Finalmente, carregamos dados de exemplo de manifesto de carga na tabela bucketed usando o comando LOAD DATA.
Ao longo deste laboratório, aprendemos a importância da partição e do bucketing no ecossistema Hadoop para otimizar o armazenamento de dados, o desempenho das consultas e o gerenciamento geral de dados. Ao implementar essas técnicas, podemos garantir operações eficientes na Interstellar Spaceport Authority e tomar decisões informadas com base na vasta quantidade de dados disponíveis.



