HBase Mapreduce на нескольких объектах проверки - PullRequest
3 голосов
/ 27 января 2011

Я просто пытаюсь оценить HBase для некоторых вещей, которые мы делаем для анализа данных.

HBase будет содержать наши данные о событиях. Ключ будет eventId + время. Мы хотим провести анализ нескольких типов событий (4-5) в диапазоне дат. Общее количество типов событий около 1000.

Проблема с запуском задания mapreduce для таблицы hbase заключается в том, что initTableMapperJob (см. Ниже) занимает только 1 объект сканирования. По соображениям производительности мы хотим сканировать данные только для 4-5 типов событий в заданном диапазоне дат, а не для 1000 типов событий. Если мы используем метод ниже, то, я думаю, у нас нет такого выбора, потому что он занимает только 1 объект сканирования.

public static void initTableMapperJob (Строковая таблица, Сканирование сканирования, Класс маппер, Класс outputKeyClass, Класс outputValueClass, org.apache.hadoop.mapreduce.Job job) выдает IOException

Можно ли запустить mapreduce для списка проверяемых объектов? любой обходной путь?

Спасибо

Ответы [ 3 ]

9 голосов
/ 01 февраля 2011

TableMapReduceUtil.initTableMapperJob настраивает вашу работу на использование TableInputFormat, что, как вы заметили, занимает один Scan.

Звучит так, будто вы хотите отсканировать несколько сегментов таблицы. Для этого вам нужно создать свой собственный InputFormat, что-то вроде MultiSegmentTableInputFormat. Расширьте TableInputFormatBase и переопределите метод getSplits, чтобы он вызывал super.getSplits один раз для каждого сегмента строки начала / остановки таблицы. (Самый простой способ - TableInputFormatBase.scan.setStartRow() каждый раз). Объедините экземпляры InputSplit, возвращенные в один список.

Затем настройте работу самостоятельно, чтобы использовать свой собственный MultiSegmentTableInputFormat.

0 голосов
/ 01 апреля 2013

Я попробовал подход Дейва Л., и он прекрасно работает.

Для настройки задания карты вы можете использовать функцию

  TableMapReduceUtil.initTableMapperJob(byte[] table, Scan scan,
  Class<? extends TableMapper> mapper,
  Class<? extends WritableComparable> outputKeyClass,
  Class<? extends Writable> outputValueClass, Job job,
  boolean addDependencyJars, Class<? extends InputFormat> inputFormatClass)

где inputFormatClass ссылается на MultiSegmentTableInputFormat, упомянутый в комментариях Дэйва Л.

0 голосов
/ 28 января 2011

Вы ищете класс:

org / apache / hadoop / hbase / filter / FilterList.java

Каждое сканирование может принимать фильтр.Фильтр может быть довольно сложным.FilterList позволяет указать несколько отдельных фильтров, а затем выполнить И или ИЛИ между всеми фильтрами компонентов.Вы можете использовать это для создания произвольного логического запроса по строкам.

...