Sample HBase POCO



Esta publicación trata sobre una prueba de concepto de muestra para HBase. Puede encontrar una explicación clara del concepto para comprender mejor HBase.

En este blog discutiremos acerca de una prueba de concepto de muestra para HBase.





Aquí tenemos un conjunto de datos como en la imagen de abajo.

Sample_Hbase_Use_case



Este conjunto de datos consta de los detalles sobre la duración del total de llamadas entrantes, llamadas salientes y los mensajes enviados desde un número de móvil en particular en una fecha específica.

El primer campo representa la fecha, el segundo campo representa el número de teléfono móvil, el tercer campo representa la duración total de las llamadas entrantes, el cuarto campo representa la duración total de las llamadas salientes y el quinto campo representa la cantidad total de mensajes enviados.

Ahora nuestra tarea es recuperar la información de la duración de las llamadas entrantes y salientes y los mensajes enviados, desde un número de teléfono en una fecha determinada.



En este caso de uso, estoy tratando de filtrar los registros de 15thMarzo de 2014. Aquí hay un programa HBase para lograrlo.

A continuación se muestra el código completo de la misma.

público clase muestra{

privado estático Configuración conf

estático HTable mesa

público muestra (String tableName, String colFams) lanza IOException {

conf = HBaseConfiguration. crear ()

createTable (nombreTabla, colFams)

mesa = nuevo HTable ( conf , nombre de la tabla)

}

vacío createTable (String tableName, String colFams) lanza IOException {

HBaseAdmin hbase = nuevo HBaseAdmin ( conf )

HTableDescriptor desc = nuevo HTableDescriptor (nombreTabla)

HColumnDescriptor meta = nuevo HColumnDescriptor (colFams.getBytes ())

desc.addFamily (meta)

hbase.createTable (desc)

}

público estático vacío addColumnEntry (String tableName, String fila,

String colFamilyName, String colName, String valores)

lanza IOException {

byte [] rowKey = Bytes. toBytes (fila)

Poner putdata = nuevo Poner (rowKey)

putdata.add (Bytes. toBytes (colFamilyName), Bytes. toBytes (colName),

Bytes. toBytes (valores))

mesa .put (putdata)

}

público estático vacío getAllRecord (String tableName, String startPartialKey,

String endPartialKey) lanza IOException {

tratar {

Escanear s

Si (startPartialKey == nulo || endPartialKey == nulo )

s = nuevo Escanear()

más

implementar una lista enlazada en c

s = nuevo Escanear (Bytes. toBytes (startPartialKey),

Bytes. toBytes (endPartialKey))

ResultScanner ss = mesa .getScanner (s)

HashMapoutputRec = nuevo HashMap()

Cadena imsi = ''

para (Resultado r: ss) {

HashMap keyVal = nuevo HashMap ()

para (KeyValue kv: r.raw ()) {

imsi = nuevo Cadena (kv.getRow ()). Subcadena (10)

keyVal.put ( nuevo Cadena (kv.getQualifier ()),

nuevo Cadena (kv.getValue ()))

outputRec.put (imsi, keyVal)

Si (keyVal.size () == 3)

Sistema. fuera .println (tomar + ”” + “Minutos entrantes:”

+ keyVal.get ('c1 ″) +' Minutos de salida: '

+ keyVal.get ('c2 ″) +' Mensajes: '

+ keyVal.get ('c3'))

}

}

} finalmente {

}

}

público estático vacío main (String [] args) lanza IOException {

String tableName = 'daterecords'

String colFamilyNames = 'i'

prueba de muestra = nuevo muestra (tableName, colFamilyNames)

String fileName = '/ home / cloudera / Desktop / data'

// Esto hará referencia a una línea a la vez

Línea de cuerda = nulo

tratar {

// FileReader lee archivos de texto con la codificación predeterminada.

FileReader fileReader = nuevo FileReader (nombre de archivo)

// Siempre envuelve FileReader en BufferedReader.

BufferedReader bufferedReader = nuevo BufferedReader (fileReader)

mientras ((línea = búferReader.readLine ())! = nulo ) {

Cadena [] valores = línea.split (”“)

addColumnEntry (tableName, valores [0] + “-” + valores [1],

colFamilyNames, 'c1', valores [2])

addColumnEntry (tableName, valores [0] + “-” + valores [1],

colFamilyNames, 'c2', valores [3])

addColumnEntry (tableName, valores [0] + “-” + valores [1],

colFamilyNames, 'c3', valores [4])

}

bufferedReader.close ()

} captura (FileNotFoundException ex) {

Sistema. fuera .println ('No se puede abrir el archivo‘ '+ fileName +' ‘')

} captura (IOException ex) {

Sistema. fuera .println ('Error al leer el archivo‘ '+ fileName +' ‘')

// O simplemente podríamos hacer esto:

// ex.printStackTrace ()

}

getAllRecord (tableName, '20140315', '20140316')

}

}

Aquí hemos creado un objeto de Configuración, clase HTable y creando la Tabla Hbase con nombre: registros de fecha y la familia de columnas: yo .

En este caso de uso, tomaremos la combinación de fecha y número de teléfono móvil separados por '-' como clave de fila para esta tabla Hbase y las duraciones de llamadas entrantes y salientes ', la cantidad de mensajes enviados como las columnas' c1 ',' c2 ',' c3 'para la familia de columnas' i '.

Tenemos los datos de entrada almacenados en el sistema de archivos local de Cloudera. Entonces, necesitamos escribir Java Logic que lea los datos del archivo.

A continuación se muestra la lógica de Java.

En este método, almacenamos los datos en la tabla para cada columna de la familia de columnas.

Podemos verificar los datos almacenados en la tabla Hbase 'daterecords' usando el comando de escaneo.

Recibirá los datos como en la imagen de abajo.

Ahora hemos insertado los datos en la tabla HBase con éxito.

Recuperemos los registros almacenados en la Tabla de una fecha en particular.

En este caso de uso, estamos intentando recuperar los registros de la fecha: 15thMarzo del 2014

Para recuperar los registros hemos creado un Método

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

El primer parámetro representa el nombre de la tabla, el segundo representa la fecha de inicio a partir de la cual necesitamos recuperar los datos y el tercero es la siguiente fecha de inicio.

P.ej:

getAllRecord (tableName, '20140315', '20140316')

Ahora entendamos el lógica de este método.

Estamos tratando de escanear la tabla Hbase usando la API de HBase con la ayuda de startPartialKey y endPartialKey.

Como StartPartialKey y endPartialkey no son nulos, irá al bloque else y escaneará los registros que tengan el valor de startPartialKey.

Hemos creado un objeto de escáner de resultados que almacena los registros escaneados de la tabla Hbase y un HashMap para almacenar la salida que será el resultado.

Estamos creando un objeto de Resultado para obtener el almacén de datos en el Escáner de Resultados y ejecutando un bucle for.

imsi es la cadena que se define para almacenar el número de móvil y keyVal es un mapa hash que almacena la salida recuperada de la columna de un teléfono en particular.

Hemos dado 20140315-1234567890 como el rowkey a la tabla Hbase. En este 20140315 representa la fecha y 1234567890 representa el número de móvil.

Como solo requerimos el número de teléfono móvil, estamos usando el método de subcadena para recuperarlo.

Estamos recuperando los datos de r.raw () y almacenándolos en el HashMap usando Put.

Finalmente estamos intentando imprimirlos en la consola.

La salida será como en la imagen de abajo.

Hemos recuperado con éxito los registros de la Fecha: 15thMarzo del 2014.

tutorial de mysql workbench para principiantes