sqoop将oracle导入到hbase经验之谈

之前公司有个项目,通过sqoop,将oracle的数据导入到hbase。真个过程出现过很多问题,现在我将我导入的过程跟遇到的问题和解决方法写下来,希望能帮助大家

  • 测试连接

先测试sqoop是否能连接到oracle

sqoop list-tables --connect jdbc:oracle:thin:@ip:1521:*** --username *** --password ***

如果能成功,将会列出oracle中的表

  • hbase建立表
create 'tablename',{NAME=>'familyname',COMPRESSION=>'SNAPPY'},{SPLITS => ['a','b'']}

注释 : 
SNAPPY : 是hbase中比较好的压缩算法,可以节省很大的空间 
SPLITS : hbase预分区,就是为了表中的数据均匀分布各个分区。防止热点问题。hbase建表默认是一个分区的。关于SPLITS,大家可以参考

http://blog.csdn.net/luyee2010/article/details/9284925 
http://www.tuicool.com/articles/jMjIbe

  • 导数据
sqoop import --connect jdbc:oracle:thin:@ip:*** --username *** --password *** --table TABLENAME --hbase-table *** --hbase-bulkload --column-family family --hbase-row-key id --split-by id -m 40 --columns id,name,age

导入过程问题即解决 
问题1: 
–table TABLENAME 
表名必须大写, 否则报错 : 
Error during import: No primary key could be found for table *

问题2: 
–hbase-row-key id 中的id,必须在–columns中显示,否则报错: 
Could not insert row with null value for row-key column

问题3: 
–columns id,name,age, 后面列的显示,列名跟逗号之间必须没有空格,否则报错: 
Error parsing arguments for import 
Unrecognized argument

问题4 
Oracle中的表,必须有主键,不然会报错。如果确实没有主键,则需要加上 –split-by id。oracle中哪个列作为hbase的rowkey,则–split-by后面跟上什么,我这里是用id

参数解释

hbase-bulkload : hbase中快速将数据导入hbase的功能。快速的原因,可以参考hbase官网介绍:第69节 : 69. Bulk Loading 
http://hbase.apache.org/book.html#arch.bulk.load

-m : sqoop实际也是mapreduce,这个-m就是值map的个数。默认是4 
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值