分享

求解sqoop命令中jdbc路径存在多属性时,应该如何写

tsubasawzj 发表于 2017-7-7 15:08:10 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 8 11059
本帖最后由 tsubasawzj 于 2017-7-7 15:16 编辑

jdbc中需要设置useSSL=false和tinyInt1isBit=false

如果命令行如下,就报错 --username: 未找到命令
sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?useSSL=false&tinyInt1isBit=false --username user --password pass --hive-import -m 1 --hive-overwrite --hive-drop-import-delims --hive-database test --warehouse-dir /user/hadoop/sqoop

如果只设置一个属性,比如
sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?tinyInt1isBit=false --username user --password pass --hive-import -m 1 --hive-overwrite --hive-drop-import-delims --hive-database test --warehouse-dir /user/hadoop/sqoop
或者
sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?useSSL=false --username user --password pass --hive-import -m 1 --hive-overwrite --hive-drop-import-delims --hive-database test --warehouse-dir /user/hadoop/sqoop
都是可以正常执行的

sqoop命令行在执行 jdbc:mysql://xx.xx.xx.xx:3306/test?useSSL=false&tinyInt1isBit=false 应该是解析成其他什么了
请问如果想同时设置这两个参数,jdbc路径应该怎么写

已有(8)人评论

跳转到指定楼层
qcbb001 发表于 2017-7-7 16:22:02
&换成--,如下面格式
sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?useSSL=false --tinyInt1isBit=false --username user --password pass --hive-import -m 1 --hive-overwrite --hive-drop-import-delims --hive-database test --warehouse-dir /user/hadoop/sqoop

回复

使用道具 举报

tsubasawzj 发表于 2017-7-7 16:31:12
qcbb001 发表于 2017-7-7 16:22
&换成--,如下面格式
sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?useSSL=fal ...

import-all-tables 不支持参数tinyInt1isBit 或者useSSL,所以只能考虑写在jdbc中
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Error parsing arguments for import-all-tables:
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --tinyInt1isBit
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: false
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --username
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: test
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --password
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: test
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --hive-import
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: -m
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: 1
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --hive-overwrite
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --hive-drop-import-delims
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --hive-database
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: test
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: --warehouse-dir
17/07/07 16:28:46 ERROR tool.BaseSqoopTool: Unrecognized argument: /user/hadoop/sqoop

回复

使用道具 举报

easthome001 发表于 2017-7-7 17:38:07
可以换另一个思路:上面两个同时,可能不支持。把其中一个转换下
尝试下面
jdbc:mysql://localhost/test?tinyInt1isBit=false
另一种解决方式:
hive使用 --map-column-hive foo=tinyint
非hive使用--map-column-java foo=integer

回复

使用道具 举报

tsubasawzj 发表于 2017-7-7 17:42:11
easthome001 发表于 2017-7-7 17:38
可以换另一个思路:上面两个同时,可能不支持。把其中一个转换下
尝试下面
jdbc:mysql://localhost/test? ...

下面这个方法的前提条件是知道表结构,但现在不确定表结构,每天全量同步,也不确定哪天mysql表结构发生变化
回复

使用道具 举报

easthome001 发表于 2017-7-7 17:54:37
本帖最后由 easthome001 于 2017-7-7 17:59 编辑
tsubasawzj 发表于 2017-7-7 17:42
下面这个方法的前提条件是知道表结构,但现在不确定表结构,每天全量同步,也不确定哪天mysql表结构发生 ...

是不是用中文格式了。jbdc应该就是这个格式。
建议测试下其它设置,比如设置下编码等。看看是否错误。
如果错误说明,楼主的格式有问题。如果没有错误,说明不支持,不过这个可能性感觉比较小
jdbc:mysql://localhost:3306/kissbb_data?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false

回复

使用道具 举报

tsubasawzj 发表于 2017-7-7 18:10:53
easthome001 发表于 2017-7-7 17:54
是不是用中文格式了。jbdc应该就是这个格式。
建议测试下其它设置,比如设置下编码等。看看是否错误。
...

jdbc的格式确实是这样,但是现在看来在sqoop的connect中不能这样设置
我看报错,应该是sqoop解析命令时出的问题,只要包含了& 整个命令行的解析就断了,当做了两个命令的样子
sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?tinyInt1isBit=false&useSSL=false --username xxx


报错如下:
--username: 未找到命令
java.sql.SQLException: Access denied for user

所以应该是 sqoop import-all-tables --connect jdbc:mysql://xx.xx.xx.xx:3306/test?tinyInt1isBit=false&useSSL=false 解析到这,因为包含了 &,命令就结束了,--username xxx被解析成了另一个命令
回复

使用道具 举报

einhep 发表于 2017-7-7 19:52:05
tsubasawzj 发表于 2017-7-7 18:10
jdbc的格式确实是这样,但是现在看来在sqoop的connect中不能这样设置
我看报错,应该是sqoop解析命令时 ...

目前唯一的办法就是使用转义字符,但是似乎不支持。
尝试使用转义字符\,或则楼主找找其它资料。最坏的办法就是修改源码,读取的时候,能否解析


回复

使用道具 举报

tsubasawzj 发表于 2017-7-11 17:03:04
einhep 发表于 2017-7-7 19:52
目前唯一的办法就是使用转义字符,但是似乎不支持。
尝试使用转义字符\,或则楼主找找其它资料。最坏的办 ...

useSSL=false\&tinyInt1isBit=false,用转义字符成功了,非常感谢
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条