Está en la página 1de 5

Introducción al uso de

Spatial Tools para Hadoop


Salomón Ramı́rez*
Seminario: Spatial Big Data
Especialización en Sistemas de Información Geográfica
Facultad de Ingenierı́a
Universidad Distrital Francisco José de Caldas
Bogotá, Colombia
Octubre de 2019

Contenido distribuido bajo Licencia Creative Commons



C
CC BY:

Resumen
Este documento brinda una breve introducción al uso de algunas he-
rramientas espaciales para del ecosistema de Hadoop en el contexto de
Big Data. Especı́ficamente se realiza un caso de uso analı́tico tomado y
adaptado de la documentación oficial de ESRI GIS Tools for Hadoop con
fines académicos, sin pretender ser una guı́a exhaustiva, ni remplazar la
documentación oficial. Se asume que el lector esta familiarizado con los
fundamentos de Big Data, la arquitectura de Hadoop, el uso de MapRedu-
ce, el uso de diferentes herramientas para Big Data soportadas por Hadoop
y el lenguaje de bases de datos relacionales SQL.

1. Introducción
La agregación espacial es muy útil para resumir grandes volúmenes de datos
permitiendo obtener un significativo conjunto datos reducido que exhibe pa-
trones. A continuación se realiza un ejercicio de agregación espacial empleando
Funciones Definidas por el Usuario - UDFs (Constructors, Relationships, Ope-
rations, Accessors), que extienden Hive a través de DDL de SQL y se basan en
las capacidades del API ESRI Geometry.
* seramirezf@correo.udistrital.edu.co

1
2. Agregación espacial
Agregación de puntos en polı́gonos irregulares
BQ: ¿Cuántos eventos asociados a movimientos telúricos se presentaron en
cada Condado del estado de California, US?

1. Creé la carpeta spatial en la ruta /home/cloudera del sistema de archivos


local de la máquina virtual.
2. Creé dos carpetas nuevas dentro de la carpeta creada anteriormente, co-
rrespondientes a lib y data.
3. Descargue las librerı́as de Java usadas sobre Hadoop para manipular datos
espaciales, correspondientes a spatial-sdk-hadoop, spatial-sdk-hive, spatial-
sdk-json y esri-geometry-api.
4. Copie las librerı́as descargadas en formato jar a la carpeta lib creada
anteriormente.
5. Descargue el archivo earthquakes.csv, que contiene datos correspondientes
a eventos de movimientos telúricos globales para le año 2014, almacenados
en formato de texto delimitado por comas.
6. Descargue el archivo california-counties.json, que contiene datos vectoria-
les poligonales correspondientes a los condados del estado de California en
Estados Unidos, almacenados en formato geojson.
7. Mueva los archivos descargados anteriormente hacia la carpeta data creada
previamente.
8. Obtenga los cinco primeros registros del archivo earthquakes.csv desde una
CLI.
9. Describa el contenido de archivo e indique el tipo de estructura que posee.
10. Creé la carpeta earthquakes en la ruta /user/hive/ del HDFS.
11. Copie los archivos a la carpeta creada anteriormente en el HDFS.
12. Copie los datos del sistema de archivos local a la carpeta creada anterior-
mente en el HDFS.
13. Inicie el editor de consultas Hive desde Hue.
14. Cargue las librerı́as externas necesarias para realizar análisis espacial, em-
pleando las siguientes instrucciones:
add jar
/home/cloudera/spatial/lib/esri-geometry-api-2.0.0.jar
/home/cloudera/spatial/lib/spatial-sdk-hive-2.0.0.jar
/home/cloudera/spatial/lib/spatial-sdk-json-2.0.0.jar;

2
15. Creé UDFs temporales para usar la API espacial para Hadoop, mediante
las siguientes instrucciones:
create temporary function ST_Point as ’com.esri.hadoop.hive.ST_Point’;
create temporary function ST_Contains as ’com.esri.hadoop.hive.ST_Contains’;
16. Cree una tabla con el esquema para almacenar los datos contenidos en el
archivo csv, empleando las siguientes instrucciones:
CREATE TABLE earthquakes (
earthquake_date STRING,
latitude DOUBLE,
longitude DOUBLE,
depth DOUBLE,
magnitude DOUBLE,
magtype STRING,
mbstations STRING,
gap STRING,
distance STRING,
rms STRING,
source STRING,
eventid STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ’,’ STORED AS TEXTFILE
tblproperties ("skip.header.line.count"="1");
17. Cree una tabla con el esquema para almacenar los datos contenidos en el
archivo json empleando las siguientes instrucciones:

CREATE TABLE counties (


Area STRING,
Perimeter STRING,
State STRING,
County STRING,
Name STRING,
BoundaryShape BINARY
)
ROW FORMAT SERDE ’com.esri.hadoop.hive.serde.EsriJsonSerDe’
STORED AS INPUTFORMAT ’com.esri.json.hadoop.EnclosedEsriJsonInputFormat’
OUTPUTFORMAT ’org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat’;

18. Ingeste los datos en las respectivas tablas, mediante las siguientes instruc-
ciones:
LOAD DATA INPATH ’earthquakes/earthquakes.csv’ OVERWRITE INTO TABLE earthquakes;
LOAD DATA INPATH ’earthquakes/california-counties.json’ OVERWRITE INTO TABLE counties;
19. Realice el análisis espacial para responder el interrogante de negocio pla-
teado inicialmente, usando las siguientes instrucciones:

3
SELECT counties.name, count(*) cnt FROM counties
JOIN earthquakes
WHERE ST_Contains(
counties.boundaryshape, ST_Point(earthquakes.longitude, earthquakes.latitude)
)
GROUP BY counties.name
ORDER BY cnt desc;
20. Describa e interprete el resultado obtenido anteriormente.
21. Formule conclusiones.

Agregación de puntos en polı́gonos regulares


BQ: ¿Cuál es la intensidad global de los eventos asociados movimientos
telúricos si se agregan en cajas de 0.5 grados de lado?
1. Indique cuál es la longitud del lado cada caja equivalente en kilómetros.
2. Agregue la librerı́a externa adicional requerida, empleando las siguientes
instrucciones:
add jar
/home/cloudera/spatial/lib/spatial-sdk-hadoop.jar;
3. Creé UDFs temporales adionales para llamar la API espacial
create temporary function ST_Bin as ’com.esri.hadoop.hive.ST_Bin’;
create temporary function ST_BinEnvelope as ’com.esri.hadoop.hive.ST_BinEnvelope’;
4. Creé la tabla earthquake agg para guardar los resultados de la agregación
espacial, usando las siguientes instrucciones:
CREATE TABLE earthquakes_agg(
area BINARY,
count DOUBLE)
ROW FORMAT SERDE ’com.esri.hadoop.hive.serde.EsriJsonSerDe’
STORED AS INPUTFORMAT ’com.esri.json.hadoop.EnclosedEsriJsonInputFormat’
OUTPUTFORMAT ’org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat’;;
5. Ejecute el análisis de agregación espacial y guarde los resultados en la
tabla creada previamente, mediante las siguientes instrucciones:
FROM (
SELECT ST_Bin(
0.5, ST_Point(longitude, latitude)
) bin_id, * FROM earthquakes
) bins
INSERT OVERWRITE TABLE earthquakes_agg
SELECT ST_BinEnvelope(0.5, bin_id) shape, count(*) count
GROUP BY bin_id;

4
6. Indique cuántas cajas se generaron.
7. Repita el ejercicio generando cajas de otro tamaño que considere más
apropiado, almacene los resultados en tablas nuevas.
8. Formule conclusiones.

También podría gustarte