2016-01-12 1 views
2

Нужна помощь по действию Oozie + оболочек + sqoop Текущего состояния -Oozie действия оболочки - бег команды sqoop - необходимость регистрации деталь sqoop

Я использую oozie для запуска многих команд sqoop. Я установил действие оболочки, и в этой оболочке я разместил много команд sqoop. Теперь действие оболочки запускается, и даже выполняется sqoop.

Моя проблема - Однако для sqoop нет правильного ведения журнала. Итак, у меня была команда sqoop, перенаправленная в файл журнала. Там я вижу только следующие строки.

Мой код - внутри оболочки script- детали

* 
sqoop import --connect jdbc:mysql://server:3306/test --verbose --username root --password Password --append --table People --m 1 --hive-drop-import-delims --target-dir /user/username/20/ --delete-target-dir >> /tmp/log 
* 

Log захвачена -

Предупреждение: /opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0 .2/bin /../ lib/sqoop /../ accumulo не существует! Импорт Accumulo не удастся. Пожалуйста, установите $ ACCUMULO_HOME в корень вашей установки Accumulo.

Запрос - , пожалуйста, предложите, как я могу получить журналы sqoop с использованием действия оболочки в Oozie. Мне нужны детали, например, сколько записей загружено/вытащено и обычное ведение журнала, которое происходит, когда мы запускаем команду sqoop на консоли.

Подробности - Пожалуйста, найдите ниже моей jobproperties.xml

*oozie.use.system.libpath=True 
credentials={u'hcat': {'xml_name': u'hcat', 'properties': [('hcat.metastore.uri', u'thrift://node:9083'), ('hcat.metastore.principal', u'hive/[email protected]')]}, u'hive2': {'xml_name': u'hive2', 'properties': [('hive2.jdbc.url', 'jdbc:hive2://node.jnj.com:10000/default'), ('hive2.server.principal', 'hive/[email protected]')]}, u'hbase': {'xml_name': u'hbase', 'properties': []}} 
nameNode=hdfs://nameservice1 
jobTracker=yarnRM 
oozie.sqoop.log.level=DEBUG 
log4jConfig=debug-log.properties 
oozie.libpath=/user/oozie/share/lib* 
+0

'' '' short для '1 >>', что означает «перенаправить поток №1 (STDOUT) в файл», но большинство журналов поступает из потока # 2 (STDERR) ... поэтому вам нужно «1 >> wtf/duh.log 2 >> wtf/duh.log' –

+0

Кстати, если вы не перенаправляете STDERR, он будет отображаться в журналах YARN -cf. http://stackoverflow.com/questions/34344114/oozie-launch-map-reduce-from-oozie-java-action/34359732#34359732 –

+0

Спасибо Samson.i действительно получил std err - однако проблема здесь - i я использую sqoop в оболочке, не отображая его в sqoop-журнале, показывая мне этот журнал - log4j: ERROR Не удалось прочитать файл конфигурации из URL [file:/var/run/cloudera-scm-agent/process/8217-yarn-NODEMANAGER /log4j.properties]. java.io.FileNotFoundException: /var/run/cloudera-scm-agent/process/8217-yarn-NODEMANAGER/log4j.properties (разрешено разрешение), как я могу получить журнал sqoop, сгенерированный с помощью shell log/stderr –

ответ

2

У вас есть параметр, намекая, что Log4J следует использовать конкретный файл свойств, но Sqoop не проинструктирован использовать его (не -Dlog4j.configuration=...file name without path... в командной строке) ,

ОК, предположим, что это сделано специально (?); проблема заключается в том, что

  • Log4J выбирает только для файл свойств ж/по умолчанию имя т.е. log4j.properties
  • поиск производится в каталогах, находящихся в CLASSPATH, останавливаясь на первом матче
  • по умолчанию CLASSPATH для Oozie оболочки является Hadoop баночки, то Hadoop конф Дира, то текущий рабочий реж (место, где все <file> зависимостей сбрасывали вместе с Oozie Jars), и все эти приложения/Oozie JARs
  • первый матч за log4j.properties случается файл, который Log4J не может открыть
  • таким образом Log4J ничего не войти в любом месте (????????)

Возможный способ обхода будет

  1. создать пользовательский log4j.properties - ср. 1-й пример в that post для регистрации любой помеченной INFO и выше (т.INFO, WARN, ERROR, но не DEBUG) в STDOUT
  2. загрузить этот файл в HDFS где-то, то скажите Oozie Action, чтобы загрузить его в контейнер с <file> элементом
  3. сказать Oozie Action просить, чтобы его начала CLASSPATH с текущим рабочим Дира, установив свойство, как oozie.launcher.mapreduce.task.classpath.first к true(фактической собственности может зависеть от версии Hadoop см that post и that JIRA)

Обратите внимание, что шаг 3 необходимо только из-за имени умолчанием присутствовать в другом месте n CLASSPATH; если Sqoop было поручено использовать другой файл с другим именем, тогда не было бы никакой двусмысленности.