CDH Sqoop

Oracle数据库导入异常

首先要在

/opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/sqoop/lib

这个路径下,放入你项目中用到的oracle驱动Jar包,否则会提示没有oracle驱动!!!
mysql的驱动默认是有的

我的CDH版本是1.4.7-cdh6.3.1 测试oracle连接时,出现这个图中错误

20/12/30 16:33:23 ERROR manager.OracleManager: Could not find method setSessionTimeZone in oracle.jdbc.driver.T4CConnection
java.lang.NoSuchMethodException: oracle.jdbc.driver.T4CConnection.setDefaultTimeZone(java.util.TimeZone)

sqoop连接错误

看到这个错误我想到了以下几点

  1. 错误栈信息大概是调用listTables开始初始化Oracle的jbdc连接
  2. 开始连接的时候,当调用setDefaultTimeZone这个方法的时候,找不到java.util.TimeZone这个方法
  3. sqoop是用java开发的,肯定是依赖于jdk的,这个方法是rt.jar中的,按理说不应该找不到的
  4. 还是把rt.jar单独放到sqoop的lib里面了,但是无济于事
  5. 于是想到了官方的demo连接的jdbc都是ip:端口这种的,而我的jdbc连接是jdbc:oracle:thin:@域名:1521:服务名
  6. 我把oracle JDBC连接改成了jdbc:oracle:thin:@ip:1521:服务名,于是oracle.jdbc.driver.T4CConnection.setDefaultTimeZone(java.util.TimeZone)这个错误消失了
  7. 但是依然有这个错误 java.lang.NullPointerException
    at org.apache.sqoop.manager.OracleManager.listTables(OracleManager.java:770)
  8. 最后查阅官方源码发现项目sqoop缺省会添加–driver com.mysql.jdbc.Driver驱动,1.4.7之前的版本都是这个,1.4.7的是支持mysql8驱动的
  9. 由于我用的是ojdbc14驱动,我的driver包在源码中是oracle.jdbc.OracleDriver这个类,加上了–driver oracle.jdbc.OracleDriver,问题没有解决依然是上面的一个报错
  10. 我又尝试了加–driver oracle.jdbc.driver.OracleDriver这个类,问题解决,sqoop list-tables成功执行,正常显示出当前服务下的所有表名了,其实这个驱动类在ojdbc14中已经过时

总结
CDH使用Sqoop出现图中错误
1.确保在sqoop lib包下导入oracle驱动
2.sqoop list-tables或其他测试命令最后,加入–driver oracle.jdbc.driver.OracleDriver即可

oracle jdbc驱动

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值