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数据库连接池连接数有限制。