Переопределение баров по умолчанию по умолчанию в классе
Я видел много проявлений способов использования пути пользовательского класса как прецедента к hasoop one. Часто это делается, если задание m/r нуждается в определенной версии библиотеки, которая, по совпадению, уже использует более старую версию (например, парсер jsonson json или commons http и т.д.).
В любом случае: я видел:
mapreduce.task.classpath.user.precedence
mapreduce.task.classpath.first
mapreduce.job.user.classpath.first
Какой из этих параметров является правильным для настройки в моей конфигурации заданий, чтобы заставить mappers и редукторы иметь путь к классу, который ставит мои пользовательские банеры hadoop_classpath
ПЕРЕД баночками зависимостей hasoop по умолчанию?
Кстати, это связано с этим вопросом:
Dynamodb requestHandler acception, который я недавно нашел, вызван конфликтом в банке.
Ответы
Ответ 1
Итак, если вы используете 0.20.203, это обрабатывается в TaskRunner.java следующим образом:
- Имущество, которое вы ищете, находится в строке 94 -
mapreduce.user.classpath.first
- Строка 214 - это то, где выполняется вызов для создания списка путей к классам, который делегирует метод под названием
getClassPaths(..)
-
getClassPaths()
определяется в строке 524, и вы должны уметь видеть, что свойство конфигурации используется для определения того, будут ли ваши библиотеки заданий + dist cache или библиотеки hadoop идти сначала по пути classpath
Для других версий hadoop вам лучше всего проверить класс TaskRunner.java, чтобы подтвердить имя свойства config после того, как все это "полузакрытая конфигурация":
static final String MAPREDUCE_USER_CLASSPATH_FIRST =
"mapreduce.user.classpath.first"; //a semi-hidden config
Ответ 2
Как и в последней версии Hadoop (2.2+), вы должны установить:
conf.setBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, true);
Ответ 3
Эти настройки работают для ссылок на классы внешних банок только в задачах картографа или редуктора. Если, однако, вы используете их, например, с помощью настраиваемого InputFormat, он не сможет загрузить класс. Способ убедиться, что это также работает повсюду (в MR2) экспортирует этот параметр при отправке задания:
export HADOOP_USER_CLASSPATH_FIRST=true
Ответ 4
У меня была такая же проблема, и параметр, который работал у меня на Hadoop Version 0.20.2-cdhu03, - "mapreduce.task.classpath.user.precedence"
Эта настройка не работает на CDH3U3, после ответа от команды Cloudera:
// JobConf job = new JobConf(getConf(), MyJob.class);
// job.setUserClassesTakesPrecedence(true);
http://archive.cloudera.com/cdh/3/hadoop/api/org/apache/hadoop/mapred/JobConf.html#setUserClassesTakesPrecedence%28boolean%29
Ответ 5
В дистрибутиве MapR свойство "mapreduce.task.classpath.user.precedence"
http://www.mapr.com/doc/display/MapR/mapred-site.xml
<property>
<name>mapreduce.task.classpath.user.precedence</name>
<value>true</value>
<description>Set to true if user wants to set different classpath. (AVRO) </description>
</property>
jobConf.setUserClassesTakesPrecedence(истина);