java - 由于参数无效,SPRING XD -SQOOP 作业失败

标签 java hdfs sqoop spring-xd

我们正在尝试使用 sqoop job 作为 spring xd 的模块将数据从 sql server 提取到 hdfs。

当我尝试使用 spring xd 工具的 xd - shell 运行以下命令时:

sqoop --command=import --args='--connect 'jdbc:sqlserver://localhost/mydb'  
--username root --password p@ss --query select * from tablename  
--target-dir /path/to/hdfs/file'

从 spring xd shell 作为 sqoop 作业启 Action 业时出现以下错误:

sqoop.errors

Try --help for usage instructions.
Exception in thread "main" java.lang.RuntimeException: Sqoop failed - return code 1
at org.springframework.xd.sqoop.SqoopRunner.main(SqoopRunner.java:81)

更多错误

19:38:40,556 ERROR main tool.BaseSqoopTool - Error parsing arguments for import:
19:38:40,556 ERROR main tool.BaseSqoopTool - Unrecognized argument: '--connect
19:38:40,556 ERROR main tool.BaseSqoopTool - Unrecognized argument: 'jdbc:sqlserver://localhost/mydb'
19:38:40,556 ERROR main tool.BaseSqoopTool - Unrecognized argument: --username
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: root
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: --password
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: p@ss
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: --query
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: select
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: *
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: from
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: tablename
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: --target-dir
19:38:40,557 ERROR main tool.BaseSqoopTool - Unrecognized argument: /path/to/hdfs/file'  

退出说明:

java.lang.IllegalStateException: Step execution failed - Exception in thread "main" java.lang.RuntimeException: Sqoop failed - return code 1
at org.springframework.batch.step.tasklet.x.AbstractProcessBuilderTasklet.execute(AbstractProcessBuilderTasklet.java:209)

我还尝试将 = 放在参数后面,但得到了相同的结果。

为什么?

最佳答案

单引号内有单引号,这会将您的命令拆分为

sqoop --command=import --args='--connect '
jdbc:sqlserver://localhost/mydb
'--username root --password p@ss --query select * from tablename --target-dir /path/to/hdfs/file'

由于 --connect 本身不是有效的参数,因此您会收到错误。

您可以转义单引号,如下所示:sqoop --command=import --args='--connect\'jdbc:sqlserver://localhost/mydb\' --username root --password p@ss --query select * from tablename --target-dir/path/to/hdfs/file'

或者您还应该能够在 args 部分使用双引号而不是单引号,如下所示:sqoop --command=import --args="--connect 'jdbc:sqlserver://localhost/mydb' --username root --password p@ss --query select * from tablename --target-dir/path/to/hdfs/file"

关于java - 由于参数无效,SPRING XD -SQOOP 作业失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615515/

相关文章:

java - IntelliJ - 方法引用可能会改变语义

java类实例

java - 用于复杂类交互的Java Swing设计模式

hadoop - 将多个数据库中的表导入 Hadoop 和 Union

java - 使用android相机拍照( Intent )内存不足错误

apache-spark - 与 SparkNLP 的句子相似性仅适用于带有一个句子的 Google Dataproc,当提供多个句子时失败

hadoop - Nutch 1.x:如何使用s3a代替HDFS?

Hadoop HDFS 名称节点失败

macos - 由 : java. lang.ClassNotFoundException : org. apache.hadoop.mapreduce.InputFormat 引起

hadoop - sqoop 导入无法找到 sqoop-1.4.6.jar