【发布时间】:2016-04-05 16:49:10
【问题描述】:
我在 CentOS 6.7 中使用 HDP 2.4。
我已经用 Ambari 创建了集群,所以 Oozie 是由 Ambari 安装和配置的。
我在运行与 jar 文件位置相关的 Oozie/Sqoop 时遇到了两个错误。第一个关注postgresql-jdbc.jar,因为 Sqoop 作业是从 Postgres 增量导入的。我将postgresql-jdbc.jar 文件添加到HDFS 并在workflow.xml 中指向它:
<file>/user/hdfs/sqoop/postgresql-jdbc.jar</file>
它解决了这个问题。但第二个错误似乎与kite-data-mapreduce.jar 有关。但是,对这个文件做同样的事情:
<file>/user/hdfs/sqoop/kite-data-mapreduce.jar</file>
似乎没有解决问题:
失败的 Oozie 启动器,主类 [org.apache.oozie.action.hadoop.SqoopMain],main() 抛出异常, org/kitesdk/data/DatasetNotFoundException java.lang.NoClassDefFoundError: org/kitesdk/data/DatasetNotFoundException
这似乎很奇怪,这不是由 Ambari 自动配置的,而且当我们开始出错时,我们必须将 jar 文件复制到 HDFS 中。
这是正确的方法还是我错过了一些配置步骤?
【问题讨论】:
-
我认为您应该将这些 jars 添加到工作流基本路径的
lib目录中。基本路径是存储工作流.xml 的目录。您需要创建此目录并存储您的工作流程所需的所有自定义 jar。它会将它们加载到类路径中。 -
@YoungHobbit,我使用了您所描述的
lib目录。结果是一样的。我看到 JAR 文件像以前一样被加载,但我仍然得到org/kitesdk/data/DatasetNotFoundException。如果源表没有新列,则不会发生此异常。在这种情况下,oozie 作业按计划运行,而 sqoop 只是说它没有要导入的新行。但是当我向表中添加新行时,会发生此异常。这很奇怪,因为我可以直接运行 sqoop 作业(而不是通过 oozie)并且运行正常。 -
好的,我刚刚注意到实际上添加JAR后有变化。例外是
org/kitesdk/data/mapreduce/DatasetKeyOutputFormat,在添加 JAR 文件后,它变成了org/kitesdk/data/DatasetNotFoundException,所以看来我走在了正确的轨道上。可能还需要一些其他的 JAR 文件。 -
我建议您在
job.properties文件中使用属性oozie.use.system.libpath=true。然后只需要添加自定义jar到lib目录,所有sqoop相关的jar都会从/user/oozie/share/lib/lib_/sqoop/.jar添加 -
如果您使用上述
libpath属性,那么您不应该复制罐子。也不要将任何 jar 复制到 oozie 共享库中。将您的工作流特定 jar 复制到工作流应用程序路径的 lib 目录中。
标签: hadoop oozie sqoop hortonworks-data-platform ambari