我有一个基于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操作运行相同的命令时,我得到“无法加载db驱动程序类:oracle.jdbc.OracleDriver”
我已经阅读了有关使用共享库的this article,当我们讨论我的任务/操作/工作流特定依赖项时,它对我有意义。但是我看到一个JDBC驱动程序安装作为sqoop的扩展,所以我认为它属于sqoop安装库。
现在的问题是,虽然sqoop看到这个ojdbc6 jar我已经放入它的lib文件夹,为什么我的Oozie工作流程看不到它?
这是预期的事情还是我错过了什么?
顺便说一下,你怎么看待JDBC驱动程序jar的适当位置?
提前致谢!
JDBC驱动程序jar(以及它所依赖的任何jar)应该放在HDFS上的Oozie sharelib文件夹中。我正在运行Hortonworks Data Platform 1.2而不是Cloudera 4.2所以细节可能会有所不同,但我的JDBC驱动程序位于/user/oozie/share/lib/sqoop
。这应该允许您通过Oozie使用JDBC运行Sqoop。
没有必要在数据节点上的sqoop lib中放入JDBC驱动程序jar。在我的setupt中,我无法从数据节点上的命令行运行简单的sqoop eval
。我理解为什么你认为这会起作用的逻辑。 JDBC驱动程序jar需要在HDFS上的原因是所有数据节点都可以访问它。您的解决方案应该实现相同的目标。我不太熟悉Oozie的内部工作原理,说明为什么使用sharelib有效但你的解决方案却没有。
在CDH5中,您应该将jar放到'/ user / oozie / share / lib / lib _ $ {timestamp} / sqoop',然后,您必须更新sharelib或重新启动oozie。
更新sharelib:
oozie admin -oozie http://localhost:11000/oozie -sharelibupdate
如果您使用的是CDH-5,则JDBC驱动程序jar(以及它所依赖的任何jar)应该放在HDFS上的'/ user / oozie / share / lib / lib_timestamp / sqoop'文件夹中。
我面临同样的问题,它无法找到mysql jar
。我在这个甚至oozie admin -oozie http://localhost:11000/oozie -sharelibupdate
命令使用cloudera 4.4将无法正常工作
为了解决这个问题,我遵循了以下步骤:
Hue
在hdfs
中创建用户并提供管理员权限Hue UI
将jar
上传到/user/oozie/share/lib/sqoop
hdfs
路径,或者您可以使用以下命令:hadoop put /var/lib/sqoop2/mysql-connector-java.jar /user/oozie/share/lib/sqoop
jar
后,运行oozie
命令。