Você está na página 1de 102

Máster en Business Intelligence &

Data Science (2017/2018)


Paralelismo de datos con Hadoop:
Introducción a HBase

David Alvaro Mediavilla


Big Data Project Manager/cubenube
dalvarom@gmail.com
Sesión III: HBase

Objetivos:
❖Conocer las características de HBase
❖Aprender a instalarlo sobre un servidor Hadoop y conocer su estructura de directorios
❖Aprender la terminología asociada a sus estructuras de datos
❖Conocer los comandos básicos disponibles
❖Resolver ejemplos simples
❖Aprender a usar la shell
❖Integración con otros sistemas como Pig
❖API Java para gestionar HBase
❖Ejercicio de la sesión

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 2
Características

Características:
● Open Source
● Java
● Distribuido
● Escalable
● Tolerancia a fallos
● Redundancia de datos
● HDFS
● Map Reduce
● Orientado a columnas
● Fragmentación automática por regiones
● Cacheo de bloques
● Tipos de datos: almacena cualquier cosa que se pueda convertir a byte

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 3
Terminología

Origen de HBase: BigTable

Namespace: Tablas: compuesta por múltiples filas


● Hbase
● Default Region: distribución y disponibilidad del dato (entre 20 y 200)
http://hbase.apache.org/book/regions.arch.html
Filas:
● Clave de fila que se emplea como criterio de ordenación
● Columnas: formada por Column Family y un Column Qualifier separados por ‘,’
○ Column Family: almacena información de la columna y sus valores. Cada fila de la tabla
contiene las mismas column Families pero no todas tienen que contener información
○ Column Qualifier: proporciona un índice para identificar el tipo de datos.

Timestamp: identifica la versión del dato almacenado.

Column Family: Datos Personales Column Family Datos Oficina


Celda con
Row Key Nombre Teléfono Dirección Teléfono timestamps

00001 Juan 622335522 C/ Mayor 12 91-6625522

00002 María 663322557 C/Mayor 12 91-6625522

00003 Pedro 92-4442221 Av. Constit. 1 91-5522662

00004 Marcos 91-5553332 C/Mayor 12 91-6625520

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 4
Descarga

http://hbase.apache.org/

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 5
Instalación
$ wget http://apache.rediris.es/hbase/2.0.0-alpha4/hbase-2.0.0-alpha4-bin.tar.gz

$ cd /home/bigdata/Descargas
$ tar xzvf hbase-2.0.0-alpha4-bin.tar.gz

$ mv hbase-2.0.0-alpha4 /home/bigdata/hbase
$ cd /home/bigdata/hbase
$ ls

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 6
Configuración
$ cd conf
$ nano hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/bigdata/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name
>
<value>/home/bigdata/zookeeper</value>
</property>
</configuration>

$ sudo nano ~/.bashrc

# Rutas de HBase
export HBASE_HOME=/home/bigdata/hbase
export PATH=$PATH:/$HBASE_HOME/lib
export PATH=$PATH:/$HBASE_HOME/bin
# Fin Rutas de HBase

$ source ~/.bashrc

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7
Zookeeper

En un sistema distribuido es necesario mantener:


● Información de configuración
● Nombres de máquinas
● Sincronización entre los propios sistemas distribuidos
● Proveer servicios de grupos

Zoopeeker:
● interfaz sencilla para gestionar este servicio centralizado de coordinación.
● Servicio distribuido
● Alta disponibilidad al estar disponible en varias máquinas
● Posee un sistema de consenso o de pooling para determinar los nodos vivos
● Incluye herramientas de gestión de grupos
● Libera a las aplicaciones que gestiona de implementar su propio sistema de replicación y simplifica los cambios de
configuración

http://zookeeper.apache.org/
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8
Arrancar HBase
$ cd /home/bigdata
$ start-hbase.sh

$ jps

$ hbase shell
hbase(main)>status
hbase(main)>exit

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9
Configuración

$ rm /home/bigdata/hbase/lib/slf4j-log4j12-*.jar
$ stop-hbase.sh
$ start-hbase.sh
$ hbase shell
hbase> exit

$ ls /home/bigdata/zookeeper

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 10
Estructura de directorios
$ cd $HBASE_HOME
$ ls

bin: contiene los scripts facilitados por HBase para arrancar y parar HBase, así como otros ejecutables para lanzar demonios o arrancar
nodos maestros adicionales.

conf: contiene los ficheros que definen cómo está configurado HBase

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 11
Estructura de directorios

docs: contiene una copia del proyecto web de HBase, incluyendo la documentación de las herramientas, API y el propio proyecto.
Puedes consultar la información desde un navegador accediendo a docs/index.html

hbase-webapps: contiene los interfaz de usuario implementados como aplicaciones web Java.

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 12
Estructura de directorios

Por ejemplo, podemos acceder al interfaz web de master accediendo al puerto 60010
http://localhost:16010

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 13
Estructura de directorios

lib: librerías java auxiliares necesarias para las distintas aplicaciones Java.

logs: logs de los distintos demonios que lanza HBase.

src: si se ha descargado el paquete binario, de dispondrá de los códigos fuentes del proyecto HBase.

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 14
Modos de funcionamiento

Standalone: sistema de archivos local y demonios de HBase y Zookeeper en la misma JVM

Pseudo-distribuido: emplea sistema de archivos de HDFS


<configuration>
...
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

Completamente distribuido: los demonios se distribuyen en diferentes nodos del cluster.


<configuration>
...
<property>
<name>hbase.rootdir</name>
<value>hdfs://namenode.foo.com:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
...
</configuration>

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 15
Comandos disponibles en HBase Shell

● Comandos de uso general


● Comandos de definición de datos (DDL)
● Comandos de manipulación de datos (DML)
● Comandos avanzados

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 16
Comandos generales
$ hbase shell
> status

> version

> help version

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 17
Comandos generales

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 18
DDL Namespaces
> create_namespace 'masterHadoop'

> alter_namespace 'masterHadoop', {METHOD=> 'set', 'Organismo' => 'UAH' }


> alter_namespace 'masterHadoop', {METHOD=> 'set', 'Curso' => '2017-2018' }

> alter_namespace 'masterHadoop', {METHOD=> 'unset', NAME => 'Curso' }

> describe_namespace 'masterHadoop'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 19
DDL Namespaces

> list_namespace

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 20
DDL Tablas: Create
> create 'masterHadoop:tabla_ejemplo' , {NAME=>'column_family_1', VERSIONS => 1, TTL => 2592000,
BLOCKCACHE=> true}

> create 'tabla_ejemplo_en_default_namespace', {NAME=>'column_family_1'}, {NAME=>'column_family_2'},


{NAME=>'column_family_3'}

> create 'tabla1' ,'column_family_1', 'column_family_2','column_family_3'

> list_namespace_tables 'masterHadoop'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 21
DDL Tablas: alter
> list_namespace_tables 'default'

> alter 'tabla1', NAME =>'column_family_1', VERSIONS => 5

> alter 'tabla1', METHOD =>'table_att', MAX_FILESIZE => '134217728'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 22
DDL Tablas: alter
> alter 'tabla1', {NAME =>'column_family_1'}, {NAME =>'column_family_2', METHOD => 'delete'}

> alter 'tabla1', NAME =>'column_family_1', METHOD => 'delete'

> alter 'tabla1', 'delete' => 'column_family_3'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 23
DDL Tablas: otros comandos
Otros comandos > list
❖alter_async
❖alter_status
❖describe
❖disable
❖disable_all
❖drop
❖drop_all
❖enable
❖enable_all > describe 'tabla1'
❖exists
❖get_table
❖is_disabled
❖is_enabled
❖list
❖show_filters

> disable 'tabla1' > is_disabled 'tabla1'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 24
DML
> drop 'tabla1'

> create 'tabla1' ,'column_family_1', 'column_family_2','column_family_3'

> put 'tabla1', 'r1', 'column_family_1', 'val1'

> get 'tabla1', 'r1'

> delete 'tabla1', 'r1', 'column_family_1'

> deleteall 'tabla1', 'r1'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 25
DML
Comandos DML
❖append
❖count
❖delete
❖delete_all
❖get
❖get_counter
❖incr
❖put
❖scan
❖truncate
❖truncate_preserve

> put 'tabla1', 'r1', 'column_family_1', 'val1'

> scan 'tabla1'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 26
Comandos avanzados

Comandos de HBase Replicación del cluster


❖assign ❖add_peer
❖balancer ❖remove_peer
❖balance_switch ❖list_peers
❖close_region ❖enable_peer
❖compact ❖disable_peer
❖flush ❖start_replication
❖hlog_roll ❖stop_replication
❖major_compact
❖move
❖scan Seguridad
❖split ❖grant
❖unassign ❖revoke
❖zk_dump ❖user_permission

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 27
Ejemplo Versionado: 1/8
> create 'masterHadoop:tabla_versiones' , {NAME=>'column_family_1', VERSIONS => 3, TTL => 2592000,
BLOCKCACHE=> true }

> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor1'

> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor2'

> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor3'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 28
Ejemplo Versionado: 2/8
> scan 'masterHadoop:tabla_versiones'

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor4'

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 29
Ejemplo Versionado: 3/8

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 4}

Insertamos un valor inferior al mayor que existiera. No se insertará


> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor5', 1513000000000

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 30
Ejemplo Versionado: 4/8
http://www.epochconverter.com/

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 31
Ejemplo Versionado: 5/8

Insertamos un valor entre el segundo y el tercero


> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor5', 1513108200000

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 32
Ejemplo Versionado: 6/8

>alter 'masterHadoop:tabla_versiones', NAME =>'column_family_1', VERSIONS => 2

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

> alter 'masterHadoop:tabla_versiones', NAME =>'column_family_1', TTL=> 120

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 33
Ejemplo Versionado: 7/8
> put 'masterHadoop:tabla_versiones', 'r1', 'column_family_1', 'valor6'

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

Subimos el TTL a 10 minutos


>alter 'masterHadoop:tabla_versiones', NAME =>'column_family_1', TTL=> 600

> scan 'masterHadoop:tabla_versiones', {VERSIONS => 3}

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 34
Ejemplo Versionado: 8/8

> delete 'masterHadoop:tabla_versiones', 'r1', 'column_family_1',1513279998109

Eliminar toda la información de una row


> delete 'masterHadoop:tabla_versiones', 'r1', 'column_family_1'

> disable 'masterHadoop:tabla_versiones'

> drop 'masterHadoop:tabla_versiones'

> exit

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 35
Ejemplo Column Families: 1/9

1. Arrancar HBase (si no está arrancada) y acceder a la consola de HBase


$ jps
$ cd $HBASE_HOME
$ hbase shell

2. Comprobar el estado de HBase


> status

3. Crear un namespace llamado ejercicios


> create_namespace 'ejercicios'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 36
Ejemplo Column Families: 2/9

4. Crear una tabla llamada predicciones con las siguientes columnas: localidad, temperatura y cuota de nieve
> create 'ejercicios:prediccion', 'localidad', 'temperatura', 'cuota_nieve'

5. Hacer un describe de la tabla


> describe 'ejercicios:prediccion'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 37
Ejemplo Column Families: 3/9

6. Acceder a la página de la Aemet para obtener las predicciones de Madrid


http://www.aemet.es/es/eltiempo/prediccion/municipios/madrid-id28079

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 38
Ejemplo Column Families: 4/9
7. Cargar los datos de las predicciones de la aemet de Madrid

Se empleará como clave la fecha del día y el id de la estación de la Aemet (28079). Por cada línea habrá que realizar varios insert
teniendo en cuenta que no todos los días tienen la misma información de predicción

put 'ejercicios:prediccion', '20151213#28079', 'temperatura:max', 13


put 'ejercicios:prediccion', '20151213#28079', 'temperatura:min', 5

put 'ejercicios:prediccion', '20151214#28079', 'temperatura:max', 14


put 'ejercicios:prediccion', '20151214#28079', 'temperatura:min', 7
put 'ejercicios:prediccion', '20151214#28079', 'cuota_nieve',1600

put 'ejercicios:prediccion', '20151215#28079', 'temperatura:max', 14


put 'ejercicios:prediccion', '20151215#28079', 'temperatura:min', 6
put 'ejercicios:prediccion', '20151215#28079', 'cuota_nieve', 2100

put 'ejercicios:prediccion', '20151216#28079', 'temperatura:max', 15


put 'ejercicios:prediccion', '20151216#28079', 'temperatura:min', 3

put 'ejercicios:prediccion', '20151217#28079', 'temperatura:max', 15


put 'ejercicios:prediccion', '20151217#28079', 'temperatura:min', 3

put 'ejercicios:prediccion', '20151218#28079', 'temperatura:max', 14


put 'ejercicios:prediccion', '20151218#28079', 'temperatura:min', 4

put 'ejercicios:prediccion', '20151218#28079', 'temperatura:max', 15


put 'ejercicios:prediccion', '20151218#28079', 'temperatura:min', 3

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 39
Ejemplo Column Families: 5/9

8. Escanear la información de la tabla


> scan 'ejercicios:prediccion'

9. Consultar la información del día 15/12/2015 del municipio 28079


> get 'ejercicios:prediccion','20151215#28079'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 40
Ejemplo Column Families: 6/9

10. Consultar la información de la temperatura máxima del día 15/12/2015 del municipio 28079
> get 'ejercicios:prediccion','20151215#28079', 'temperatura:max'

11. Consultar la información de la cuota de nieve del día 14/12/2015 del municipio 28079
> get 'ejercicios:prediccion','20151214#28079', 'cuota_nieve'

12. Eliminar la temperatura máxima del registro del día 18/12/2015 del municipio 28079
> delete 'ejercicios:prediccion','20151218#28079','temperatura:max '

13. Consultar el registro del día 18/12/2015 del municipio 28079


> get 'ejercicios:prediccion','20151218#28079'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 41
Ejemplo Column Families: 7/9

14. Emplear los comandos de ayuda


> help 'scan'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 42
Ejemplo Column Families:8/9
15. Emplear limit para obtener algunos valores
> scan 'ejercicios:prediccion', { COLUMNS => 'temperatura', LIMIT=> 2 }

16. Emplear rangos de fechas


> scan 'ejercicios:prediccion', { COLUMNS => 'temperatura', TIMERANGE => [1513280525000, 1513280526000] }

17. Filtrado por columnas para obtener valores de temperatura mayores a 12


> scan 'ejercicios:prediccion', { COLUMNS => 'temperatura:max', FILTER => "ValueFilter( >, 'binary:12' )" }

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 43
Ejemplo Column Families:9/9
18. Eliminar un registro completo del día 17
> deleteall 'ejercicios:prediccion','20151217#28079'

19. Deshabilitar tabla de prediccion


> disable 'ejercicios:prediccion'

20. Borrar tabla de predicciones


> drop 'ejercicios:prediccion'

21. Listar tablas


> list

22. Exit
> exit

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 44
Ejemplo Shell:1/12

Creamos un fichero con la información


$ nano /home/bigdata/ejemplos/HBase/gestionar_alumnos.sh

#!/bin/sh
# Creamos la tabla
create 'alumnos', 'datos_personales'
# Consultamos la información de la tabla
describe 'alumnos'
# Añadimos un registro llamado alumno con distinta información en una única column family con varios column qualifiers
put 'alumnos', 'alumno1', 'datos_personales:nombre', 'Juan'
put 'alumnos', 'alumno1', 'datos_personales:apellido1', 'Pérez'
put 'alumnos', 'alumno1', 'datos_personales:apellido2', 'Garcia'
put 'alumnos', 'alumno1', 'datos_personales:email', 'jperez@masterbigdata.es'
# Comprobamos que la tabla tiene datos
scan 'alumnos'
# Recuperamos un elemento
get 'alumnos', 'alumno1'
# Deshabilitamos la tabla
disable 'alumnos'
# Borramos la tabla.
drop 'alumnos'
# Salimos de la shell
exit

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 45
Ejemplo Shell:2/12

Comprobamos si está arrancado hbase y si no lo arrancamos


$ jps
$ start-hbase.sh

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 46
Ejemplo Shell:3/12
Ejecutamos el script
$ hbase shell /home/bigdata/ejemplos/HBase/gestionar_alumnos.sh

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 47
Ejemplo Shell:4/12

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 48
Ejemplo Shell:5/12
Volvemos a crear la tabla
$ echo "create 'alumnos', 'info'" | hbase shell

Accedemos a la shell para llenar de datos la tabla


$ hbase shell

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 49
Ejemplo Shell:6/12
Empleamos JRuby para hacer una carga de datos
hbase(main):001:0> for i in '1'..'20' do \
hbase(main):002:1* put "alumnos", "alumno_#{i}", "info:email", "alumno_#{i}@masterbigdata.com" \
hbase(main):003:1* end

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 50
Ejemplo Shell:7/12

Comprobamos que los datos se han insertado correctamente


hbase(main):004:0> scan 'alumnos'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 51
Ejemplo Shell:8/12
Obtenemos un alumno
hbase(main):005:0> get 'alumnos', 'alumno_1'

Obtenemos la fecha de inserción de su dato


hbase(main):006:0> Time.at(1513281568660/1000)

Abandonamos la shell
hbase(main):007:0> exit

Creamos un fichero con la información


$ nano /home/bigdata/ejemplos/HBase/scan_alumnos.sh

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 52
Ejemplo Shell:9/12
scan 'alumnos', {STARTROW => 'alumno_3', STOPROW => 'alumno_8'}
exit

Ejecutamos el script
$ hbase shell /home/bigdata/ejemplos/HBase/scan_alumnos.sh

Mejoramos el fichero de consulta


$ nano /home/bigdata/ejemplos/HBase/scan_alumnos2.sh

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 53
Ejemplo Shell:10/12

#!/bin/bash
TABLE=$1
STARTROW=$2
STOPROW=$3
exec hbase shell <<EOF
scan "${TABLE}", {STARTROW => "${STARTROW}", STOPROW => "${STOPROW}"}
EOF

Ejecutamos el script
$ cd /home/bigdata/ejemplos/HBase
$ sudo chmod 755 scan_alumnos2.sh
$ ls -lrt scan_alumnos2.sh

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 54
Ejemplo Shell:11/12

Ejecutamos el script
$ ./scan_alumnos2.sh alumnos alumno_3 alumno_8

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 55
Ejemplo Shell:12/12

Repetimos sin indicar fecha final


$ ./scan_alumnos2.sh alumnos alumno_3

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 56
Integración de HBase con PIG 1/5
1. Arrancar HBase y acceder a la consola de HBase
$ cd $HBASE_HOME
$ start-hbase.sh
$ jps
$ hbase shell

2. Crear una tabla llamada personas en el namespace ejemplos con una columna llamada info
> create 'ejercicios:personas', 'info'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 57
Integración de HBase con PIG 2/5

3. Abrir otra consola

4. Crear un fichero llamado personas.csv que contendrá los nombres y apellidos de un grupo de personas
$ nano /home/bigdata/ejemplos/HBase/personas.csv
1, Juan, Pérez
2, Maria, Sánchez
3, Pedro, Rodríguez
4, Marta, Gómez

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 58
Integración de HBase con PIG 3/5
5. Crear fichero pig de carga de datos

$ nano /home/bigdata/ejemplos/HBase/carga_personas.pig
register '/home/bigdata/hbase/lib/hbase-common-*.jar';
register '/home/bigdata/hbase/lib/hbase-client-*.jar';
register '/home/bigdata/hbase/lib/protobuf-java-*.jar';

-- Cargamos el fichero csv empleando el separador , en los campos id, nombre y apellidos
datos = LOAD '/home/bigdata/ejemplos/HBase/personas.csv' USING PigStorage( ',' ) AS (
id: chararray,
nombre: chararray,
apellidos: chararray );
-- Una vez cargados los datos en PIG, realizamos la carga en el namespace ejercicios dentro de la tabla personas, en la columna info.
STORE datos INTO 'hbase://ejercicios:personas' USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage ('info:nombre info:apellidos');

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 59
Integración de HBase con PIG 4/5
6. Comprobamos las librerías de PIG
$ ls $PIG_HOME/lib/h2

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 60
Integración de HBase con PIG 5/5

7. Ejecutar el script
$ cd /home/bigdata/ejemplos/HBase
$ pig -x local carga_personas.pig

8. Consultamos los datos en HBase


> scan 'ejercicios:personas'
> exit

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 61
Compilación de PIG 1/7

En algunos casos puede ser necesario compilar Pig con compatibilidad con otras versiones de HBase
https://issues.apache.org/jira/browse/PIG-4728

1. Compilamos la versión de PIG


$ cd /home/bigdata
$ wget http://apache.rediris.es/pig/pig-0.16.0/pig-0.16.0-src.tar.gz

2. Descomprimimos el tar
$ tar -xvf pig-0.16.0-src.tar.gz

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 62
Compilación de PIG 2/7
3. Movemos el resultado a una nueva carpeta
$ mv pig-0.16.0-src /home/bigdata/pig_src

4. Instalar ant
$ sudo apt-get install ant

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 63
Compilación de PIG 3/7

5. Acceder a la carpeta de Pig y compilarlo


$ cd pig_src
$ ant clean -Dhadoopversion=23 -Dhbase95.version=1.0.3 jar

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 64
Compilación de PIG 4/7

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 65
Compilación de PIG 5/7

6. Comprobamos el nuevo jar compilado


$ ls

7. Modificamos el bashrc
$ nano ~/.bashrc

# PIG VARIABLES START


export PIG_HOME=/home/bigdata/pig_src
export PATH=$PATH:/$PIG_HOME/bin
# PIG VARIABLES END

$ source ~/.bashrc

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 66
Compilación de PIG 6/7
8. Cargar los datos
$ pig -x local /home/bigdata/ejemplos/HBase/carga_personas.pig

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 67
Compilación de PIG 7/7
9. Confirmamos la carga
$ hbase shell

> scan 'ejercicios:personas'

> exit

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 68
HBase: API 1/2

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 6969
HBase: API 2/2

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7070
HBase: API Create table 1/6

Familias de columna

Clave Datos Personales Datos Profesionales

ID Empleado Nombre Ciudad Puesto Extensión

1 Juan Madrid Gerente 2253

2 Pedro Burgos Ingeniero Senior 2263

3 Manuel Toledo Ingeniero Junior 1856

$ mkdir -p /home/bigdata/ejemplos/HBase/crearTabla
$ cd /home/bigdata/ejemplos/HBase/crearTabla
$ nano HBaseCrearTabla.java

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7171
HBase: API Create table 2/6

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7272
HBase: API Create table 3/6
import java.io.IOException;
import org.apache.hadoop.hbase.HBaseConfiguration; // Ejecutamos la tabla sobre el objeto
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; admin
import org.apache.hadoop.hbase.client.TableDescriptor; try {
import org.apache.hadoop.hbase.client.TableDescriptorBuilder; TableDescriptor td = builder.build();
import org.apache.hadoop.hbase.client.Admin; admin.createTable(td);
import org.apache.hadoop.hbase.client.Connection; } catch (MasterNotRunningException e) {
import org.apache.hadoop.hbase.client.ConnectionFactory; System.out.println("HBase no está
import org.apache.hadoop.hbase.TableName; ejecutándose!");
import org.apache.hadoop.hbase.MasterNotRunningException; System.exit(1);
import org.apache.hadoop.hbase.util.Bytes; }catch (Exception ce){
import org.apache.hadoop.conf.Configuration; ce.printStackTrace();
System.out.println ("error");
public class HBaseCrearTabla { }

public static void main(String[] args) throws IOException { conn.close();


// Instanciamos la clase de configuración System.out.println(" Tabla creada");
Configuration conf = HBaseConfiguration.create(); }
}
conf.addResource("/home/bigdata/hbase/conf/hbase-site.xml");
Connection conn =ConnectionFactory.createConnection(conf);
Admin admin = conn.getAdmin();

// Instanciamos la clase TableDescriptor


TableDescriptorBuilder builder=
TableDescriptorBuilder.newBuilder(TableName.valueOf("empleados"));
// Añadimos column families a la tabla

builder.addColumnFamily(ColumnFamilyDescriptorBuilder.newBuild
er(Bytes.toBytes("datos personales")).build());

builder.addColumnFamily(ColumnFamilyDescriptorBuilder.newBuild
er(Bytes.toBytes("datos profesionales")).build());

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7373
HBase: API Create table 4/6
$ cd ..
$ mkdir lib
$ cd lib
$ wget http://central.maven.org/maven2/org/apache/hadoop/hadoop-core/1.2.1/hadoop-core-1.2.1.jar

Si no hay internet, ejecutar el siguiente comando


$ cp /home/bigdata/librerias/hadoop-core-1.2.1.jar .

$ cd ..
$ cd crearTabla
$ javac -classpath /home/bigdata/hbase/lib/hbase-client-2.0.0-alpha4.jar:/home/bigdata/hbase/lib/hbase-common-
2.0.0-alpha4.jar:/home/bigdata/hbase/lib/hbase-annotations-2.0.0-alpha4.jar:../lib/hadoop-core-1.2.1.jar
HBaseCrearTabla.java

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7474
HBase: API Create table 5/6
$ ls

$ java -classpath /home/bigdata/hbase/lib/*:/home/bigdata/ejemplos/HBase/lib/hadoop-core-1.2.1.jar:. HBaseCrearTabla

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7575
HBase: API Create table 6/6

$ hbase shell
hbase>list

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7676
HBase: API Put 1/9
Familias de columna

Clave Datos Personales Datos Profesionales

ID Empleado Nombre Ciudad Puesto Extensión

1 Juan Madrid Gerente 2253

2 Pedro Burgos Ingeniero Senior 2263

3 Manuel Toledo Ingeniero Junior 1856

put ’<table name>’,’row1’,’<colfamily:colname>’,’<value>’

hbase> put 'empleados','1','datos personales:nombre','Juan'


hbase> put 'empleados','1','datos personales:ciudad','Madrid'
hbase> put 'empleados','1','datos profesionales:puesto','Gerente'
hbase> put 'empleados','1','datos profesionales:extension','2253'

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7777
HBase: API Put 2/9

hbase> scan 'empleados'


hbase> exit

$ stop-hbase.sh

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 7878
HBase: API Put 3/9

79
Máster en Business Intelligence
MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 79
HBase: API Put 4/9
$ cd /home/bigdata/ejemplos/HBase
$ mkdir insertData
$ cd insertData
$ nano HBaseInsertData.java

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8080
HBase: API Put 5/9

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8181
HBase: API Put 6/9
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Table; p.addColumn(Bytes.toBytes("datos
import org.apache.hadoop.hbase.client.Put; personales"),
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.client.Connection; Bytes.toBytes("ciudad"),Bytes.toBytes("Burgos"
import org.apache.hadoop.hbase.client.ConnectionFactory; ));
import org.apache.hadoop.hbase.TableName;
p.addColumn(Bytes.toBytes("datos
public class HBaseInsertData{ profesionales"),Bytes.toBytes("puesto"),
Bytes.toBytes("Ingeniero Senior"));
public static void main(String[] args) throws IOException {
p.addColumn(Bytes.toBytes("datos
// Instanciamos la clase de Configuracion profesionales"),Bytes.toBytes("extension"),
Configuration conf = HBaseConfiguration.create(); Bytes.toBytes("2263"));
conf.addResource("/home/bigdata/hbase/conf/hbase-
site.xml"); // Guardamos la instancia de put en la tabla
Connection conn hTable.put(p);
=ConnectionFactory.createConnection(conf); System.out.println("Datos insertados");

Table hTable = // Cerramos la HTable


conn.getTable(TableName.valueOf("empleados")); hTable.close();
}
// Instanciamos la clase put que permite introducir }
nuevas filas
Put p = new Put(Bytes.toBytes("emp2"));

// Añadimos valores empleando el método add()


// accepts column family name, qualifier/row name
,value
p.addColumn(Bytes.toBytes("datos personales"),
Bytes.toBytes("nombre"),Bytes.toBytes("Pedro"));

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8282
HBase: API Put 7/9

$ javac -classpath /home/bigdata/hbase/lib/hbase-client-2.0.0-alpha4.jar:/home/bigdata/hbase/lib/hbase-


common-2.0.0-alpha4.jar:/home/bigdata/ejemplos/HBase/lib/hadoop-core-
1.2.1.jar:/home/bigdata/hbase/lib/hbase-annotations-1.2.1.jar HBaseInsertData.java

$ ls

$ jps
$ start-hbase.sh
$ jps

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8383
HBase: API Put 8/9

$ java -classpath /home/bigdata/hbase/lib/*:/home/bigdata/ejemploHBase/lib/hadoop-core-1.2.1.jar:.


HBaseInsertData

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8484
HBase: API Put 9/9

$ hbase shell
hbase>scan "empleados"

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8585
HBase: API Get 1/4
$ cd /home/bigdata/ejemplos/HBase
$ mkdir getData
$ cd getData
$ nano HBaseGetData.java

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8686
HBase: API Get 2/4

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8787
HBase: API Get 3/4

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Get; // Instanciamos la clase Get
import org.apache.hadoop.hbase.client.Result; Get g = new Get(Bytes.toBytes("emp2"));
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.client.Connection; // Leemos los datos
import org.apache.hadoop.hbase.client.ConnectionFactory; Result result = table.get(g);
import org.apache.hadoop.hbase.TableName;
// Leemos los valores del objeto de la clase Result
byte [] value = result.getValue(Bytes.toBytes("datos
public class HBaseGetData{ personales"), Bytes.toBytes("nombre"));
public static void main(String[] args) throws IOException, Exception { byte [] value1 = result.getValue(Bytes.toBytes("datos
personales"), Bytes.toBytes("ciudad"));
// Instanciamos la clase de Configuracion
Configuration conf = HBaseConfiguration.create(); // Imprimimos los valores
conf.addResource("/home/bigdata/hbase/conf/hbase- String name = Bytes.toString(value);
site.xml"); String city = Bytes.toString(value1);
Connection conn
=ConnectionFactory.createConnection(conf); System.out.println("Nombre: " + name + " Ciudad: " +
city);
// Instanciamos la clase Table }
Table table = conn.getTable(TableName.valueOf("empleados")); }

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8888
HBase: API Get 4/4
$ javac -classpath /home/bigdata/hbase/lib/hbase-client-2.0.0-alpha4.jar:/home/bigdata/hbase/lib/hbase-
common-2.0.0-alpha4.jar:/home/bigdata/ejemplos/HBase/lib/hadoop-core-
1.2.1.jar:/home/bigdata/hbase/lib/hbase-annotations-2.0.0-alpha4.jar HBaseGetData.java

$ java -classpath /home/bigdata/hbase/lib/*:/home/bigdata/ejemploHBase/lib/hadoop-core-1.2.1.jar:.


HBaseGetData

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 8989
HBase: API Delete 1/5
$ cd /home/bigdata/ejemplos/HBase
$ mkdir deleteData
$ cd deleteData
$ nano HBaseDeleteData.java

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9090
HBase: API Delete 2/5

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9191
HBase: API Delete 3/5

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Table; // Instanciamos la clase Delete
import org.apache.hadoop.hbase.client.Delete; Delete delete = new Delete(Bytes.toBytes("emp2"));
import org.apache.hadoop.hbase.util.Bytes; delete.addColumn(Bytes.toBytes("datos personales"),
import org.apache.hadoop.hbase.client.Connection; Bytes.toBytes("nombre"));
import org.apache.hadoop.hbase.client.ConnectionFactory; delete.addFamily(Bytes.toBytes("datos profesionales"));
import org.apache.hadoop.hbase.TableName;
// Borramos los datos
public class HBaseDeleteData { table.delete(delete);
public static void main(String[] args) throws IOException { // Cerramos el objeto Table
table.close();
// Instanciamos la clase de Configuracion System.out.println("Datos del empleado2 borrados.....");
Configuration conf = HBaseConfiguration.create(); }
conf.addResource("/home/bigdata/hbase/conf/hbase-site.xml"); }
Connection conn =ConnectionFactory.createConnection(conf);

// Instanciamos la clase Table


Table table = conn.getTable(TableName.valueOf("empleados"));

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9292
HBase: API Delete 4/5

$ javac -classpath /home/bigdata/hbase/lib/hbase-client-2.0.0-alpha4.jar:/home/bigdata/hbase/lib/hbase-


common-2.0.0-alpha4.jar:/home/bigdata/ejemplos/HBase/lib/hadoop-core-
1.2.1.jar:/home/bigdata/hbase/lib/hbase-annotations-2.0.0-alpha4.jar HBaseDeleteData.java

$ java -classpath /home/bigdata/hbase/lib/*:/home/bigdata/ejemploHBase/lib/hadoop-core-1.2.1.jar:. HBaseDeleteData

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9393
HBase: API Delete 5/5

$ echo "get 'empleados', 'emp2'" | hbase shell

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9494
HBase: API Scan 1/4
$ cd /home/bigdata/ejemplos/HBase
$ mkdir scanData
$ cd scanData
$ nano HBaseScanData.java

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9595
HBase: API Scan 2/4

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9696
HBase: API Scan 3/4
// Instanciamos la clase Table
Table table =
import java.io.IOException; conn.getTable(TableName.valueOf("empleados"));
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration; // Instanciamos la clase Scan
import org.apache.hadoop.hbase.util.Bytes; Scan scan = new Scan();
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Result; // Escaneamos las columnas requeridas
import org.apache.hadoop.hbase.client.ResultScanner; scan.addColumn(Bytes.toBytes("datos personales"),
import org.apache.hadoop.hbase.client.Scan; Bytes.toBytes("nombre"));
import org.apache.hadoop.hbase.client.Connection; scan.addColumn(Bytes.toBytes("datos personales"),
import org.apache.hadoop.hbase.client.ConnectionFactory; Bytes.toBytes("ciudad"));
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.Cell; // Obtenemos el resultado del scan
import org.apache.hadoop.hbase.CellUtil; ResultScanner scanner = table.getScanner(scan);

public class HBaseScanData{ // Leemos los valores resultantes del scan


public static void main(String args[]) throws IOException { for (Result result = scanner.next(); result != null; result =
scanner.next()){
// Instanciamos la clase de Configuracion for (Cell cell : result.listCells()) {
Configuration conf = String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
HBaseConfiguration.create(); String value = Bytes.toString(CellUtil.cloneValue(cell));
System.out.printf("Qualifier: %s %nValor: %s %n%n", qualifier,
conf.addResource("/home/bigdata/hbase/con value);
f/hbase-site.xml"); }
Connection conn }
=ConnectionFactory.createConnection(conf); //Cerramos el objeto scan
scanner.close();
}
}

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9797
HBase: API Scan 4/4
$ javac -classpath /home/bigdata/hbase/lib/hbase-client-1.2.1.jar:/home/bigdata/hbase/lib/hbase-
common-1.2.1.jar:/home/bigdata/ejemplos/HBase/lib/hadoop-core-
1.2.1.jar:/home/bigdata/hbase/lib/hbase-annotations-1.2.1.jar HBaseScanData.java

$ java -classpath /home/bigdata/hbase/lib/*:/home/bigdata/ejemploHBase/lib/hadoop-core-1.2.1.jar:. HBaseScanData

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 9898
Ejercicio

Partiendo de los datos de la discografía de álbumes de estudio de Pink Floyd


http://es.wikipedia.org/wiki/Anexo:Discograf%C3%ADa_de_Pink_Floyd

Año Album Ranking Certificación EEUU Ranking Certificación UK


1967 The Piper at the Gates of Dawn 131 6
1968 A Saucerful of Secrets — 9
1969 Music from the Film More 153 9
1969 Ummagumma (Disco 2) 74 5
1970 Atom Heart Mother 55 1
1971 Meddle 70 3
1972 Obscured by Clouds 46 6
1973 The Dark Side of the Moon 1 1
1975 Wish You Were Here 1 1
1977 Animals 3 2
1979 The Wall 1 3
1983 The Final Cut 6 1
1987 A Momentary Lapse of Reason 3 3
1994 The Division Bell 1 1
2014 The Endless River 3 1

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 99
Ejercicio

Resolver las siguientes preguntas:


1. Crear un namespace llamado discografía
2. Crear una tabla llamada discos que contenga sólo las columnas: grupo, nombre_disco, anio, ranking (a su vez
tendrá identificadores para EEUU y UK)
3. Cargar los datos en HBase (se pueden emplear los comandos put o una importación desde PIG). Nota: algunos años
hay más de un disco por lo que la clave será el año y un secuencial, y no se disponen de todos los datos de rankings
por lo que esos datos nulos no será necesario cargarlos
4. Escribir la instrucción y el resultado de consultar el álbum del año 1968
5. Añadir la información de los álbumes de estudio de GreenDay
https://en.wikipedia.org/wiki/Green_Day_discography
6. Ejecuta varias instrucciones (describiéndolas) para analizar datos anteriores

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 100
Libros gratuitos
Documentación oficial
http://hbase.apache.org/book.html
http://hbase.apache.org/apache_hbase_reference_guide.pdf
Ejemplos API JAVA https://linuxjunkies.wordpress.com/2011/12/03/hbase-administration-using-the-java-api-using-
code-examples/

Máster en Business Intelligence


MASTER& Data
EN BIG
Science
DATA(curso
Y BUSINESS
académico
ANALYTICS
2017/18) 101
David Alvaro Mediavilla
dalvarom@gmail.com
102

Você também pode gostar