Я работаю над заданием, которое обрабатывает вложенную структуру каталогов, содержащую файлы на нескольких уровнях:
one/
├── three/
│ └── four/
│ ├── baz.txt
│ ├── bleh.txt
│ └── foo.txt
└── two/
├── bar.txt
└── gaa.txt
Когда я добавляю one/
в качестве входного пути, никакие файлы не обрабатываются, поскольку ни один из них сразу не доступен на корневом уровне.
Я читал о job.addInputPathRecursively(..)
, но, кажется, это устарело в более поздних выпусках (я использую hadoop 1.0.2). Я написал некоторый код для обхода папок и добавления каждого каталога с job.addInputPath(dir)
, который работал до тех пор, пока задание не вышло из строя при попытке обработки каталога в качестве входного файла по какой-то причине, например. - попытка fs.open(split.getPath())
, когда split.getPath()
является каталогом (это происходит внутри LineRecordReader.java
).
Я пытаюсь убедить себя, что должен быть более простой способ предоставить задание с вложенной структурой каталогов. Любые идеи?
РЕДАКТИРОВАНИЕ — по-видимому, в этом есть открытая ошибка.
FileSystem#listStatus()
и добавлять их рекурсивно? - person Thomas Jungblut   schedule 18.04.2012one
иone/three
в моем примере). Итак, в основном мне нужно реализовать логику, которая будет рекурсивно добавлять папки, если они только не имеют в них других папок вместо файлов (все еще нужно пройтись по их содержимому, чтобы добавить вложенные файлы). Кажется, много хлопот только для того, чтобы устроиться на работу. - person sa125   schedule 19.04.2012