Introdução
Bem-vindo ao mundo futurista da Realidade Virtual (VR), onde a tecnologia e a imaginação se fundem para criar experiências imersivas como nunca antes. Você é um Anfitrião de Jogo VR, responsável por projetar e manter ambientes virtuais cativantes que transportam os jogadores para reinos além de seus sonhos mais selvagens.
Seu projeto mais recente é criar um jogo VR que simule a vasta extensão do universo, permitindo que os jogadores explorem galáxias distantes, descubram mistérios cósmicos e desvendem os segredos do cosmos. No entanto, para alcançar esse empreendimento ambicioso, você precisa aproveitar o poder do Big Data e alavancar as capacidades do ecossistema Hadoop.
Neste laboratório, você mergulhará no mundo das Funções Definidas pelo Usuário (UDFs - User Defined Functions) do Hadoop, um recurso poderoso que permite estender a funcionalidade do Hive, o componente de data warehouse do Hadoop. Ao dominar as UDFs, você pode criar funções personalizadas adaptadas aos requisitos exclusivos do seu jogo, permitindo que você processe e analise dados astronômicos com eficiência e precisão sem precedentes.
Configurar o Ambiente
Nesta etapa, você configurará o ambiente necessário para trabalhar com Hadoop e Hive. Primeiro, certifique-se de ter mudado para o usuário hadoop executando o seguinte comando em seu terminal:
su - hadoop
Em seguida, navegue até o diretório /home/hadoop, que será seu diretório de trabalho padrão:
cd /home/hadoop
Crie um novo diretório chamado udfs para armazenar suas Funções Definidas pelo Usuário:
mkdir udfs
cd udfs
Criar uma UDF Simples
Nesta etapa, você criará uma Função Definida pelo Usuário (UDF) simples que calcula a distância entre dois objetos celestes com base em suas coordenadas. Essa função será essencial para renderizar com precisão as posições e movimentos dos corpos celestes em seu jogo VR.
Primeiro, crie um novo arquivo chamado DistanceCalculator.java no diretório udfs:
nano DistanceCalculator.java
Copie e cole o seguinte código no arquivo:
import org.apache.hadoop.hive.ql.exec.UDF;
public class DistanceCalculator extends UDF {
public double evaluate(double x1, double y1, double z1,
double x2, double y2, double z2) {
double dx = x1 - x2;
double dy = y1 - y2;
double dz = z1 - z2;
double distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
return distance;
}
}
Este código Java define uma UDF chamada DistanceCalculator que recebe seis parâmetros DoubleWritable representando as coordenadas de dois objetos celestes (x1, y1, z1 e x2, y2, z2). O método evaluate calcula a distância euclidiana entre os dois objetos e retorna o resultado como um DoubleWritable.
Salve o arquivo e saia do editor de texto.
Em seguida, compile o código Java usando o seguinte comando:
javac -source 8 -target 8 -classpath /home/hadoop/hadoop/share/hadoop/common/*:/usr/local/hive/lib/* DistanceCalculator.java
Este comando compila o arquivo DistanceCalculator.java e cria um arquivo bytecode DistanceCalculator.class.
Finalmente, crie um arquivo JAR contendo a classe compilada:
jar cf distance_calculator.jar DistanceCalculator.class
Este comando cria um arquivo JAR chamado distance_calculator.jar contendo o bytecode DistanceCalculator.class.
Registrar a UDF no Hive
Agora que você criou a UDF DistanceCalculator, você precisa registrá-la no Hive para poder usá-la para processar dados astronômicos.
Primeiro, inicie o shell do Hive executando o seguinte comando:
hive
Uma vez no shell do Hive, crie uma função temporária usando a UDF DistanceCalculator:
ADD JAR /home/hadoop/udfs/distance_calculator.jar;
CREATE TEMPORARY FUNCTION distance_calculator AS 'DistanceCalculator';
O comando ADD JAR adiciona o arquivo JAR contendo a UDF compilada ao ambiente Hive, e o comando CREATE TEMPORARY FUNCTION cria uma função temporária chamada distance_calculator que referencia a classe DistanceCalculator.
Agora você pode usar a função distance_calculator em suas consultas Hive. Por exemplo, vamos criar uma tabela de amostra chamada celestial_objects e calcular a distância entre dois objetos:
CREATE TABLE celestial_objects (
name STRING,
x DOUBLE,
y DOUBLE,
z DOUBLE
);
Esta consulta cria uma tabela celestial_objects com colunas para o nome e coordenadas de objetos celestes.
INSERT INTO celestial_objects VALUES
('Earth', 0.0, 0.0, 0.0),
('Moon', 384400.0, 0.0, 0.0),
('Mars', 227940000.0, 0.0, 0.0);
Em seguida, insere dados de amostra para a Terra, a Lua e Marte.
SELECT
o1.name AS object1,
o2.name AS object2,
distance_calculator(o1.x, o1.y, o1.z, o2.x, o2.y, o2.z) AS distance
FROM celestial_objects o1
CROSS JOIN celestial_objects o2
WHERE o1.name < o2.name;
Finalmente, ele realiza um cross join (junção cruzada) entre todos os pares de objetos e calcula a distância entre eles usando a UDF distance_calculator.
A saída deve ser semelhante a:
object1 object2 distance
Earth Moon 384400.0
Mars Moon 2.275556E8
Earth Moon 384400.0
...
Criar uma UDF Permanente
Embora as funções temporárias sejam úteis para testes e exploração, elas são perdidas quando você sai do shell do Hive. Para tornar sua UDF permanentemente disponível, você precisa criar uma função permanente.
Primeiro, saia do shell do Hive executando o seguinte comando:
quit;
Em seguida, crie um novo arquivo chamado create_udf.hql no diretório udfs:
nano create_udf.hql
Copie e cole o seguinte código no arquivo:
CREATE FUNCTION distance_calculator AS 'DistanceCalculator' USING JAR 'hdfs:///home/hadoop/udfs/distance_calculator.jar';
Esta consulta Hive cria uma função permanente chamada distance_calculator que referencia a classe DistanceCalculator no arquivo distance_calculator.jar armazenado no Hadoop Distributed File System (HDFS).
Salve o arquivo e saia do editor de texto.
Em seguida, crie o arquivo distance_calculator.jar no HDFS executando o seguinte comando:
hadoop fs -mkdir -p /home/hadoop/udfs
hadoop fs -put distance_calculator.jar /home/hadoop/udfs/
Este comando copia o arquivo distance_calculator.jar do sistema de arquivos local para o diretório /home/hadoop/udfs/ no HDFS.
Finalmente, execute o script create_udf.hql no Hive:
hive -f create_udf.hql
Este comando executa o script Hive, criando a função distance_calculator permanente.
Agora você pode usar a função distance_calculator em suas consultas Hive, mesmo depois de sair e reiniciar o shell do Hive.
Resumo
In this lab, you learned how to create and use User Defined Functions (UDFs) in Hadoop Hive, a powerful feature that allows you to extend the functionality of the data warehouse component of Hadoop. By designing a futuristic VR game that simulates the exploration of the cosmos, you gained hands-on experience in creating a custom UDF to calculate the distance between celestial objects based on their coordinates.
Through this lab, you not only mastered the process of developing, compiling, and registering UDFs in Hive but also gained valuable insights into how UDFs can be leveraged to process and analyze astronomical data with unprecedented efficiency and accuracy. The skills you acquired will be invaluable as you continue to push the boundaries of virtual reality experiences, immersing players in captivating and realistic cosmic adventures.



