MultipleInputs с DBInputFormat в Hadoop

В моей базе данных у меня есть несколько таблиц, каждая из которых представляет собой отдельный тип объекта. У меня есть схема Avro, которую я использую в Hadoop, которая представляет собой объединение всех полей этих разных типов сущностей, а также имеет поле типа сущности.

Что я хотел бы сделать, так это настроить DBInputFormat с DBWritable для каждого типа сущности, который сопоставляет тип сущности с комбинированным типом Avro. Затем дайте каждому DBInputFormat что-то вроде MultipleInputs, чтобы я мог создать составной формат ввода. Затем составной формат ввода можно было бы передать моему заданию по уменьшению карты, чтобы все данные из всех таблиц могли обрабатываться одновременно одним и тем же классом картографа.

Данные постоянно добавляются в эти таблицы базы данных, поэтому мне нужно настроить DBInputFormat для каждого типа объекта/таблицы базы данных, чтобы получать только новые данные и правильно выполнять разделение.

В основном мне нужна функциональность DBInputFormat или DataDrivenDBInputFormat, а также возможность сделать их составными, подобными тому, что вы можете сделать с путями и MultipleInputs.


person user533020    schedule 02.12.2011    source источник


Ответы (1)


Создайте представление из N входных таблиц и задайте представление в файле DBInputFormat#setInput. Согласно статье Cloudera. Итак, я предполагаю, что данные не должны обновляться в таблице на время завершения задания.

Hadoop может потребоваться выполнить один и тот же запрос несколько раз. Он должен будет каждый раз возвращать одни и те же результаты. Таким образом, любые одновременные обновления вашей базы данных и т. д. не должны влиять на запрос, выполняемый вашим заданием MapReduce. Этого можно добиться, запретив запись в таблицу во время выполнения задания MapReduce, ограничив запрос MapReduce с помощью такого предложения, как «вставка_даты ‹ вчера», или сбросив данные во временную таблицу в базе данных перед запуском процесса MapReduce.

Оцените платформы, которые поддерживают обработку в реальном времени, например Storm. , HStreaming, S4 и Strembases. Некоторые из них работают поверх Hadoop, некоторые — нет, некоторые — FOSS, а некоторые — коммерческие.

person Praveen Sripati    schedule 02.12.2011
comment
Боюсь, это может быть единственным ответом, кроме написания моего собственного InputFormat. Проблема с этим подходом заключается в том, что тогда ВСЕ преобразователи будут запрашивать ВСЕ таблицы, что будет намного менее эффективно, чем подмножество преобразователей, запрашивающих одну таблицу, другое подмножество, запрашивающее другую таблицу и т. д. Я должен был бы сделать размер окна, которое захватывает каждый преобразователь, намного меньше, поскольку он захватывает это окно из каждой таблицы. Каждый захват окна будет полным сканированием таблицы, поэтому будет значительно больше полных сканирований таблицы. - person user533020; 05.12.2011
comment
Либо выгружайте таблицы в несколько файлов с помощью утилиты экспорта и используйте Несколько входов. Если вам случится написать свой собственный формат ввода, попробуйте внести его обратно в Apache. - person Praveen Sripati; 05.12.2011