Подключение HIVE в MRJob

Сценарий: мне нужно обработать файл (ввод), и для каждой записи мне нужно проверить, соответствуют ли определенные поля во входном файле полям, хранящимся в кластере Hadoop.

Мы планируем использовать MRJob для обработки входного файла и использовать HIVE для получения данных из кластера hadoop. Я хотел бы знать, могу ли я подключить HIVE внутри модуля MRJob. Если да, то как это сделать?

Если нет, что было бы идеальным подходом для выполнения моего требования.

Я новичок в Hadoop, MRJob и Hive.

Пожалуйста, дайте какое-нибудь предложение.


person user1703319    schedule 28.11.2016    source источник


Ответы (1)


«соответствие полям, хранящимся в кластере Hadoop». --> Вы имеете в виду, что вам нужно искать, существуют ли поля и в этом файле?

О том, сколько всего файлов вам нужно отсканировать?

Одним из решений является загрузка каждого отдельного элемента в таблицу HBase и для каждой записи во входном файле «ПОЛУЧЕНИЕ» записи из таблицы. Если GET выполнен успешно, запись существует где-то еще в HDFS, в противном случае ее нет. Вам потребуется уникальный идентификатор для каждой записи HBase, и такой же идентификатор должен существовать и во входном файле.

Вы также можете подключиться к Hive, но схема должна быть жесткой, чтобы все ваши файлы HDFS можно было загрузить в одну таблицу Hive. HBase на самом деле не заботится о столбцах (нужны только семейства столбцов). Еще одним недостатком MapReduce и Hive является низкая скорость по сравнению с HBase (почти в реальном времени).

Надеюсь это поможет.

person kashmoney    schedule 29.11.2016
comment
да. Например, мой входной файл выглядит примерно так. Входной файл: Name,add1,add2,postcode, Mark,31 Maybush,XXX,WF1 5XY inputfile совпадает с данными в кластере для того же имени. - person user1703319; 29.11.2016
comment
Будут ли все файлы иметь одинаковую схему? Если да, то вы можете создать таблицу Hive и загрузить все сотни/тысячи файлов, которые у вас есть, в новую таблицу Hive. Затем вы можете подключиться для выполнения запроса Hive из MapReduce. Ваш запрос Hive будет примерно таким: SELECT * FROM huge_hive_table WHERE add1 = '31 Maybush' AND name = 'Mark'; Конечно, вам нужно будет динамически изменять 31 Maybush и Mark по мере чтения каждой строки входного файла. - person kashmoney; 30.11.2016
comment
Проблема с описанным выше подходом заключается в том, что для каждого запроса в Hive существует задание MR, поэтому задание MR будет выполняться для каждой строки входного файла, поскольку мы сравниваем каждую строку. Если у вас 2000 строк, то 2000 заданий MR для сравнения. - person kashmoney; 30.11.2016
comment
Лучше всего использовать подход HBase. Это будет почти в реальном времени для таких вещей. - person kashmoney; 30.11.2016