Sqoop简单使用及出现的问题

Sqoop简单使用

http://blog.csdn.net/Post_Yuan/article/details/56840451

1. 列出CDH目录下面的sqoop相关命令:

[root@n12 bin]# pwd

/opt/cloudera/parcels/CDH/bin

[root@n12 bin]# ll sqoop*

sqoop help

2. oracle 抽数据到hive,需要准备jdbc驱动ojdbc6.jar, 将下载的ojdbc6.jar放到$SQOOP_HOME/lib目录下:

/opt/cloudera/parcels/CDH/lib/sqoop/lib[root@n12 lib]# ll ojdbc6.jar-rwxrwxrwx 1 root root 2739670 Feb 24 14:50 ojdbc6.jar

3. 执行 sqoop list-tables命令可以列出oracle的表:

sqoop-list-tables --driver oracle.jdbc.OracleDriver --connect jdbc:oracle:thin:@10.00.00.00:1521/test --username sys --password system

4. 执行sqoop import命令抽取oracle中的一个表到hive:

sqoop-import --connect jdbc:oracle:thin:@10.00.00.00:1521/test --username sys --password system --table TALENT_INFO  --hive-import --create-hive-table --hive-table TALENT_INFO --hive-overwrite --null-string '\\N' --null-non-string '\\N' --hive-drop-import-delims --verbose

此时出现问题:

Oracle: Connection Reset Errors

11/05/26 16:23:47 INFO mapred.JobClient: Task Id : attempt_201105261333_0002_m_000002_0, Status : FAILED

java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLRecoverableException: IO Error: Connection reset

at com.cloudera.sqoop.mapreduce.db.DBInputFormat.setConf(DBInputFormat.java:164)

at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:62)

at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)

at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:605)

at org.apache.hadoop.mapred.MapTask.run(MapTask.java:322)

参考:https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_oracle_connection_reset_errors

在java.security文件中修改:

securerandom.source=file:/dev/../dev/urandom

之后,又遇到Error: TALENT_INFO : Unsupported major.minor version 52.0

http://blog.csdn.net/xiao_jun_0820/article/details/50716025

该问题为cdh的java jdk版本与系统的jdk版本不一致导致的。

但是oracle连接总是间断出现connection reset的问题。

https://blog.pythian.com/connection-resets-when-importing-from-oracle-with-sqoop/

参考该作者的解决思路,应该是修改java文件没有生效的缘故。

在sqoop语句中增加 -D mapred.child.java.opts="-Djava.security.egd=file:/dev/../dev/urandom"

sqoop-import -D mapred.child.java.opts="-Djava.security.egd=file:/dev/../dev/urandom" --connect jdbc:oracle:thin:@10.00.00.00:1521/test --username sys --password system --table FA.FA_ASSET_KEYWORDS  --hive-import  --hive-database zr_test  --create-hive-table --hive-table FA_ASSET_KEYWORDS --hive-overwrite --null-string '\\N' --null-non-string '\\N' --hive-drop-import-delims -m 1 --verbose

另外还有出现:

IO Error: Got minus one from a read call

该问题应该是oracle数据库连接池连接数有限制。

你可能感兴趣的:(Sqoop简单使用及出现的问题)