Распределенное чтение HDFS без Map / Reduce

Можно ли добиться распределенного чтения из кластера HDSF с помощью клиента HDFS на одной машине?

Я провел эксперимент с кластером, состоящим из 3 узлов данных (DN1, DN2, DN3 ). Затем я запустил 10 одновременных чтений из 10 независимых файлов из клиентской программы, расположенной на DN1, и оказалось, что она считывает данные только из DN1. Другие узлы данных (DN2, DN3) показали нулевую активность (судя по журналам отладки).

Я проверил, что все блоки файлов реплицируются на все 3 узла данных, поэтому, если я отключу DN1, данные будут считываться из DN2 (только DN2).

Увеличение объема считываемых данных не помогло (пробовал с 2ГБ до 30ГБ).

Так как мне нужно прочитать несколько больших файлов и извлечь из них только небольшой объем данных (несколько КБ), я бы не хотел использовать map / reduce, так как это требует настройки дополнительных сервисов, а также требует записи вывода. каждой разделенной задачи обратно в HDFS. Скорее было бы неплохо, если бы результат передавался обратно в мою клиентскую программу из узлов данных.

Я использую SequenceFile для чтения / записи данных следующим образом (jdk7):

//Run in thread pool on multiple files simultaneously

List<String> result = new ArrayList<>();
LongWritable key = new LongWritable();
Text value = new Text();
try(SequenceFile.Reader reader = new SequenceFile.Reader(conf,
                                     SequenceFile.Reader.file(filePath)){
  reader.next(key);
  if(key.get() == ID_I_AM_LOOKING_FOR){
    reader.getCurrentValue(value);
    result.add(value.toString());
  }
}

return result; //results from multiple workers are merged later

Любая помощь приветствуется. Спасибо!

6
задан rodion 10 December 2011 в 05:00
поделиться