使用Sqoop连接数据库时出现问题

时间:2016-10-28 17:18:03

标签: hadoop sqoop cloudera-cdh

运行简单的sqoop以列出Oracle目录中的表时出现问题。我正在使用CDH 5.5.1

目录下面有一个jar文件ojdbc6.jar:

/var/lib/sqoop

当我运行一个简单的sqoop来列出表时:

sqoop list-tables --connect jdbc:oracle:thin@host_name:port/database_name --username user_name --password passwd

or,

sqoop list-tables --connect jdbc:oracle:thin@host_name:port:database_name --username user_name --password passwd

我得到错误:

Warning: /opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p0.11/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
16/10/28 14:04:39 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.5.1
16/10/28 14:04:39 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
16/10/28 14:04:39 INFO oracle.OraOopManagerFactory: Data Connector for Oracle and Hadoop is disabled.
16/10/28 14:04:39 INFO manager.SqlManager: Using default fetchSize of 1000
16/10/28 14:04:39 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException
        at org.apache.sqoop.manager.OracleManager.listTables(OracleManager.java:759)
        at org.apache.sqoop.tool.ListTablesTool.run(ListTablesTool.java:49)
        at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
        at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

谢谢。

1 个答案:

答案 0 :(得分:0)

检查完一些文档后,我看到您指定的选项是sqoop选项。 Sqoop2由脚本作为第一个参数运行,或者基于SqoopShell类的源在交互模式下运行(在GrepCode上检查它)。 现在,当您有第一个参数时,它会尝试查找并打开列表表作为包含sqoop2命令的脚本文件,这些命令显然会因为您没有这样的文件而失败。

尝试使用sqoop而不是sqoop2运行,同样的命令应该最有效。

在您之后

更新

在异常处检查source code之后,当时几乎有一件事可能为null,连接对象,这意味着此方法前面的getConnection()调用因此获得了null,进一步检查代码是不可能的,这意味着,在尝试建立连接时抛出了SQLException,并且由于catch中的NPE而保持隐藏。

检查您的数据库日志,连接字符串等...特别是因为您正在使用-P选项,并且仍然在输出中收到有关它的警告。