Я действительно новичок в Hadoop и не могу найти ответ на свой вопрос.Я хочу написать работу по сокращению карты, где я читаю из HBase и затем пишу в простом текстовом файле.
В HBase у меня есть столбец, представляющий идентификатор.Теперь я не хочу работать с всеми , содержащими строки в моей таблице HBase, но только с теми между maxId и minId.
Я обнаружил, что мог бы использовать пользовательские фильтры (scan.setFilter)
, чтобы я мог фильтровать строки, которые не соответствуют моему запросу.
Это моя первая работа по сокращению карты, поэтому наберитесь терпения-)
У меня есть начальный класс, где я настраиваю работу и объект сканирования, а затем запускаю работу.
Теперь моя первая попытка выглядит следующим образом:
private Scan getScan()
{
final Scan scan = new Scan();
// ** FILTER **
List<Filter> filters = new ArrayList<Filter>();
Filter filter1 = new ValueFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes(Integer.parseInt(minId))));
filters.add(filter1);
Filter filter2 = new ValueFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(Integer.parseInt(maxId))));
filters.add(filter2);
FilterList filterList = new FilterList(filters);
scan.setFilter(filterList);
scan.setCaching(500);
scan.setCacheBlocks(false);
// id
scan.addColumn("columnfamily".getBytes(), "id".getBytes());
return scan;
}
Ну, я не уверен, что это правильный способ сделать это.Я также прочитал, что могу передать свои minId и maxId, возможно, с Объектом конфигурации, в задание на карту, но я не уверен, как.
Кроме того, что мне делать потом?Обычно я просто запускаю задание с помощью initTableMapperJob
и передаю ему объект сканирования.Я прочитал что-то из ResultScanner и так, они мне нужны?Я думал, что MapReduce Framework теперь будет автоматически передавать правильные строки моему заданию карты, это правильно?