Образец HBase POC

В этом посте обсуждается образец Proof of Concept для HBase. Вы можете найти четкое объяснение концепции, чтобы лучше понять HBase.

В этом блоге мы обсудим образец Proof of Concept для HBase.





Здесь у нас есть набор данных, как на изображении ниже.

Sample_Hbase_Use_case



Этот набор данных состоит из подробностей об общей продолжительности входящих вызовов, исходящих вызовов и сообщений, отправленных с определенного мобильного номера в определенную дату.

Первое поле представляет дату, второе поле представляет номер мобильного телефона, третье поле представляет общую продолжительность входящих вызовов, четвертое поле представляет общую продолжительность исходящих вызовов, а пятое поле представляет общее количество отправленных сообщений.

найти длину массива javascript

Теперь наша задача - получить информацию о продолжительности входящих и исходящих звонков и отправленных сообщений с номера телефона в конкретную дату.



В этом случае я пытаюсь отфильтровать записи 15thМарт 2014 г. Вот программа HBase для достижения этой цели.

Ниже приведен его полный код.

общественный класс образец{

частный статический Конфигурация conf

статический HTable Таблица

общественный образец (String tableName, String colFams) бросает IOException {

conf = HBaseConfiguration. Создайте ()

createTable (имя таблицы, colFams)

Таблица знак равно новый HTable ( conf , tableName)

}

пустота createTable (String tableName, String colFams) бросает IOException {

HBaseAdmin hbase = новый HBaseAdmin ( conf )

HTableDescriptor desc = новый HTableDescriptor (имя таблицы)

HColumnDescriptor meta = новый HColumnDescriptor (colFams.getBytes ())

desc.addFamily (мета)

hbase.createTable (по убыванию)

}

общественный статический пустота addColumnEntry (String tableName, String row,

String colFamilyName, String colName, String значения)

бросает IOException {

байт [] rowKey = Байт. toBytes (ряд)

Положите putdata = новый Положите (rowKey)

putdata.add (байты. toBytes (colFamilyName), байты. toBytes (colName),

Байтов. toBytes (ценности))

Таблица .put (путдата)

}

общественный статический пустота getAllRecord (String tableName, String startPartialKey,

Строка endPartialKey) бросает IOException {

пытаться {

Сканирование s

если (startPartialKey == значение NULL || endPartialKey == значение NULL )

s = новый Сканировать ()

еще

s = новый Сканировать (байты. toBytes (startPartialKey),

Байтов. toBytes (endPartialKey))

ResultScanner ss = Таблица .getScanner (ы)

HashMapoutputRec = новый HashMap()

Строка imsi = «»

для (Результат r: ss) {

HashMap keyVal = новый HashMap ()

для (KeyValue kv: r.raw ()) {

imsi = новый Строка (kv.getRow ()). Substring (10)

keyVal.put ( новый Строка (kv.getQualifier ()),

новый Строка (kv.getValue ()))

outputRec.put (imsi, keyVal)

если (keyVal.size () == 3)

Система. вне .println (take + '' + 'Входящие минуты:'

+ keyVal.get («c1 ″) +» Исходящие минуты: »

+ keyVal.get («c2 ″) +» Сообщения: »

+ keyVal.get («c3»))

}

}

} Ну наконец то {

}

}

общественный статический пустота main (String [] args) бросает IOException {

Строка tableName = «daterecords»

Строка colFamilyNames = «i»

образец теста = новый образец (tableName, colFamilyNames)

Строка fileName = «/ home / cloudera / Desktop / data»

// Это будет ссылаться на одну строку за раз

Строка line = значение NULL

пытаться {

// FileReader читает текстовые файлы в кодировке по умолчанию.

FileReader fileReader = новый FileReader (имя_файла)

// Всегда переносить FileReader в BufferedReader.

BufferedReader bufferedReader = новый BufferedReader (читатель файлов)

в то время как ((строка = bufferedReader.readLine ())! = значение NULL ) {

String [] values ​​= line.split ('')

addColumnEntry (tableName, values ​​[0] + «-» + values ​​[1],

colFamilyNames, «c1», значения [2])

addColumnEntry (tableName, values ​​[0] + «-» + values ​​[1],

colFamilyNames, «c2», значения [3])

как использовать итератор

addColumnEntry (tableName, values ​​[0] + «-» + values ​​[1],

colFamilyNames, «c3», значения [4])

}

bufferedReader.close ()

} ловить (FileNotFoundException ex) {

Система. вне .println («Невозможно открыть файл‘ »+ fileName +« ‘»)

} ловить (IOException ex) {

Система. вне .println («Ошибка чтения файла‘ »+ fileName +« ‘»)

// Или мы могли бы просто сделать это:

// например printStackTrace ()

}

getAllRecord (tableName, «20140315», «20140316»)

}

}

Здесь мы создали объект Configuration, класс HTable и создали таблицу Hbase с именем: дата записи и семейство столбцов: я .

В этом случае мы будем использовать комбинацию даты и номера мобильного телефона, разделенных знаком «-», в качестве ключа строки для этой таблицы Hbase, а также длительность входящих и исходящих вызовов, количество отправленных сообщений в столбцах «c1», c2 ',' c3 'для семейства столбцов' i '.

У нас есть входные данные, хранящиеся в локальной файловой системе Cloudera. Итак, нам нужно написать Java Logic, который считывает данные из файла.

Ниже представлена ​​логика Java.

В этом методе мы сохраняем данные в таблице для каждого столбца семейства столбцов.

Мы можем проверить данные, хранящиеся в таблице Hbase «daterecords», используя команду сканирования.

Вы получите данные, как на изображении ниже.

как изменить double на int в Java

Теперь мы успешно вставили данные в таблицу HBase.

Получим записи, хранящиеся в Таблице на конкретную дату.

В этом случае мы пытаемся получить записи Date: 15thМарт 2014 г.

Для получения записей мы создали метод

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Первый параметр представляет имя таблицы, второй - дату начала, с которой нам нужно получить данные, а третий - следующую дату начала.

Например:

getAllRecord (tableName, «20140315», «20140316»)

Теперь давайте разберемся логика этого метода.

Мы пытаемся сканировать таблицу Hbase с помощью API HBase с помощью startPartialKey и endPartialKey.

Поскольку StartPartialKey и endPartialkey не равны нулю, он перейдет в блок else и просканирует записи, имеющие значение startPartialKey.

Мы создали объект сканера результатов, который хранит отсканированные записи таблицы Hbase и HashMap для хранения выходных данных, которые будут результатом.

Мы создаем объект Result для получения хранилища данных в Result Scanner и выполняем цикл for.

imsi - это строка, которая определена для хранения мобильного номера, а keyVal - это хеш-карта, в которой хранятся выходные данные, полученные из столбца определенного телефона.

Мы дали 20140315-1234567890 как rowkey в таблицу Hbase. Здесь 20140315 представляет дату, а 1234567890 представляет номер мобильного телефона.

Поскольку нам нужен только номер мобильного телефона, мы используем метод подстроки для его получения.

Мы получаем данные из r.raw () и сохраняем их в HashMap с помощью Put.

Наконец, мы пытаемся распечатать их на консоли.

Результат будет таким, как на изображении ниже.

Мы успешно получили записи Даты: 15thМарт 2014 г.