связь между разделениями и блоками в hadoop mapreduce

#hadoop #mapreduce

#hadoop #mapreduce

Вопрос:

Я пытаюсь понять, как класс InputFormat mapreduce должен работать с разделениями и блоками.

Если я правильно понимаю:

  • файл hdfs разбивается на блоки. Каждый блок гарантированно находится на определенной машине, но 2 блока одного и того же файла могут находиться на 2 разных машинах.
  • разделение примерно определяет файл hdfs и смещение начального байта смещение конечного байта (или это может быть начальный номер строки и номер конечной строки?)
  • каждый картограф получит разделение и экземпляр программы чтения записей с экземпляром определенного разделения. Определение N разделений означает, что создаются N картографов и программ чтения записей, по одному для каждого разделения
  • однако размер разделения не обязательно должен быть кратным размеру блока или наоборот

Это правильно?

Однако, является ли экземпляр RecordReader уполномоченным API для строгой обработки / обработки данных внутри его разделения? или разрешено считывать данные за пределами границ разделения? Может ли он всегда читать какую-либо часть файла, даже если он должен выходить за пределы текущего блока? (таким образом, потенциально следующий файл находится на другом компьютере) По сути, являются ли разделения только «подсказкой» для программы чтения записей?

Потому что, если это не так, и разделения являются строгими, мне кажется невозможным обработать простой файл, в котором каждая запись имеет нефиксированный размер.