Для того, чтобы получить путь входного файла вы можете использовать context
объект, например:
FileSplit fileSplit = (FileSplit) context.getInputSplit();
String inputFilePath = fileSplit.getPath().toString();
И, как за то, как он несколько файлов обрабатываются:
Несколько экземпляров картографа функции создаются на разных машинах в кластере. Каждый экземпляр получает другой входной файл. Если файлы больше, чем размер блока dfs по умолчанию (128 МБ), тогда файлы далее разделяются на более мелкие части и затем распределяются между собой.
Таким образом, вы можете настроить размер входа, принимаемый каждым картографом следующих 2 способов:
- изменить размер блока HDFS (например
dfs.block.size=1048576
)
- установить paramaeter
mapred.min.split.size
(это может быть установлено только больше, чем размер блока HDFS)
Примечание: Эти параметры будут действовать только если ваш входной формат поддерживает разделив входные файлы. Общие кодеки сжатия (такие как gzip) не поддерживают разделение файлов, поэтому они будут игнорироваться.
Также следует упомянуть, что когда мы имеем дело с файлами gz, никакая конфигурация не будет работать, и каждый файл перейдет к одному картографу и не будет разделен. –
Спасибо, Шилл, обновил ответ. – Amar
@Amar: Спасибо за подробное объяснение. Тем не менее, я использую настраиваемый формат, и я сделал свой «isSplitable()» false для чтения целого файла в один файл. Итак, чтобы получить имя файла, я попытался использовать объект FileStatus. – RadAl