Sqoop增量导入参数顺序咨询及命令正确性确认
Sqoop增量导入Job参数顺序问题解析
嘿,我来帮你梳理下这个Sqoop增量导入任务的参数顺序问题~
首先要指出最关键的语法错误:你在创建Sqoop Job的时候,没有用--来分隔Job定义部分和实际的导入命令部分。Sqoop Job的标准语法要求,在--create <job-name>之后必须加--,用来告诉Sqoop:“后面的内容是要作为Job保存的具体导入命令”。你现在直接跟--import,会导致Sqoop把导入参数当成Job命令的一部分,肯定会解析失败。
接下来咱们拆解正确的参数顺序逻辑:
- 第一部分:Sqoop Job的基础定义
sqoop job --create sample_job -- - 第二部分:Hadoop相关的配置参数(比如队列指定),要放在导入命令的最前面
-Dmapred.job.queue.name=realtime - 第三部分:数据库连接相关参数,顺序可以灵活,但一般按
--connect、--driver、--username、--password的顺序来--connect jdbc:mysql://hostname/db?zeroDateTimeBehavior=convertToNull --driver com.mysql.jdbc.Driver --username tony --password stark - 第四部分:表和并行度设置
--table SAMPLE_TABLE -m 1 - 第五部分:增量导入的核心参数,这部分顺序要统一:先指定增量模式
--incremental,再指定检查列--check-column,最后是上次导入的时间戳--last-value--incremental lastmodified --check-column ts --last-value 2018-04-24 - 第六部分:输出路径和Hive字段映射参数
--target-dir /some/tmp/location/ --map-column-hive XYZ=tinyint(这里你写的tinyi...应该是tinyint,我帮你补全了)
修正后的完整命令如下:
sqoop job \ --create sample_job -- \ -Dmapred.job.queue.name=realtime \ --connect jdbc:mysql://hostname/db?zeroDateTimeBehavior=convertToNull \ --driver com.mysql.jdbc.Driver \ --username tony \ --password stark \ --table SAMPLE_TABLE -m 1 \ --incremental lastmodified \ --check-column ts \ --last-value 2018-04-24 \ --target-dir /some/tmp/location/ \ --map-column-hive XYZ=tinyint
另外补充一点:虽然有些参数顺序(比如数据库连接里的--username和--password)调换不会报错,但遵循统一的顺序能让命令更易读,也避免出现参数解析冲突的问题。
内容的提问来源于stack exchange,提问作者StrangerThinks
相关产品推荐
相关产品推荐

