分享

sqoop mysql\oracle数据导入到hbase 各种异常解决 --columns指定字段需要注意

bioger_hit 2013-12-22 18:38:49 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 10914
最近使用sqoop把数据从oracle导入到hbase 遇到各种问题。这里给大家总结一下。

使用sqoop 导mysql的数据时 一切顺利很方便  
导oracle的时候 问题就来了
--query命令: 使用这个命令的时候 需要注意的是 where后面的参数,$CONDITIONS 这个参数必须加上
而且存在单引号与双引号的区别,如果--query后面使用的是双引号 那么需要在$CONDITIONS\ \$CONDITIONS
./sqoop import --connect jdbc:oracle:thin:@192.168.8.130:1521:dcshdev --username User_data2 --password yhdtest123qa --query "select * from so_ext t where \$CONDITIONS " -m 4 --hbase-create-table --hbase-table hso --column-family so --hbase-row-key id --split-by id

如果使用--columns指令来指定字段 也出现了问题
因为在一行中写太多命令是不可能的,--columns 如果字段太多在命令中写也不方便
所以使用shell脚本要方便的多
那么在脚本中换行使用 \  来换行

有个问题就是 使用--columns 指定的字段大小写要注意 得使用小写。
如果使用大写 导数据不会有异常 会成功的,hbase中表也会创建好,但是scan的时候 你会发现没有数据 这个蛋疼吧
--columns id,order_id,order_code
而且每个字段之间用逗号分隔,但是不能有空格,在sqoop中没有处理空格,如果在这个命令后的参数有空格的话
就不能和oracle表中的字段对应上了 结果虽然没有错误能够显示成功导入多了条数据,但是scan的时候 会是0条数据

关于导mysql和oracle的时候 还有个区别:
导mysql表的数据时 不需要指定太多的命令就可以成功导入,但是oracle就需要很多命令 ,如--split-by 这个切分参数
在导mysql的时候 就不需要 ,但是如果在导oracle的时候 不加上就会出错了
希望对大家有所帮助。

已有(4)人评论

跳转到指定楼层
lzw 发表于 2013-12-22 18:55:09
很值得注意。
回复

使用道具 举报

chuyuan_zhou 发表于 2014-12-23 17:57:42
飘过,学习学习!
回复

使用道具 举报

wubaozhou 发表于 2014-12-28 18:10:03
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条