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

Issue while using Sqoop to connect to database

我在 运行使用简单的 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)

谢谢。

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

尝试 运行 使用 sqoop 而不是 sqoop2,相同的命令应该最有可能起作用。

更新 在你之后:

在异常检查 source code 之后,几乎有一件事情在那时可能为空,即连接对象,这意味着此方法中较早的 getConnection() 调用结果为空,通过进一步检查代码不可能发生,这意味着在尝试建立连接时抛出了 SQLException,并且由于捕获中的 NPE 而保持隐藏状态。

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