我有一个基于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操作运行相同的命令时,我得到“couldnotloaddb driver类:oracle.jdbc.oracledriver”
我读过这篇关于使用共享libs的文章,当我们讨论我的任务/操作/工作流特定依赖项时,这对我来说很有意义。但我认为jdbc驱动程序安装是对sqoop的扩展,因此我认为它属于sqoop安装库。
现在的问题是,当sqoop看到我放在lib文件夹中的ojdbc6 jar时,为什么我的oozie工作流没有看到它?
这是意料之中的事还是我遗漏了什么?
另外,你们认为jdbc驱动程序jar的合适位置在哪里?
提前谢谢!
4条答案
按热度按时间6ojccjat1#
jdbc驱动程序jar(以及它所依赖的任何jar)应该放在hdfs上的oozie sharelib文件夹中。我运行的是hortonworks数据平台1.2,而不是cloudera 4.2,因此详细信息可能会有所不同,但我的jdbc驱动程序位于
/user/oozie/share/lib/sqoop
. 这应该允许您通过oozie使用jdbc运行sqoop。无需在数据节点上的sqoop库中放入jdbc驱动程序jar。在我的设置中,我不能运行一个简单的
sqoop eval
从我的数据节点上的命令行。我理解你为什么认为这样行得通的逻辑。jdbc驱动程序jar需要在hdfs上的原因是所有数据节点都可以访问它。你的解决方案应该达到同样的目标。我对oozie的内部工作还不够熟悉,无法解释为什么使用sharelib可以工作,但您的解决方案却不能。nnsrf1az2#
我也面临着同样的问题,但却找不到答案
mysql jar
. 我在这本书中使用了cloudera4.4oozie admin -oozie http://localhost:11000/oozie -sharelibupdate
命令无效为了解决这个问题,我采取了以下步骤:
在中创建用户
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
命令。l2osamch3#
如果您使用的是cdh-5,那么jdbc驱动程序jar(以及它所依赖的任何jar)应该放在hdfs上的“/user/oozie/share/lib/lib\u timestamp/sqoop”文件夹中。
pzfprimi4#
在cdh5中,应该将jar放在“/user/oozie/share/lib/lib{timestamp}/sqoop”中,然后必须更新sharelib或重新启动oozie。
更新sharelib:
oozie admin -oozie http://localhost:11000/oozie -sharelibupdate