Можно ли добиться распределенного чтения из кластера HDSF с использованием клиента HDFS на одной машине?
Я провел эксперимент с кластером, состоящим из 3 узлов данных (DN1, DN2, DN3).Затем я запускаю 10 одновременных операций чтения из 10 независимых файлов из клиентской программы, расположенной на DN1, и она, кажется, считывает данные только с DN1.Другие узлы данных (DN2, DN3) демонстрировали нулевую активность (судя по журналам отладки).
Я проверил, что блоки всех файлов реплицированы на все 3 узла данных, поэтому, если я выключаю DN1, тогда данные считываются с DN2 (только DN2).
Увеличение объема считываемых данныхне помогло (пробовал от 2ГБ до 30ГБ).
Поскольку мне нужно читать несколько больших файлов и извлекать из них только небольшой объем данных (несколько килобайт), я бы хотел избежать использования карты / уменьшения, поскольку для этого требуется настройка дополнительных служб, а также требуетсязапись результатов каждой задачи разделения в 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
Любая помощь приветствуется.Спасибо!