Sqoop从RDMS导入表到Hive报错,--split-by与-m参数均失效如何解决
问题根因
你遇到的报错核心是两个问题:
- 源表未设置主键,Sqoop默认无法自动选择分片字段做并行导入
- 后续添加参数时命令格式错误:
--hive-table参数行结尾的反斜杠前没有预留空格,导致参数解析错乱,你后续加的--split-by、-m 4都没有被Sqoop正确识别,才会出现参数不识别、加了-m4还提示缺主键的报错。
解决方案
方案1:单Map串行导入(适配小表)
不需要指定拆分字段,直接把并行度设为1即可,修正后命令如下:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=false" \ --connect "jdbc:tibero:thin:@hostname:8629:DBI" \ --driver com.tmax.tibero.jdbc.TbDriver \ --username XXX --password XXXX \ --table DMSDBA.cmm_cadorg_Tb \ --hive-import \ --create-hive-table \ --hive-table DMSDBA.cmm_cadorg_Tb1 \ -m 1
方案2:多Map并行导入(适配大表)
需要正确指定--split-by参数,注意两个前提:
- 确认
DORG_UPDT_EMP_NO是源表真实存在的字段 - 如果Tibero库的字段名大小写敏感,需要用双引号包裹字段名
如果拆分字段是字符串类型,需要把allow_text_splitter参数设为true,修正后命令如下:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:tibero:thin:@hostname:8629:DBI" \ --driver com.tmax.tibero.jdbc.TbDriver \ --connection-manager org.apache.sqoop.manager.GenericJdbcManager \ --username XXX -P \ --table DMSDBA.cmm_cadorg_Tb \ --hive-import \ --create-hive-table \ --hive-table DMSDBA.cmm_cadorg_Tb1 \ --split-by "DORG_UPDT_EMP_NO" \ -m 4
注:上述命令把明文密码改成了-P参数,执行时手动输入密码,避免敏感信息泄露;同时显式指定了连接管理器,消除原命令中的warn提示。
内容的提问来源于stack exchange,提问作者mr.data_engg
相关产品推荐
相关产品推荐

