6

我有一个基于 6 节点 cloudera 的 hadoop 集群,我正在尝试从 oozie 中的 sqoop 操作连接到 Oracle 数据库。

我已将我的 ojdbc6.jar 复制到 sqoop lib 位置(对我来说恰好位于:/opt/cloudera/parcels/CDH-4.2.0-1.cdh4.2.0.p0.10/lib/sqoop/lib/ ) 在所有节点上,并已验证我可以从所有 6 个节点运行一个简单的“sqoop eval”。

现在,当我使用 Oozie 的 sqoop 操作运行相同的命令时,我得到“无法加载数据库驱动程序类:oracle.jdbc.OracleDriver”

我已经阅读了这篇关于使用共享库的文章,当我们谈论我的任务/操作/工作流特定依赖项时,这对我来说很有意义。但我认为 JDBC 驱动程序安装是对 sqoop 的扩展,所以我认为它属于 sqoop 安装库。

现在的问题是,虽然 sqoop 看到了我放入它的 lib 文件夹中的这个 ojdbc6 jar,但为什么我的 Oozie 工作流程没有看到它?

这是预期的还是我错过了什么?

顺便说一句,你们认为 JDBC 驱动程序 jar 的合适位置在哪里?

提前致谢!

4

4 回答 4

7

JDBC 驱动程序 jar(以及它所依赖的任何 jar)应该放在 HDFS 上的 Oozie sharelib 文件夹中。我正在运行 Hortonworks Data Platform 1.2 而不是 Cloudera 4.2,因此细节可能会有所不同,但我的 JDBC 驱动程序位于/user/oozie/share/lib/sqoop. 这应该允许您通过 Oozie 使用 JDBC 运行 Sqoop。

不必将 JDBC 驱动程序 jar 放入数据节点上的 sqoop lib 中。在我的设置中,我无法sqoop eval从数据节点上的命令行运行简单的命令。我理解你为什么认为这会起作用的逻辑。JDBC 驱动程序 jar 需要位于 HDFS 上的原因是所有数据节点都可以访问它。您的解决方案应该实现相同的目标。我对 Oozie 的内部工作原理不够熟悉,无法说出为什么使用 sharelib 有效,但您的解决方案却没有。

于 2013-04-12T18:49:49.433 回答
5

在CDH5中,你应该把jar放到'/user/oozie/share/lib/lib_${timestamp}/sqoop',然后你必须更新sharelib或者重启oozie。

更新共享库:

oozie admin -oozie http://localhost:11000/oozie -sharelibupdate

于 2016-11-17T07:47:01.117 回答
1

如果您使用 CDH-5,则 JDBC 驱动程序 jar(以及它所依赖的任何 jar)应位于 HDFS 上的“/user/oozie/share/lib/lib_timestamp/sqoop”文件夹中。

于 2015-11-30T04:54:42.047 回答
0

我遇到了同样的问题,它无法找到mysql jar. 我在这个偶数oozie admin -oozie http://localhost:11000/oozie -sharelibupdate命令中使用 cloudera 4.4 将不起作用

为了解决这个问题,我按照以下步骤操作:

  1. 创建一个用户Huehdfs提供管理员权限

  2. 使用Hue UI上传jar/user/oozie/share/lib/sqoop hdfs路径,或者您可以使用以下命令:

hadoop put /var/lib/sqoop2/mysql-connector-java.jar /user/oozie/share/lib/sqoop

  1. 一旦jar放置运行oozie命令。
于 2017-11-22T19:29:50.760 回答