HBase и интеграционное тестирование - PullRequest
0 голосов
/ 30 мая 2018

У меня есть проект Spark, который использует HBase в качестве хранилища ключей / значений.Мы в целом начали внедрять лучшие практики CI / CD, и я пишу клиент Python для запуска интеграционных тестов в автономной среде AWS.
Хотя я могу легко отправлять наши искровые задания и запускать их как шаги EMR.Я не нашел хорошего способа взаимодействия с HBase из python.Моя цель - иметь возможность запускать наш код на примере данных HDFS и затем проверять в HBase, что я получаю ожидаемые результаты.Кто-нибудь может предложить хороший способ сделать это?

Кроме того, мои тестовые наборы очень маленькие.Я также был бы счастлив, если бы я мог просто прочитать всю таблицу HBase в память и проверить ее таким образом.Буду признателен за вклад сообщества.

1 Ответ

0 голосов
/ 30 мая 2018

Вот простой способ чтения данных HBase из Python с использованием API Happybase и Thrift Server.

Чтобы запустить Thrift-сервер на сервере Hbase:

/YOUR_HBASE_BIN_DIR/hbase-daemon.sh start thrift

Затем из Python:

import happybase

HOST = 'Hbase server host name here'
TABLE_NAME = 'MyTable'
ROW_PREFIX = 'MyPrefix'
COL_TXT = 'CI:BO'.encode('utf-8') # column family CI, column name BO (Text)
COL_LONG = 'CI:BT'.encode('utf-8') # column family CI, column name C (Long)

conn = happybase.Connection(HOST) # uses default port 9095, but provide second arg if non-default port
myTable = conn.table(TABLE_NAME)

for rowID, row in myTable.scan(row_prefix=ROW_PREFIX.encode('utf-8')): # or leave empty if want full table scan
    colValTxt = row[COL_TXT].decode('utf-8')
    colValLong = int.from_bytes(row[COL_LONG], byteorder='big')
    print('Row ID: {}\tColumn Value: {}'.format(rowID, colValTxt))
print('All Done')

Как обсуждалось в комментарии, это не сработает, если вы попытаетесь передать вещи работникам Spark, так как указанное выше соединение HBase не сериализуемо.Таким образом, вы можете запускать этот тип кода только из основной программы.Если придумаете выход - поделитесь!

...