Oozie shell 操作 - 运行 sqoop 命令并需要记录详细信息
Oozie shell action - running sqoop command and need logging details
我正在使用 Oozie、shell action 和 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
*
捕获的日志详细信息:
Warning: /opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0.2/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
如何在 Oozie 中使用 shell 操作获取 sqoop 日志?我需要详细信息,例如有多少条记录 loaded/pulled,以及当我们在控制台上执行 运行 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/node@.COM')]}, u'hive2': {'xml_name': u'hive2', 'properties': [('hive2.jdbc.url', 'jdbc:hive2://node.jnj.com:10000/default'), ('hive2.server.principal', 'hive/itsusraedld01.jnj.com@.COM')]}, 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*
您有一个参数提示 Log4J 应该使用特定的属性文件,但没有指示 Sqoop 使用它(命令行上没有 -Dlog4j.configuration=...file name without path...
)。
好的,让我们假设这是故意的(?);问题是
- Log4J 搜索带有 default 名称的属性文件,即
log4j.properties
- 搜索在 CLASSPATH 中的目录中完成,在第一次匹配时停止
- Oozie 的默认 CLASSPATH shell 是 Hadoop JAR,然后是 Hadoop conf 目录,然后是当前工作目录 (所有
<file>
依赖项与 Oozie JAR 一起转储的地方) 和所有这些 app/Oozie JAR
log4j.properties
的第一个匹配恰好是 Log4J 无法打开的文件
- 因此 Log4J 不会在任何地方记录任何内容 (?????????)
可能的解决方法是
- 创建自定义
log4j.properties
-- cf. that post 中的第一个示例记录任何标记为 INFO 及以上的内容 (即 INFO、WARN、ERROR 但不是 DEBUG) 到 StdOut
- 将该文件上传到某个地方的 HDFS,然后告诉 Oozie Action 使用
<file>
元素将其下载到容器
- 告诉 Oozie Action 请求它的 CLASSPATH 从当前工作目录开始,通过设置 属性 例如
oozie.launcher.mapreduce.task.classpath.first
到 true
(实际 属性 可能取决于您的 Hadoop 版本,请参阅 that post and that JIRA)
请注意,第 3 步是必要的,因为默认名称出现在 CLASSPATH 的其他地方;如果 Sqoop 被指示使用具有不同名称的不同文件,那么就不会有歧义。
我正在使用 Oozie、shell action 和 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
*
捕获的日志详细信息:
Warning: /opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0.2/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation.
如何在 Oozie 中使用 shell 操作获取 sqoop 日志?我需要详细信息,例如有多少条记录 loaded/pulled,以及当我们在控制台上执行 运行 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/node@.COM')]}, u'hive2': {'xml_name': u'hive2', 'properties': [('hive2.jdbc.url', 'jdbc:hive2://node.jnj.com:10000/default'), ('hive2.server.principal', 'hive/itsusraedld01.jnj.com@.COM')]}, 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*
您有一个参数提示 Log4J 应该使用特定的属性文件,但没有指示 Sqoop 使用它(命令行上没有 -Dlog4j.configuration=...file name without path...
)。
好的,让我们假设这是故意的(?);问题是
- Log4J 搜索带有 default 名称的属性文件,即
log4j.properties
- 搜索在 CLASSPATH 中的目录中完成,在第一次匹配时停止
- Oozie 的默认 CLASSPATH shell 是 Hadoop JAR,然后是 Hadoop conf 目录,然后是当前工作目录 (所有
<file>
依赖项与 Oozie JAR 一起转储的地方) 和所有这些 app/Oozie JAR log4j.properties
的第一个匹配恰好是 Log4J 无法打开的文件- 因此 Log4J 不会在任何地方记录任何内容 (?????????)
可能的解决方法是
- 创建自定义
log4j.properties
-- cf. that post 中的第一个示例记录任何标记为 INFO 及以上的内容 (即 INFO、WARN、ERROR 但不是 DEBUG) 到 StdOut - 将该文件上传到某个地方的 HDFS,然后告诉 Oozie Action 使用
<file>
元素将其下载到容器 - 告诉 Oozie Action 请求它的 CLASSPATH 从当前工作目录开始,通过设置 属性 例如
oozie.launcher.mapreduce.task.classpath.first
到true
(实际 属性 可能取决于您的 Hadoop 版本,请参阅 that post and that JIRA)
请注意,第 3 步是必要的,因为默认名称出现在 CLASSPATH 的其他地方;如果 Sqoop 被指示使用具有不同名称的不同文件,那么就不会有歧义。