Hadoop HDFS: чтение / запись параллелизма? - PullRequest
0 голосов
/ 15 ноября 2018

Не удалось найти достаточно информации в интернете, поэтому спрашивайте здесь:

Предполагается, что я записываю на диск огромный файл, сотни терабайт, что является результатом редукции карты (или искры или чего-то еще).Как бы mapreduce эффективно записал такой файл в HDFS (возможно, параллельный?), Который также мог бы быть прочитан позже и параллельно?

Насколько я понимаю, HDFS просто основана на блоках (например, 128 МБ).таким образом, чтобы написать второй блок, вы должны написать первый блок (или, по крайней мере, определить, какой контент пойдет в блок 1).Скажем, это файл CSV, вполне возможно, что строка в файле будет занимать два блока - как мы можем прочитать такой CSV для разных картографов в mapreduce?Нужно ли делать какую-то умную логику, чтобы прочитать два блока, объединить их и прочитать правильную строку?

1 Ответ

0 голосов
/ 15 ноября 2018

Hadoop использует RecordReaders и InputFormats в качестве двух интерфейсов, которые читают и понимают байты внутри блоков.

По умолчанию в Hadoop MapReduce каждая запись заканчивается новой строкой с TextInputFormat, а для сценария, где всего одна строкапересекает конец блока, следующий блок должен быть прочитан, даже если он буквально состоит из \r\n символов

Запись данных выполняется из задач сокращения или исполнителей Spark и т. д., так как каждая задача ответственнадля записи только подмножество всего вывода.Как правило, вы никогда не получите один файл для небольших работ, и это не проблема, поскольку входные аргументы большинства обработчиков Hadoop предназначены для сканирования каталогов, а не для указания на отдельные файлы

...