最近使用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的时候 不加上就会出错了 不信你试试