Как читать файлы со смещением от Hadoop, используя Java
Проблема: я хочу прочитать раздел файла из HDFS и вернуть его, например, строки 101-120 из файла из 1000 строк.
Я не хочу использоватьseek
потому что я прочитал, что это дорого.
У меня есть файлы журналов, которые я использую PIG для обработки значимых наборов данных. Я писал API для возврата данных для потребления и отображения внешним интерфейсом. Эти обработанные наборы данных могут быть достаточно большими, поэтому я не хочу читать весь файл из Hadoop за один прием, чтобы сэкономить время и пропускную способность канала. (Скажем, 5 - 10 МБ)
В настоящее время я используюBufferedReader
вернуть небольшие итоговые файлы, которые работают нормально
ArrayList lines = new ArrayList();
...
for (FileStatus item: items) {
// ignoring files like _SUCCESS
if(item.getPath().getName().startsWith("_")) {
continue;
}
in = fs.open(item.getPath());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
line = br.readLine();
while (line != null) {
line = line.replaceAll("(\\r|\\n)", "");
lines.add(line.split("\t"));
line = br.readLine();
}
}
Я немного разбирался в паутинах, а также в стеке, но не нашел именно то, что мне нужно.
Возможно, это совершенно неправильный способ сделать это, и мне нужен совершенно отдельный набор кода и различные функции для управления этим. Открыты для любых предложений.
Спасибо!
Как добавлено, отмечено на основе исследований из нижеприведенных обсуждений: Каким образом Hadoop обрабатывает записи, разделенные по границам блоков? Hadoop FileSplit Reading