Halimbawa ng HBase POC



Tumatalakay ang post na ito tungkol sa isang sample na Katibayan ng Konsepto para sa HBase. Maaari kang makahanap ng isang malinaw na paliwanag ng konsepto upang mas mahusay ang iyong pag-unawa sa HBase.

Sa blog na ito tatalakayin namin ang tungkol sa isang sample na Patunay ng Konsepto para sa HBase.





Narito mayroon kaming isang hanay ng Data tulad ng sa imahe sa ibaba.

Sample_Hbase_Use_case



Ang hanay ng data na ito ay binubuo ng mga detalye tungkol sa tagal ng kabuuang mga papasok na tawag, papalabas na tawag at mga mensahe na ipinadala mula sa isang partikular na numero ng mobile sa isang tukoy na petsa.

Ang unang patlang ay kumakatawan sa petsa, ang pangalawang patlang ay kumakatawan sa numero ng mobile, ang pangatlong patlang ay kumakatawan sa kabuuang tagal ng mga papasok na tawag, ang ikaapat na patlang ay kumakatawan sa kabuuang tagal ng mga papalabas na tawag, at ang ikalimang patlang ay kumakatawan sa kabuuang bilang ng mga mensahe na naipadala.

Ngayon ang aming gawain ay upang makuha ang impormasyon ng tagal ng mga papasok at papalabas na tawag at mensahe na ipinadala, mula sa isang numero ng telepono sa isang partikular na petsa.



Sa kasong ito ng paggamit, sinusubukan kong salain ang mga tala ng 15ikaMarso 2014. Narito ang isang HBase Program upang makamit ito.

Nasa ibaba ang kumpletong code nito.

pampubliko klase sampol{

pribado static Pag-configure conf

static HTable mesa

pampubliko sample (String tableName, String colFams) nagtatapon IOException {

conf = HBaseConfiguration. lumikha ()

createTable (tableName, colFams)

mesa = bago HTable ( conf , tableName)

}

walang bisa createTable (String tableName, String colFams) nagtatapon IOException {

HBaseAdmin hbase = bago HBaseAdmin ( conf )

HTableDescriptor desc = bago HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

mensahe ng pop up ng java script

pampubliko static walang bisa addColumnEntry (String tableName, String row,

String colFamilyName, String colName, String na halaga)

nagtatapon IOException {

byte [] rowKey = Bytes. toBytes (hilera)

Ilagay ang putdata = bago Ilagay (rowKey)

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

Mga byte toBytes (mga halaga))

mesa .put (putdata)

}

pampubliko static walang bisa getAllRecord (String tableName, String startPartialKey,

String endPartialKey) nagtatapon IOException {

subukan mo {

Scan s

kung (startPartialKey == wala || endPartialKey == wala )

s = bago Scan()

iba pa

s = bago I-scan (Bytes toBytes (startPartialKey),

Mga byte toBytes (endPartialKey))

ResultScanner ss = mesa .getScanner (s)

HashMapoutputRec = bago HashMap()

String imsi = ''

para sa (Resulta r: ss) {

HashMap keyVal = bago HashMap ()

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

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

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

bago String (kv.getValue ()))

outputRec.put (imsi, keyVal)

kung (keyVal.size () == 3)

Sistema. palabas .println (kunin ang + '' + 'Mga papasok na minuto:'

+ keyVal.get (“c1 ″) +” Paparating na minuto: ”

+ keyVal.get (“c2 ″) +” Mga Mensahe: ”

+ keyVal.get ('c3'))

}

}

} sa wakas {

}

}

pampubliko static walang bisa pangunahing (String [] args) nagtatapon IOException {

String tableName = 'daterecords'

String colFamilyNames = 'i'

sample na pagsubok = bago sample (tableName, colFamilyNames)

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

// Ito ay tumutukoy sa isang linya nang paisa-isa

String line = wala

subukan mo {

// Ang FileReader ay nagbabasa ng mga file ng teksto sa default na pag-encode.

FileReader fileReader = bago FileReader (fileName)

// Palaging balutin ang FileReader sa BufferedReader.

BufferedReader bufferedReader = bago BufferedReader (fileReader)

habang ((linya = bufferedReader.readLine ())! = wala ) {

String [] halaga = line.split ('')

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

colFamilyNames, 'c1', mga halagang [2])

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

colFamilyNames, 'c2', mga halagang [3])

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

colFamilyNames, 'c3', mga halagang [4])

}

kung paano baligtarin ang isang numero sa sawa

bufferedReader.close ()

} mahuli (FileNotFoundException hal) {

Sistema. palabas .println ('Hindi mabuksan ang file na '' + fileName + ''')

} mahuli (Hal. IOException) {

Sistema. palabas .println ('Error sa pagbabasa ng file na '' + fileName + ''')

// O magagawa lamang natin ito:

// ex.printStackTrace ()

}

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

}

}

Nilikha namin ang isang bagay ng Configuration, klase ng HTable at paglikha ng Hbase Table na may pangalan: mga daterecord at ang pamilya ng haligi: ako .

Sa ganitong kaso, gagamitin namin ang kumbinasyon ng petsa at numero ng mobile na pinaghihiwalay ng '-' bilang key key para sa Hbase table na ito at ang papasok, papalabas na mga tagal ng tawag ', ang bilang ng mga mensahe na ipinadala bilang mga haligi na' c1 ',' c2 ',' c3 'para sa pamilya ng haligi' i '.

Mayroon kaming data ng pag-input na nakaimbak sa lokal na file system ng Cloudera. Kaya kailangan naming isulat ang Java Logic na nagbabasa ng data mula sa file.

Nasa ibaba ang lohika ng Java.

Sa pamamaraang ito, itinatago namin ang data sa talahanayan para sa bawat haligi ng pamilya ng haligi.

Maaari naming suriin ang data na nakaimbak sa talahanayan ng Hbase na 'daterecords' sa pamamagitan ng paggamit ng scan na utos.

Matatanggap mo ang data tulad ng nasa larawan sa ibaba.

Ngayon ay naipasok namin ang data sa matagumpay na Talahanayan ng HBase.

Kunin natin ang mga talaang nakaimbak sa Talaan ng isang Partikular na petsa.

Sa kasong ito ng paggamit, sinusubukan naming makuha ang mga tala ng Petsa: 15ikaMarso 2014

pag-uri-uriin ang isang listahan c ++

Upang makuha ang mga talaang nilikha namin ang isang Paraan

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Ang Unang Parameter ay kumakatawan sa pangalan ng talahanayan, ang pangalawa ay kumakatawan sa petsa ng pagsisimula kung saan kailangan naming makuha ang data at ang pangatlo ay ang susunod na petsa ng petsa ng pagsisimula.

Hal:

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

Ngayon ay intindihin natin ang lohika ng pamamaraang ito

Sinusubukan naming i-scan ang Hbase Table sa pamamagitan ng Paggamit ng HBase API sa tulong ng startPartialKey at endPartialKey.

Tulad ng StartPartialKey at endPartialkey ay hindi null, pupunta ito sa iba pang pag-block at i-scan ang mga tala na mayroong halaga ng startPartialKey.

Lumikha kami ng isang object ng Resulta scanner na nag-iimbak ng mga na-scan na tala ng talahanayan ng Hbase at isang HashMap upang maiimbak ang output na magreresulta.

Lumilikha kami ng isang object ng Resulta upang makuha ang data store sa Resulta Scanner at magpatupad ng isang para sa loop.

Ang imsi ay ang string na tinukoy upang maiimbak ang numero ng Mobile at ang keyVal ay isang Hash Map na nag-iimbak ng output na nakuha mula sa haligi ng isang partikular na telepono.

Kami ay nagbigay 20140315-1234567890 bilang ang rowkey sa Hbase table. Sa 20140315 ito ay kumakatawan sa petsa at ang 1234567890 ay kumakatawan sa numero ng Mobile.

Tulad ng nangangailangan lamang kami ng numero ng mobile ginagamit namin ang pamamaraan ng substring upang makuha ito.

Kinukuha namin ang data mula sa r.raw () at itinatago ito sa HashMap sa pamamagitan ng paggamit ng Put.

Sa wakas sinusubukan naming i-print ang mga ito sa console.

Ang Output ay magiging tulad ng sa imahe sa ibaba.

Matagumpay naming nakuha ang mga tala ng Petsa: 15ikaMarso 2014