使用sqoop导入导出MySQL的时候基本上没遇到什么问题,但是对于oracle数据库来说就有一些区别,下列便是使用sqoop连接oracle数据库的时候遇到的一点坑:
sqoop list-tables:
- -- ... -- --
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目录下,再来尝试。
- -- ... -- -- .
发现仍然报错:
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后执行成功:
- -- ... -- -- -- ...
但是问题又来了,使用sqoop导入oracle数据到hive表的时候又出现了问题:
sqoop import
-- ... -- -- -- ... -- --- --- --- -
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这条参数即可。
-- ... -- -- -- --- --- ---- -
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 {
// 处理空指针异常的情况