2015-04-24 4 views
0

Насколько я понял при использовании таблицы hbase в качестве источника задания mapreduce, мы определяем значение для сканирования. По словам LEt, мы устанавливаем его на 500, означает ли это, что каждому картографу дается только 500 строк из таблицы hbase? Есть ли какие-либо проблемы, если мы установим его в очень высокое значение?Использование таблицы HBase в качестве источника MapReduce

Если размер сканирования невелик, не имеем ли мы такую ​​же проблему, как наличие небольших файлов в mapreduce?

+0

Ваш вопрос непонятен. Можете ли вы опубликовать свой код, где вы настраиваете объект сканирования для задания, и уточните свой вопрос, пожалуйста? –

+0

У меня пока нет кода, это больше похоже на вопрос дизайна –

ответ

1

Вот пример кода из HBase Book о том, как выполнять чтение задания MapReduce из таблицы HBase.

Configuration config = HBaseConfiguration.create(); 
Job job = new Job(config, "ExampleRead"); 
job.setJarByClass(MyReadJob.class);  // class that contains mapper 

Scan scan = new Scan(); 
scan.setCaching(500);  // 1 is the default in Scan, which will be bad for MapReduce jobs 
scan.setCacheBlocks(false); // don't set to true for MR jobs 
// set other scan attrs 
... 

TableMapReduceUtil.initTableMapperJob(
    tableName,  // input HBase table name 
    scan,    // Scan instance to control CF and attribute selection 
    MyMapper.class, // mapper 
    null,    // mapper output key 
    null,    // mapper output value 
    job); 
job.setOutputFormatClass(NullOutputFormat.class); // because we aren't emitting anything from mapper 

boolean b = job.waitForCompletion(true); 
if (!b) { 
    throw new IOException("error with job!"); 
} 

Когда вы говорите «значение для сканирования», это не настоящая вещь. Вы либо имеете в виду scan.setCaching(), либо scan.setBatch() или scan.setMaxResultSize().

  1. setCaching используется, чтобы сообщить серверу, сколько строк для загрузки до возвращения результата клиенту
  2. setBatch используется, чтобы ограничить количество столбцов, возвращаемых в каждом вызове, если у вас есть очень широкий стол
  3. setMaxResultSize используются для ограничения количества возвращаемых результатов клиента

Обычно с вами не устанавливайте MaxResultSize в работе MapReduce. Таким образом, вы увидите все данные.

Ссылка на приведенную выше информацию: here.

0

Код картографа, который вы пишете, присваивается данным по строкам. Тем не менее, время выполнения mapper считывает записи с помощью кеширования (т. Е. 500 строк за раз в вашем случае).

Если размер сканирования слишком мал, выполнение становится очень неэффективным (много вызовов io)

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