2016-01-12 56 views
2

需要登录细节需要在Oozie的外壳+动作+ sqoop 现状有所帮助 -Oozie的外壳行动 - 运行sqoop命令 - 的sqoop

我使用Oozie的运行许多sqoop命令。 我已经设置了一个shell动作,并在该shell中放置了许多sqoop命令。 现在,shell动作正在被触发,甚至是sqoop正在发生。

我的问题 - 但是,sqoop没有正确的日志记录。 所以我有sqoop命令被重定向到日志文件。 在那里我只看到以下几行。

我的代码 - 壳里面脚本 -

* 
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 
* 

日志信息捕获 -

警告:/opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0 .2/bin /../ lib/sqoop /../ accumulo不存在! Accumulo进口将失败。 请将$ ACCUMULO_HOME设置为您的Accumulo安装的根目录。

请求 - 请建议如何在Oozie中使用shell动作获取sqoop日志。 我需要详细信息,例如我们在控制台上运行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

''''是'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确实得到了标准错误 - 但是,这里的问题是 - 我我在shell中使用sqoop,它没有显示sqoop日志,它显示我这个日志 - log4j:错误无法从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(Permission denied)我如何获得使用shell log/stderr生成的sqoop日志 –

回答

2

你有一个参数暗示的Log4J应该使用一个特定的属性文件,但Sqoop未被指示时使用它(无-Dlog4j.configuration=...file name without path...在命令行) 。好吧,让我们假设是故意完成的(?);问题是,

  • Log4J的搜寻SEARCH_TERM_EXAMPLES属性文件瓦特/ 默认名即log4j.properties
  • 搜索中存在的CLASSPATH的目录进行,在第一场比赛停止
  • 默认CLASSPATH一个Oozie的壳是Hadoop的JAR文件,然后Hadoop的CONF目录,然后当前工作目录(其中所有<file>从属沿着与Oozie的JAR文件倾倒的地方)和所有这些应用程序/ Oozie的JAR文件
  • 第一为匹配恰好是Log4J的无法打开
  • 从而Log4J的任何地方都不会记录任何文件(????????)

一个可能的解决方法是

  1. 创建自定义log4j.properties - 参见在that post中的第一个例子记录任何标记为INFO和大于(即INFO,WARN,ERROR但不是DEBUG)到stdout
  2. 文件上传到HDFS的地方,然后告诉Oozie的动作将其与<file>元素下载到容器
  3. 告诉Oozie的动作来请求其CLASSPATH开始与当前的工作目录,由物业如oozie.launcher.mapreduce.task.classpath.first设置为true(实际性能可能取决于您的Hadoop版本,请参阅that postthat JIRA

注意,第3步是因为默认名称为的只是必要在别处我现在CLASSPATH;如果Sqoop被指示使用不同名称的文件,那么就不会有歧义。