Amostra de HBase POC



Esta postagem discute sobre um exemplo de Prova de Conceito para HBase. Você pode encontrar uma explicação clara do conceito para melhor compreender o HBase.

Neste blog, discutiremos sobre um exemplo de Prova de Conceito para HBase.





Aqui temos um conjunto de dados conforme a imagem abaixo.

Sample_Hbase_Use_case



Este conjunto de dados consiste em detalhes sobre a duração do total de chamadas de entrada, chamadas de saída e as mensagens enviadas de um determinado número de celular em uma data específica.

O primeiro campo representa a data, o segundo campo representa o número do celular, o terceiro campo representa a duração total das chamadas de entrada, o quarto campo representa a duração total das chamadas de saída e o quinto campo representa o número total de mensagens enviadas.

Agora, nossa tarefa é recuperar as informações da duração das chamadas recebidas e efetuadas e das mensagens enviadas, de um número de telefone em uma data específica.



Neste caso de uso, estou tentando filtrar os registros de 15ºMarço de 2014. Aqui está um Programa HBase para conseguir isso.

Abaixo está o código completo dele.

público classe amostra{

privado estático Configuração conf

estático HTable mesa

público amostra (String tableName, String colFams) lança IOException {

conf = HBaseConfiguration. crio ()

createTable (tableName, colFams)

mesa = Novo HTable ( conf , Nome da tabela)

}

vazio createTable (String tableName, String colFams) lança IOException {

HBaseAdmin hbase = Novo HBaseAdmin ( conf )

HTableDescriptor desc = Novo HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

público estático vazio addColumnEntry (String tableName, String row,

String colFamilyName, String colName, valores de String)

lança IOException {

byte [] rowKey = Bytes. toBytes (linha)

Putdata = Novo Colocar (rowKey)

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

Bytes. toBytes (valores))

mesa .put (putdata)

}

público estático vazio getAllRecord (String tableName, String startPartialKey,

String endPartialKey) lança IOException {

tentar {

Scan s

E se (startPartialKey == nulo || endPartialKey == nulo )

s = Novo Varredura()

outro

s = Novo Scan (Bytes. toBytes (startPartialKey),

Bytes. toBytes (endPartialKey))

ResultScanner ss = mesa .getScanner (s)

HashMapoutputRec = Novo HashMap()

String imsi = “”

para (Resultado r: ss) {

HashMap keyVal = Novo HashMap ()

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

imsi = Novo String (kv.getRow ()). Substring (10)

keyVal.put ( Novo String (kv.getQualifier ()),

Novo String (kv.getValue ()))

outputRec.put (imsi, keyVal)

E se (keyVal.size () == 3)

Sistema. Fora .println (take + ”” + “Minutos de entrada:”

+ keyVal.get (“c1 ″) +” Próximos minutos: ”

+ keyVal.get (“c2 ″) +” Mensagens: ”

+ keyVal.get (“c3”))

}

}

} finalmente {

}

}

tutoriais de estúdio visual para iniciantes

público estático vazio main (String [] args) lança IOException {

String tableName = “daterecords”

String colFamilyNames = “i”

teste de amostra = Novo amostra (tableName, colFamilyNames)

String fileName = “/ home / cloudera / Desktop / data”

// Isso fará referência a uma linha de cada vez

String line = nulo

tentar {

// FileReader lê arquivos de texto na codificação padrão.

FileReader fileReader = Novo FileReader (fileName)

// Sempre envolva FileReader em BufferedReader.

BufferedReader bufferedReader = Novo BufferedReader (fileReader)

enquanto ((line = bufferedReader.readLine ())! = nulo ) {

String [] values ​​= line.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 ()

} pegar (FileNotFoundException ex) {

Sistema. Fora .println (“Não é possível abrir o arquivo‘ ”+ nome do arquivo +“ ‘”)

} pegar (IOException ex) {

como fazer poder em java

Sistema. Fora .println (“Erro ao ler arquivo '” + nome do arquivo + “'”)

// Ou podemos apenas fazer isso:

// ex.printStackTrace ()

}

getAllRecord (tableName, “20140315”, “20140316”)

}

}

Aqui criamos um objeto de configuração, classe HTable e criando a tabela Hbase com o nome: registros de dados e a família da coluna: Eu .

Neste caso de uso, vamos tomar a combinação de data e número de celular separados por '-' como chave de linha para esta tabela Hbase e as durações de chamadas de entrada e saída ', o número de mensagens enviadas como as colunas' c1 ' c2 ',' c3 'para o grupo de colunas' i '.

Temos os dados de entrada armazenados no sistema de arquivos local do Cloudera. Portanto, precisamos escrever Java Logic que lê os dados do arquivo.

Abaixo está a lógica Java.

Neste método, estamos armazenando os dados na tabela para cada coluna do grupo de colunas.

Podemos verificar os dados armazenados na tabela Hbase ‘daterecords’ usando o comando scan.

Você receberá os dados conforme imagem abaixo.

Agora, inserimos os dados na Tabela HBase com sucesso.

Vamos recuperar os registros armazenados na Tabela de uma determinada data.

Neste caso de uso, estamos tentando recuperar os registros da Data: 15ºMarço 2014

Para recuperar os registros, criamos um Método

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

O primeiro parâmetro representa o nome da tabela, o segundo representa a data de início a partir da qual precisamos recuperar os dados e o terceiro é a próxima data de início.

Por exemplo:

getAllRecord (tableName, “20140315”, “20140316”)

Agora vamos entender o lógica deste método.

Estamos tentando varrer a tabela Hbase usando a API HBase com a ajuda de startPartialKey e endPartialKey.

Como StartPartialKey e endPartialkey não são nulos, ele irá para o bloco else e fará a varredura dos registros com o valor startPartialKey.

Criamos um objeto de scanner de resultado que armazena os registros digitalizados da tabela Hbase e um HashMap para armazenar a saída que será o resultado.

Estamos criando um objeto de Resultado para obter o armazenamento de dados no Scanner de resultado e executando um loop for.

imsi é a string definida para armazenar o número do celular e keyVal é um Hash Map que armazena a saída recuperada da coluna de um determinado telefone.

Nós demos 20140315-1234567890 Enquanto o Rowkey para a tabela Hbase. Neste 20140315 representa a data e 1234567890 representa o número do celular.

Como exigimos apenas o número do celular, estamos usando o método substring para recuperá-lo.

Estamos recuperando os dados de r.raw () e armazenando-os no HashMap usando Put.

Finalmente, estamos tentando imprimi-los no console.

A saída será como na imagem abaixo.

Recuperamos com sucesso os registros da Data: 15ºMarço 2014.