sqoop之从oracle导入hbase的问题与sqoop hbase 需要注意的一个问题

转载URL:

http://blog.csdn.net/liuxingjiaofu/article/details/6953701

sqoop从oracle导入, 需要有ojdbc6.jar,放在$SQOOP_HOME/lib里,不用添加到classpath里,因为sqoop会自己遍历lib文件夹并添加里面的所有jar包 --connect与mysql的不一样,如下(shell脚本中的主要部分)

#Oracle的连接字符串,其中包含了Oracle的地址,SID,和端口号
#CONNECTURL=jdbc:oracle:thin:@172.7.10.16:1521:orcl
CONNECTURL=jdbc:oracle:thin:@172.7.10.16:1521:orcl
#使用的用户名
ORACLENAME=scott
#使用的密码
ORACLEPASSWORD=wang123456
#需要从Oracle中导入的表名
oralceTableName=test
#需要从Oracle中导入的表中的字段名
columns=ID,STATE
#将Oracle中的数据导入到HDFS后的存放路径
#hdfsPath=/tmp/

#执行导入逻辑。将Oracle中的数据导入到HDFS中
sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --m 1 --table $oralceTableName --columns $columns --hbase-create-table --hbase-table or1 --hbase-row-key STATE --column-family or1


我的oracle服务器是在windowsXP上运行的,期间遇到两个解决起来耗时不小的问题
1. ERROR manager.SqlManager: Error executing statement: java.sql.SQLRecoverableException: Io 异常: The Network Adapter could not establish the connection

11/11/09 19:43:44 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException
    at com.cloudera.sqoop.orm.ClassWriter.generate(ClassWriter.java:935)
    at com.cloudera.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:82)
    at com.cloudera.sqoop.tool.ImportTool.importTable(ImportTool.java:337)
    at com.cloudera.sqoop.tool.ImportTool.run(ImportTool.java:423)

    at com.cloudera.sqoop.Sqoop.run(Sqoop.java:144)

连接不上oracle服务器,经多方查找,最后确定是因为windows的防火墙没有关! 关掉!OK,可以连接了。

2. ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Could not determine the row-key column. Use --hbase-row-key to specify the input column that names each row.
    at com.cloudera.sqoop.mapreduce.HBaseImportJob.configureOutputFormat(HBaseImportJob.java:114)
    at com.cloudera.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:160)

……

……


说的很清楚了,hbase自己找不到哪一列是row-key,为什么呢?因为我的oracle表test是这样定义的 create table test(ID INT, STATE INT);并且插入了四条数据

,如下

ID STATE

1   10

1   30

1   40

1   80

而刚开始的时候我没有写 --hbase-row-key这一项,此时sqoop默认将表的第一列作为hbase表的rowkey,大家当然知道rowkey必须是唯一的,即一个rowkey可以唯一确定1条或0条记录,但是我的很显然不符合此规定,因此,默认是不行滴,如果加 --hbase-row-key ID同理也是不行滴,因此,针对我要导入的test表只能暂时用--hbase-row-key STATE了。

一个问题,我用mysql导入hive中有个问题,昨天至今未解决,就是sqoop import 执行成功,hdfs中也能够在hive的warehouse中看到导入的表及内容,但是在hive外壳中执行show tables ; 却不显示新导入的表!唉……估计是hive配置没配好,再研究

一个待研究:对rdbms,如mysql中的一个表,假设有四列,由于hbase的rowkey设计好了会极大提高查询效率,一般将其rowkey用mysql中的三列组合起来,即假设mysql表中为:姓名,出生年月,地点,工资。可以令rowkey为姓名_出生年月_地点,如何实现呢,只需要在现有mysql表中,新建一列rowkey,执行一个update 语句

update mysqltable set rowkey=姓名_出生年月_地点

然后在sqoop import 进hbase时 制定rowkey  --hbase -row-key  rowkey

待实验


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值