Análise de Gemas com Hadoop

HadoopBeginner
Pratique Agora

Introdução

No reino encantador da Academia Real de Magia, uma equipe de gemólogos habilidosos dedicava-se a desvendar os mistérios das gemas místicas que alimentavam o mundo mágico. Entre eles estava uma pesquisadora prodigiosa, Aria, cuja curiosidade inabalável e intelecto aguçado a tornavam uma força a ser reconhecida.

Recentemente, a academia adquiriu um vasto tesouro de dados relativos às propriedades e aplicações dessas gemas, uma riqueza de conhecimento que prometia abrir novos caminhos para a inovação mágica. No entanto, a enorme quantidade de informações apresentava um desafio assustador, que exigia a ajuda de ferramentas analíticas poderosas.

Aria, destemida, recorreu ao venerável ecossistema Hadoop, reconhecendo seu potencial para domar a vasta extensão de dados. Seu objetivo era duplo: aprofundar-se nas complexidades do comportamento das gemas e descobrir padrões ocultos que pudessem revolucionar a maneira como a magia era aproveitada e utilizada.

Explorando o Conjunto de Dados de Gemas

Nesta etapa, vamos nos familiarizar com o conjunto de dados de gemas e sua estrutura, estabelecendo as bases para nossa análise subsequente.

Primeiro, certifique-se de estar logado como o usuário hadoop executando o seguinte comando no terminal:

su - hadoop

Agora, vamos começar criando um exemplo. Copie a seguinte linha de comando no terminal para criar nosso arquivo de amostra.

mkdir -p hadoop/gemstone_data
cd hadoop/gemstone_data
echo "gem_id,gem_name,color,hardness,density,refractive_index" > gem_properties.csv
echo "1,Ruby    ,Red      ,9.0 ,4.0,1.77" >> gem_properties.csv
echo "2,Emerald ,Green    ,8.0 ,3.1,1.58" >> gem_properties.csv
echo "3,Sapphire,Blue     ,9.0 ,4.0,1.76" >> gem_properties.csv
echo "4,Diamond ,Colorless,10.0,3.5,2.42" >> gem_properties.csv
echo "5,Amethyst,Purple   ,7.0 ,2.6,1.54" >> gem_properties.csv
echo "6,Topaz   ,Yellow   ,8.0 ,3.5,1.63" >> gem_properties.csv
echo "7,Pearl   ,White    ,2.5 ,2.7,1.53" >> gem_properties.csv
echo "8,Agate   ,Multi    ,7.0 ,2.6,1.53" >> gem_properties.csv
echo "9,Rose    ,Pink     ,7.0 ,2.7,1.54" >> gem_properties.csv
echo "10,CatsEye,Green    ,6.5 ,3.2,1.54" >> gem_properties.csv
echo "gem_id,application" > gem_applications.csv
echo "1,Fire Magic       " >> gem_applications.csv
echo "2,Earth Magic      " >> gem_applications.csv
echo "3,Water Magic      " >> gem_applications.csv
echo "4,Enhancement Magic" >> gem_applications.csv
echo "5,Psychic Magic    " >> gem_applications.csv
echo "6,Lightning Magic  " >> gem_applications.csv
echo "7,Illusion Magic   " >> gem_applications.csv
echo "8,Strength Magic   " >> gem_applications.csv
echo "9,Love Magic       " >> gem_applications.csv
echo "10,Stealth Magic   " >> gem_applications.csv

Agora que já estamos no diretório gemstone_data, vamos dar uma olhada no conteúdo deste diretório:

ls

Ao navegar pelo diretório, você verá esses dois arquivos, cada um dedicado a um aspecto distinto dos dados das gemas. gem_properties.csv aprofunda-se nas características físicas das gemas, enquanto gem_applications.csv fornece informações sobre seus diversos usos mágicos.

Para obter informações mais detalhadas sobre nosso conjunto de dados, vamos dar uma olhada nas primeiras linhas de um desses arquivos:

head -n 5 gem_properties.csv

O resultado deve ser como o seguinte:

gem_id,gem_name,color,hardness,density,refractive_index
1,Ruby ,Red ,9.0 ,4.0,1.77
2,Emerald ,Green ,8.0 ,3.1,1.58
3,Sapphire,Blue ,9.0 ,4.0,1.76
4,Diamond ,Colorless,10.0,3.5,2.42

Este comando exibiu as primeiras cinco linhas do arquivo gem_properties.csv, dando a você um vislumbre de sua estrutura e conteúdo.

Criando uma Tabela Hive

Agora que nos familiarizamos com o conjunto de dados, vamos criar uma tabela Hive para armazenar e consultar os dados das propriedades das gemas.

Primeiro, inicie a Hive CLI:

hive

Dentro da Hive CLI, crie um novo banco de dados chamado gemstone_analysis para armazenar nossos dados de gemas:

CREATE DATABASE gemstone_analysis;

Em seguida, mude para o banco de dados recém-criado:

USE gemstone_analysis;

Com o banco de dados configurado, vamos criar uma tabela chamada gem_properties para armazenar os dados do arquivo gem_properties.csv. Esta tabela conterá informações sobre o ID da gema, nome, cor, dureza, densidade e índice de refração:

CREATE TABLE gem_properties (
  gem_id INT COMMENT 'ID único para a gema',
  gem_name STRING COMMENT 'Nome da gema',
  color STRING COMMENT 'Cor da gema',
  hardness FLOAT COMMENT 'Dureza da gema',
  density FLOAT COMMENT 'Densidade da gema',
  refractive_index FLOAT COMMENT 'Índice de refração da gema'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');

Esta instrução define a estrutura da tabela gem_properties, especificando os nomes das colunas e os tipos de dados. A cláusula ROW FORMAT indica que os dados são delimitados por vírgulas, e a cláusula STORED AS TEXTFILE especifica que os dados devem ser armazenados como um arquivo de texto simples.

Agora, vamos carregar os dados do arquivo gem_properties.csv na tabela gem_properties recém-criada:

LOAD DATA LOCAL INPATH '/home/hadoop/hadoop/gemstone_data/gem_properties.csv'
INTO TABLE gem_properties;

Este comando carrega os dados do caminho do arquivo especificado na tabela gem_properties.

Depois que os dados forem carregados, vamos verificar se foram carregados corretamente executando uma consulta SELECT simples para exibir as primeiras cinco linhas da tabela gem_properties:

SELECT * FROM gem_properties LIMIT 5;

Esta consulta exibirá as primeiras cinco linhas da tabela gem_properties, permitindo que confirmemos se os dados foram carregados corretamente. O resultado deve ser o seguinte:

OK
1 Ruby     Red       9.0 4.0 1.77
2 Emerald  Green     8.0 3.1 1.58
3 Sapphire Blue      9.0 4.0 1.76
4 Diamond  Colorless 10.0 3.5 2.42
5 Amethyst Purple    7.0 2.6 1.54
Time taken: 1.234 seconds, Fetched: 5 row(s)

Analisando as Propriedades das Gemas

Nesta etapa, vamos aproveitar o poder da cláusula DISTRIBUTE BY no Hive para analisar eficientemente os dados das propriedades das gemas.

Para começar, vamos criar uma nova tabela chamada distributed_gem_properties para particionar os dados pela coluna gem_name:

(Pode levar um pouco de tempo, por favor, seja paciente)

CREATE TABLE distributed_gem_properties
AS
SELECT * FROM gem_properties
DISTRIBUTE BY gem_id;

Esta tabela espelha a estrutura da tabela gem_properties original, mas incorpora cláusulas adicionais para organizar e distribuir os dados de forma eficaz:

AS SELECT * FROM gem_properties: Esta parte da instrução seleciona todas as colunas e linhas da tabela gem_properties existente. Estamos essencialmente copiando os dados da tabela original para nossa nova tabela distribuída.

DISTRIBUTE BY gem_id: Esta cláusula especifica a distribuição dos dados entre os reducers com base na coluna gem_id. Ao distribuir os dados dessa forma, podemos aproveitar o processamento paralelo para analisar as propriedades das gemas de forma mais eficiente.

Agora que temos nossa tabela distribuída configurada, podemos prosseguir para realizar várias análises nos dados das propriedades das gemas com maior eficiência.

Vamos executar uma consulta para encontrar gemas com dureza entre 8.0 e 9.0, copie e cole este código no terminal para executar.

SELECT * FROM distributed_gem_properties WHERE hardness BETWEEN 8.0 AND 9.0;

Esta consulta recuperará dados de gemas da tabela distribuída onde a dureza se enquadra no intervalo especificado. O resultado deve ser o seguinte:

OK
6 Topaz    Yellow    8.0 3.5 1.63
3 Sapphire Blue      9.0 4.0 1.76
2 Emerald  Green     8.0 3.1 1.58
1 Ruby     Red       9.0 4.0 1.77
Time taken: 0.388 seconds, Fetched: 4 row(s)

Em seguida, vamos experimentar o seguinte trecho de código, que utiliza GROUP BY.

SELECT color, COUNT(*) AS count FROM distributed_gem_properties GROUP BY color;

Este código é uma instrução de consulta usada para contar o número de gemas para cada cor na tabela distribuída distributed_gem_properties. O resultado deve ser o seguinte:

OK
Blue      1
Colorless 1
Green     2
Multi     1
Pink      1
Purple    1
Red       1
White     1
Yellow    1
Time taken: 18.566 seconds, Fetched: 9 row(s)

Aqui está outro exemplo de consulta usando PARTITION BY:

SELECT gem_name, color, COUNT(*) OVER(PARTITION BY color) AS color_count
FROM distributed_gem_properties;

Esta consulta seleciona gem_name e color da tabela distributed_gem_properties e conta o número de gemas para cada color. A cláusula PARTITION BY especifica por qual coluna particionar a contagem, neste caso, a coluna color. Isso gerará uma contagem separada para cada cor de gemas. O resultado deve ser o seguinte:

OK
Sapphire Blue      1
Diamond  Colorless 1
Emerald  Green     2
CatsEye Green     2
Agate    Multi     1
Rose     Pink      1
Amethyst Purple    1
Ruby     Red       1
Pearl    White     1
Topaz    Yellow    1
Time taken: 20.865 seconds, Fetched: 10 row(s)

Estes são apenas dois exemplos simples para nos ajudar a obter uma compreensão preliminar da análise e aplicação de tabelas distribuídas por DISTRIBUTE BY, incorporando comandos como PARTITION BY e GROUP BY. Isso conclui esta lição, e acredito que você agora tem uma certa compreensão.

Resumo

Neste laboratório, embarcamos em uma jornada cativante no reino da análise de gemas, guiados pela talentosa gemologista do mundo da magia, Aria. Ao aproveitar o poder do Hadoop e do Hive, mergulhamos em um vasto tesouro de dados, desvendando os segredos escondidos nas gemas místicas que alimentam a magia deste reino encantador.

Através de uma série de etapas cuidadosamente elaboradas, exploramos as complexidades do conjunto de dados de gemas, criamos uma tabela Hive robusta para armazenar e consultar os dados e, finalmente, aproveitamos a cláusula DISTRIBUTE BY para otimizar nossa análise. Essa técnica poderosa nos permitiu particionar e distribuir os dados de forma eficiente, abrindo caminho para consultas mais rápidas e focadas, revelando insights valiosos sobre as propriedades e aplicações dessas gemas notáveis.

Ao longo deste laboratório, não apenas ganhamos experiência prática com Hadoop e Hive, mas também testemunhamos o potencial transformador da análise de big data na desvendação dos mistérios do mundo da magia. Ao dominar essas ferramentas, nos equipamos com o conhecimento e as habilidades necessárias para embarcar em novas aventuras, onde os dados detêm a chave para desbloquear possibilidades ilimitadas e ultrapassar os limites da inovação mágica.