В этом блоге мы обсудим образец Proof of Concept для HBase.
Здесь у нас есть набор данных, как на изображении ниже.
Этот набор данных состоит из подробностей об общей продолжительности входящих вызовов, исходящих вызовов и сообщений, отправленных с определенного мобильного номера в определенную дату.
Первое поле представляет дату, второе поле представляет номер мобильного телефона, третье поле представляет общую продолжительность входящих вызовов, четвертое поле представляет общую продолжительность исходящих вызовов, а пятое поле представляет общее количество отправленных сообщений.
найти длину массива 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 (ы)
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 г.