包安装期间不应该配置 Oozie/Sqoop jar 位置吗?
Posted
技术标签:
【中文标题】包安装期间不应该配置 Oozie/Sqoop jar 位置吗?【英文标题】:Shouldn't Oozie/Sqoop jar location be configured during package installation? 【发布时间】: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 目录中。
【参考方案1】:
这是由于类路径中缺少 jars 而发生的。我建议您在job.properties
文件中使用属性oozie.use.system.libpath=true
。所有与 sqoop 相关的 jar 都将自动添加到类路径中。然后只在工作流应用路径的lib目录下添加你需要的自定义jar,所有sqoop相关的jar都会从/user/oozie/share/lib/lib_<timestamp>/sqoop/*.jar
添加。
【讨论】:
以上是关于包安装期间不应该配置 Oozie/Sqoop jar 位置吗?的主要内容,如果未能解决你的问题,请参考以下文章
hue/ oozie/ sqoop/ kafka/ zookeeper/ flume 简介及cdh安装简介
Oozie sqoop 任务错误:无法运行程序“hive”:错误=2 没有这样的文件或目录