Oozie shell动作 - 运行sqoop命令并需要记录详细信息

问题描述 投票:2回答:1

我正在与Oozie,shell动作和sqoop合作。

我正在使用oozie来运行许多sqoop命令。我已经设置了一个shell动作,在那个shell中我放置了很多sqoop命令。现在,shell动作正在被触发,甚至正在发生sqoop。

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

我的代码如下。在shell脚本中:

*
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*
hadoop workflow hdfs oozie sqoop
1个回答
2
投票

你有一个参数暗示Log4J应该使用特定的属性文件,但没有指示Sqoop使用它(在命令行上没有-Dlog4j.configuration=...file name without path...)。

好的,我们假设这是故意的(?);问题是

  • Log4J使用/ default name i.s搜索属性文件。 qazxsw poi
  • 搜索在CLASSPATH中的目录中完成,在第一次匹配时停止
  • Oozie shell的默认CLASSPATH是Hadoop JAR,然后是Hadoop conf dir,然后是当前工作目录(所有log4j.properties依赖项与Oozie JAR一起转储的地方)和所有这些app / Oozie JAR
  • <file>的第一场比赛恰好是Log4J无法打开的文件
  • 因此Log4J不会记录任何地方(????????)

可能的解决方法是

  1. 创建一个自定义log4j.properties - cf. log4j.properties中的第一个示例,用于将任何标记为INFO及以上的内容(即INFO,WARN,ERROR但不是DEBUG)记录到StdOut
  2. 将该文件上传到HDFS某处,然后告诉Oozie Action将其下载到带有that post元素的容器中
  3. 告诉Oozie Action通过将<file>等属性设置为oozie.launcher.mapreduce.task.classpath.first来请求其CLASSPATH以当前工作目录开始(实际属性可能取决于您的Hadoop版本,请参阅truethat post

请注意,步骤3仅是必需的,因为CLASSPATH中的其他位置存在默认名称;如果Sqoop被指示使用不同名称的不同文件,则不会有歧义。

© www.soinside.com 2019 - 2024. All rights reserved.