2012-05-30 4 views
1

Имеет ли mapreduce и любые другие технологии hadoop (HBase, Hive, pig и т. Д.) Хорошо подходят для ситуаций, когда у вас есть несколько входных файлов и где данные нужно сравнивать между различными источниками данных ,Использование Hadoop для обработки данных из нескольких источников данных

В прошлом я написал несколько работ по созданию Mapreduce с использованием Hadoop и Pig. Однако эти задачи были довольно простыми, поскольку они включали манипулирование только одним набором данных. Требования, которые мы имеем сейчас, диктуют, что мы читаем данные из нескольких источников и выполняем сравнения по различным элементам данных на другом источнике данных. Затем мы сообщаем о различиях. Наборы данных, с которыми мы работаем, находятся в области 10 миллионов - 60 миллионов записей, и до сих пор нам не удалось сделать эти задания достаточно быстрыми.

Есть ли случай использования mapreduce для решения таких проблем или я иду по неверному маршруту.

Любые предложения очень ценятся.

+0

ли наборы данных предварительно отсортированные и распределяли? Как сравниваются данные (ключ в записях или более сложный)? –

+0

Наборы данных поступают от сторонних поставщиков, поэтому я не могу гарантировать порядок сортировки. В принципе, я должен сопоставлять поля адресов из этих источников с «основным» источником, который мы размещаем, и на основе совпадений мы делаем определенные вещи. Операции сравнения в адресных полях включают довольно сложную логику соответствия строк . – swedstar

ответ

0

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

0

Да, вы можете присоединиться к нескольким наборам данных в задании mapreduce. Я бы порекомендовал получить копию книги/книги Hadoop In Action, которая посвящена объединению данных из нескольких источников.

0

При наличии нескольких входных файлов вы можете использовать MapReduce API FileInputFormat.addInputPaths(), в котором могут принимать разделенный запятыми список из нескольких файлов, как показано ниже:

FileInputFormat.addInputPaths("dir1/file1,dir2/file2,dir3/file3"); 

Вы также можете пройти несколько входов в Mapper в hadoop с использованием Distributed Cache, более подробно описывается здесь: multiple input into a Mapper in hadoop

Если я не ошибаюсь, вы пытаетесь нормализовать структурированные данные в записях, поступающих с нескольких входов, а затем обрабатывать их. Исходя из этого, я думаю, вам действительно нужно посмотреть на эту статью, которая помогла мне в прошлом. Она включала в себя How To Normalize Data Using Hadoop/MapReduce, как показано ниже:

  • Шаг 1: Извлечение пары значений столбцов из исходных данных.
  • Шаг 2: Извлечение столбца пар значений не находится в Master ID файла
  • Шаг 3: Вычислить Максимальный идентификатор для каждого столбца в Master File
  • Шаг 4: Вычислить новый идентификатор для несогласованных значений
  • Шаг 5: Слияние Новый идентификаторы с существующих Мастер идентификаторов
  • Шаг 6: Заменить значения в исходных данных с идентификаторами
0

Использование MultipleInputs мы можем это сделать.

MutlipleInputs.addInputPath(job, Mapper1.class, TextInputFormat.class,path1); 
MutlipleInputs.addInputPath(job, Mapper2.class, TextInputFormat.class,path2); 
job.setReducerClass(Reducer1.class); 
//FileOutputFormat.setOutputPath(); set output path here 

Если оба класса имеют общий ключ, то они могут быть соединены в редукторе и сделать необходимые логик

Смежные вопросы