2014-09-17 3 views
3

У меня есть пользовательский доступ к серверу hadoop/cluster, содержащему данные, которые хранятся исключительно в секционированных таблицах/файлах в hive (avro). Мне было интересно, могу ли я выполнять mapreduce с помощью python mrjob на этих таблицах? До сих пор я тестировал mrjob локально в текстовых файлах, хранящихся на CDH5, и меня впечатляет простота разработки.Могу ли я использовать библиотеку python mrjob для разделенных таблиц улей?

После некоторых исследований я обнаружил, что есть библиотека под названием HCatalog, но насколько я знаю, она недоступна для python (только Java). К сожалению, у меня не так много времени, чтобы изучить Java, и я хотел бы придерживаться Python.

Знаете ли вы, что любой способ запустить mrjob на хранящихся данных?

Если это невозможно, существует ли способ передать написанный питоном код mapreduce для улья? (Я бы предпочел не загружать файлы python mapreduce в улей)

+0

Mr.Job в настоящее время не работает с Avro файлами. Если вы хотите использовать Mr.Job, вы можете сначала отключить данные. У Майкла Нолла есть хороший блог-блог для Avro Tools: http://www.michael-noll.com/blog/2013/03/17/reading-and-writing-avro-files-from-the-command-line/ –

ответ

0

Как заявил Алекс в настоящее время, Mr.Job не работает с файлами, созданными в avro. Тем не менее, есть способ непосредственно выполнить код python на таблицах hive (нет необходимости в Mr.Job, к сожалению, с потерей гибкости). В конце концов мне удалось добавить файл python в качестве ресурса для улья, выполнив «ADD FILE mapper.py» и выполнив предложение SELECT с помощью TRANSFORM ... USING ...., сохраняя результаты сопоставления в отдельной таблице. Пример Hive запроса:

INSERT OVERWRITE TABLE u_data_new SELECT TRANSFORM (userid, movieid, rating, unixtime) USING 'python weekday_mapper.py' AS (userid, movieid, rating, weekday) FROM u_data;

Полный пример доступен здесь (в нижней части): link