分享

使用Sqoop从Oracle导入数据到Hive的方法及错误总结

sstutu 发表于 2014-1-8 17:20:10 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 28063
本帖最后由 sstutu 于 2014-1-8 17:23 编辑

导入数据
设置HADOOP_HOME
$ HADOOP_HOME=/path/to/some/hadoop sqoop import --arguments...

下载合适的Sqoop并解压到硬盘,所谓合适即Sqoop的版本应该和Hadoop的版本相匹配。笔者的Hadoop版本是1.03,下载的Sqoop是版本1.4.2。
$ tar zvxf sqoop-1.4.2.bin__hadoop-1.0.0.tar.gz


下载合适的JDBC驱动,将下载的JDBC的驱动放到Sqoop的lib文件夹下。
导入数据
$ sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:DBNAME --username USERNAME --password PASSWORD --verbose -m 1 --table TABLENAME

DBNAME:数据库名
USERNAME:用户名
PASSWORD:密码
TABLENAME:表名
-m:导入数据的进程的并发数,默认是4。如果导入的数据不大的话,不妨设置成1,这样导入更快。一般来说Sqoop会使用主键来平均地分割数据。并发导入的时候可以设置相关的分割列等等,具体的做法参考官方的文档。
如果Oracle是安装在远程的电脑上,要确保Sqoop可以ping通Oracle所在的电脑。例如如果Oracle安装在Win7上面,可能需要关闭Win7的防火墙。另外,需要将Oracle配置成可以远程访问的。

注意,用户名和表名应该要是大写的,除非它们在创建的时候是名字是放在引号中的大小写混合的形式。错误总结
1.笔者在导入数据的过程中,发现一个问题,就是导入时没有提示任何错误,在HDFS中也看到生成了相关的文件,但是在Hive中使用命令show TABLES时却没有看到新导入的表格。此时有两种解决方案。一种是在Hive中手动地使用CREAT命令创建出表格,然后再SELECT一个,会发现表里有数据了。因此笔者猜测(只是猜测)可能是因为导入之后表格的元数据没有写入到Hive中。笔者查找了相关的资料,发现Hive默认是将元数据存储在derby中,所以笔者考虑将derby换成MySQL。
方法:http://blog.sina.com.cn/s/blog_3fe961ae0101925l.html
将元数据存储在MySQL后,再导入就发现没有问题了。

2.增量导入
另外一个问题,如果我们要导入某个表中的新加入的部分,可以使用--check-column、--incremental、--last-v

3.
环境:CentOS 6.3,   hive-0.9.0-cdh4.1.2, Oracle database 11g


执行语句:sqoop import --connect jdbc:oracle:thin:@m1-ite-erp-bidev01.m1:8521:biprod --username ahmt --password haddmt --table FCT_PROX_HMT --hive-import -m 1

导数的时候出错: ERROR tool.ImportTool: Imported Failed: Attempted to generate class with no columns!

经排查,问题出在 --username ahmt 这个选项, 需要把用户名大写, --username AHMT, 同时注意表名也要大写




欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(3)人评论

跳转到指定楼层
zj220223 发表于 2016-12-13 10:55:39
我也遇到了这个问题 2天了 希望今天能解决
回复

使用道具 举报

lanthro 发表于 2017-4-4 12:35:24
在CDH-5.4.3上试验用楼主的方法从oracle导入到hive,用户名大小写都没问题,表名必须大写,否则出错

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条