Запросы Hive через клиент Python

У меня есть Hive 0.8, установленный в кластере Hadoop, работающем в AWS EMR.

Я пытаюсь сделать некоторые данные QA, которые включают в себя запуск запроса куста и выборку результатов в python, где содержится еще некоторая логика.

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

В идеале я мог бы сделать это примерно так:

conn = hive.connect(ip, port, user, pw)
cursor = conn.cursor()
cursor.execute(query)
rs = cursor.fetchall()

Кажется, что это якобы возможно. Hive сообщает, что поддерживает его здесь. Существует также еще один вопрос SO. это похоже на то, что я хотел бы сделать.

Однако у меня возникли проблемы с поиском документации. В частности, мне не удалось выяснить, где взять пакеты, используемые в этих примерах. Было бы очень полезно, если бы кто-нибудь мог предоставить подробные инструкции о том, как заставить работать клиент Python, но в противном случае было бы полезно просто знать, где получить эти пакеты.


person Justin    schedule 10.05.2013    source источник


Ответы (2)


Если вы собираете куст из исходного кода, модули будут расположены здесь (относительно каталога hive-trunk):

./сборка/расстояние/библиотека/py

Вы должны иметь доступ к модулям, если вы включите этот путь в переменную среды PYTHONPATH или добавите этот путь к пути python в своем скрипте с помощью модуля sys.

Также обратите внимание, что модуля с именем «улей» больше нет. В приведенном вами примере кода «улей» следует заменить на «hive_service».

person niko246    schedule 31.07.2013

Похоже, в пакете hive_utils есть то, что вам нужно. Глядя на страницу pypi, вы можете запускать запросы следующим образом:

query = """
    SELECT country, count(1) AS cnt
    FROM User
    GROUP BY country
"""
hive_client = hive_utils.HiveClient(
    server=config['HOST'],
    port=config['PORT'],
    db=config['NAME'],
)
for row in hive_client.execute(query):
    print '%s: %s' % (row['country'], row['cnt'])

Установка этого также должна установить необходимые пакеты бережливости.

person Namcor    schedule 05.09.2013