В моей работе мне нужно анализировать множество исторических наборов журналов. Отдельные клиенты (а их тысячи)могут иметь сотни подкаталогов журнала, разбитых по дате. Например,:
Каждый отдельный набор журналов может иметь пять или шесть уровней глубины и содержать тысячи файлов.
Таким образом, я действительно хочу, чтобы отдельные задания карты обрабатывали обход подкаталогов,:простое перечисление отдельных файлов является частью моей задачи распределенных вычислений!
К сожалению, когда я пытаюсь передать каталог, содержащий только подкаталоги журналов, в Hadoop, он жалуется, что я не могу передать эти подкаталоги моему преобразователю. (Опять же, я написал, чтобы принимать подкаталоги в качестве входных данных):
$ hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output.
[... ]
04.12.10 12:48:35 ОШИБКА security.UserGroupInformation:PriviledgedActionException as:cloudera (auth:SIMPLE)причина:java.io. IOException:Не файл:файл:/mnt/logs/Customer_Имя/2011-05-20-003 04.12.10 12:48:35 ОШИБКА streaming.StreamJob:Ошибка запуска задания :Не файл:файл:/mnt/logs/Customer_Имя/2011-05-20-003 Команда потоковой передачи не удалась! [cloudera@localhost ~]$
Есть ли простой способ убедить потоковую передачу Hadoop-разрешить мне назначать каталоги в качестве рабочих элементов?