错误场景:
使用sqoop --options-file
脚本打包执行时出现的错误。
错误截取如下:
19/09/22 01:35:04 ERROR sqoop.Sqoop: Error while expanding arguments
java.lang.Exception: Malformed option in options file(sq_expToMysql.opt): export --connect jdbc:mysql://chdp11:3306/test --username root --password root --table stu --columns "name,age" --num-mappers 1 --export-dir /sqoop/data --input-fields-terminated-by "\t"at org.apache.sqoop.util.OptionsFileUtil.removeQuoteCharactersIfNecessary(OptionsFileUtil.java:170)at org.apache.sqoop.util.OptionsFileUtil.removeQuotesEncolosingOption(OptionsFileUtil.java:136)at org.apache.sqoop.util.OptionsFileUtil.expandArguments(OptionsFileUtil.java:90)at com.cloudera.sqoop.util.OptionsFileUtil.expandArguments(OptionsFileUtil.java:33)at org.apache.sqoop.Sqoop.runTool(Sqoop.java:199)at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
Malformed option in options file(sq_expToMysql.opt): export --connect jdbc:mysql://chdp11:3306/test --username root --password root --table stu --columns "name,age" --num-mappers 1 --export-dir /sqoop/data --input-fields-terminated-by "\t"
Try 'sqoop help' for usage.
关键信息:
Error while expanding arguments
脚本文件如下
export \
--connect jdbc:mysql://chdp11:3306/test \
--username root \
--password root \
--table stu \
--columns "name,age" \
--num-mappers 1 \
--export-dir /sqoop/data \
--input-fields-terminated-by "\t"
解决方案
一般在控制台书写较长的脚本代码时会用反斜杠(’\‘)进行行分割以增加可视性,但在打包成执行脚本文件时需要去除反斜杠,否则会被认为是相关传入参数。
也就是最后的书写如下:
export
--connect jdbc:mysql://chdp11:3306/test
--username root
--password root
--table stu
--columns "name,age"
--num-mappers 1
--export-dir /sqoop/data
--input-fields-terminated-by "\t"
而后就可以用/usr/SFT/sqoop-1.4.6/bin/sqoop --options-file sq_expToMysql.opt
(j脚本文件名:sq_expToMysql.opt)开行的执行了。