使用sqoop导入导出MySQL的时候基本上没遇到什么问题,但是对于oracle数据库来说就有一些区别,下列便是使用sqoop连接oracle数据库的时候遇到的一点坑:

sqoop list-tables:

$ sqoop list-tables --connect jdbc:oracle:thin:@172.27.9.170:1521:ora11g --username MINER --password xxxxxx

Warning: /usr/hdp/2.3.2.0-2950/hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /usr/hdp/2.3.2.0-2950/accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
17/07/31 11:49:31 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.3.2.0-2950
17/07/31 11:49:31 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
17/07/31 11:49:31 INFO oracle.OraOopManagerFactory: Data Connector for Oracle and Hadoop is disabled.
17/07/31 11:49:31 INFO manager.SqlManager: Using default fetchSize of 1000
17/07/31 11:49:52 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:148)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:184)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:226)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:235)
at org.apache.sqoop.Sqoop.main(Sqoop.java:244)

java.lang.NullPointerException,从这里看应该是缺少jdbc,进入sqooplib下查看:

$ cd /usr/hdp/2.3.2.0-2950/sqoop/lib
$ ls -lh

发现没有ojdbc,下载ojdbc6.jar并上传到/usr/hdp/2.3.2.0-2950/sqoop/lib目录下,再来尝试。

$ sqoop list-databases --connect jdbc:oracle:thin:@172.27.9.170:1521:ora11g --username MINER --password miner123. 

发现仍然报错:

Warning: /usr/hdp/2.3.2.0-2950/hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /usr/hdp/2.3.2.0-2950/accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
17/07/31 11:55:34 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.3.2.0-2950
17/07/31 11:55:34 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
17/07/31 11:55:34 INFO oracle.OraOopManagerFactory: Data Connector for Oracle and Hadoop is disabled.
17/07/31 11:55:34 INFO manager.SqlManager: Using default fetchSize of 1000
17/07/31 11:55:51 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException
at org.apache.sqoop.manager.OracleManager.listDatabases(OracleManager.java:695)
at org.apache.sqoop.tool.ListDatabasesTool.run(ListDatabasesTool.java:49)
at org.apache.sqoop.Sqoop.run(Sqoop.java:148)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:184)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:226)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:235)
at org.apache.sqoop.Sqoop.main(Sqoop.java:244)

这次应该是没有找到ojdbc,使用参数手动指定–driver oracle.jdbc.driver.OracleDriver后执行成功:
list-tables

$ sqoop list-tables --connect jdbc:oracle:thin:@172.27.9.170:1521:ora11g --username XDT --password xxxxxx --driver oracle.jdbc.driver.OracleDriver

但是问题又来了,使用sqoop导入oracle数据到hive表的时候又出现了问题:

sqoop import

$ sqoop import --connect jdbc:oracle:thin:@172.27.9.170:1521:ora11g --username XDT --password xxxxxx  --driver oracle.jdbc.driver.OracleDriver --table  K2 --hive-import --hive-table K2_test --hive-overwrite -m 1

Warning: /usr/hdp/2.3.2.0-2950/hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /usr/hdp/2.3.2.0-2950/accumulo does not exist! Accumulo imports will fail.
Please set \$ACCUMULO_HOME to the root of your Accumulo installation.
17/07/31 12:29:13 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.3.2.0-2950
17/07/31 12:29:13 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
17/07/31 12:29:13 INFO tool.BaseSqoopTool: Using Hive-specific delimiters for output. You can override
17/07/31 12:29:13 INFO tool.BaseSqoopTool: delimiters with –fields-terminated-by, etc.
17/07/31 12:29:13 WARN sqoop.ConnFactory: Parameter –driver is set to an explicit driver however appropriate connection manager is not being set (via –connection-manager). Sqoop is going to fall back to org.apache.sqoop.manager.GenericJdbcManager. Please specify explicitly which connection manager should be used next time.
17/07/31 12:29:13 INFO manager.SqlManager: Using default fetchSize of 1000
17/07/31 12:29:13 INFO tool.CodeGenTool: Beginning code generation
17/07/31 12:29:28 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM K2 AS t WHERE 1=0
17/07/31 12:29:28 ERROR manager.SqlManager: Error executing statement: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:861)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3493)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:758)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:767)
at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:270)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:241)
at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:227)
at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:295)
at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1845)
at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1645)
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:107)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.Sqoop.run(Sqoop.java:148)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:184)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:226)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:235)
at org.apache.sqoop.Sqoop.main(Sqoop.java:244)
17/07/31 12:29:28 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter
at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1651)
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:107)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.Sqoop.run(Sqoop.java:148)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:184)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:226)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:235)
at org.apache.sqoop.Sqoop.main(Sqoop.java:244)

实际上刚刚成功地使用list-databases的时候,有一条输出:

WARN sqoop.ConnFactory: Parameter –driver is set to an explicit driver however appropriate connection manager is not being set (via –connection-manager). Sqoop is going to fall back to org.apache.sqoop.manager.GenericJdbcManager. Please specify explicitly which connection manager should be used next time.

但是没有注意,so 取消–driver oracle.jdbc.driver.OracleDriver这条参数即可。

$ sqoop import --connect jdbc:oracle:thin:@172.27.9.170:1521:ora11g --username XDT --password xxxxxx  --table  K2 --hive-import --hive-table K2_test --fields-terminated-by ':' -m 1
running Sqoop: java.lang.NullPointerExceptionSQL command not properly endedjava.io.IOException: No columns to generate for ClassWriter
阿里云开源离线同步工具DataX3.0介绍 一. DataX3.0概览 ​ DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、 Oracle 等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星...
主要介绍了 java . lan g. NullPointerException 出现的几种原因及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 java . lan g. NullPointerException 出现的几种原因: 1、字符串变量未初始化 2、接口类型的对象没有用具体的类初始化 3、当一个对象的值为空时,你没有判断为空的情况。
使用 CDH 3.6.2 下的 Sqoop 使用遇到错误 ERROR sqoop . Sqoop : Got exception running Sqoop : java . lan g. NullPointerException java . lan g. NullPointerException at org.json.JSONObject.<init>(JSONObject. java :144) at org.apache. sqoop .util. Sqoop JsonUtil.getJsonStringforMap(S
洛萨之锋公司最近需要使用 sqoop 利用hcatalog将数据从mysql导入到hive,我在导数据的时候碰到这样的问题: ERROR sqoop . Sqoop : Got exception running Sqoop : java . lan g. NullPointerException . 具体 Exception 是: java . lan g. NullPointerException at jav
/usr/bin/ sqoop list-databases \ --connect jdbc: oracle :thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xx.xx.xx)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = p3edsdb))) \ --username xxx\ --password xxx ##注意:jdb...
通过 java api并发调用 sqoop ,发现如下相关异常 2020-07-03 15:10:44 [ pool-1-thread-6:350039 ] - [ ERROR ] Got exception running Sqoop : java . lan g. NullPointerException java . lan g. NullPointerException at java .util.Objects.requireNonNull(Objects. java :203) at java .util.Arrays
1、启动 sqoop 报错:ERROR sqoop . Sqoop : Got exception running Sqoop : java . lan g.Runtime Exception : Could not load db driver class : com.mysql.jdbc.Driver [root@slave bin]# ./ sqoop list-databases --connect jdbc:m
CDH是cloudera公司开发的一个快速部署、高效管理Hadoop和其各种组件的一个商业化产品。 主要分为两部分,分别为Cloudera Manager和CDH软件包。 其中Cloudera Manager负责集群的部署与管理。 CDH软件包囊括了hadoop生态圈的安装包,例如hdfs、yarn、hive、spark等等。
ERROR sqoop . Sqoop : Got exception running Sqoop : java . lan g. NullPointerException java . lan g. NullPointerException
java . lan g. NullPointerException Java 中常见的运行时异常,表示空指针异常。当代码尝试访问一个空对象的属性或调用一个空对象的方法时,就会抛出这个异常。 这个异常通常是由以下几种情况引的: 1. 对一个空对象进行操作:当一个对象没有被实例化或者被赋值为null时,如果尝试对其进行操作,就会抛出空指针异常。 2. 对数组中的空元素进行操作:当一个数组中的某个元素为null时,如果尝试对其进行操作,也会抛出空指针异常。 3. 调用了一个返回null的方法:如果调用一个方法,而该方法返回null,并且尝试对返回值进行操作,就会抛出空指针异常。 解决空指针异常的方法包括: 1. 检查对象是否为空:在使用对象之前,先判断对象是否为空,可以使用if语句或者三元运算符进行判断。 2. 检查数组元素是否为空:在对数组进行操作之前,先判断数组中的元素是否为空。 3. 检查方法返回值是否为空:在调用一个方法并使用其返回值之前,先判断返回值是否为空。 ``` java String str = null; if (str != null) { // 对str进行操作 } else { // 处理空指针异常的情况