java-通过scala.sys.process API在spark-scala中执行外部命令s3-dist-cp
2020-01-11 18:22
190 查看
当我在unix shell / terminal中运行所有这3个命令时,它们都工作正常,返回退出状态为0
[code]unix_shell> ls -la unix_shell> hadoop fs -ls /user/hadoop/temp unix_shell> s3-dist-cp --src ./abc.txt --dest s3://bucket/folder/
现在我试图通过scala process api作为外部进程运行这些相同的命令,示例代码如下:
[code]import scala.sys.process._ val cmd_1 = "ls -la" val cmd_2 = "hadoop fs -ls /user/hadoop/temp/" val cmd_3 = "/usr/bin/s3-dist-cp --src /tmp/sample.txt --dest s3://bucket/folder/" val cmd_4 = "s3-dist-cp --src /tmp/sample.txt --dest s3://bucket/folder/" val exitCode_1 = (stringToProcess(cmd_1)).! // works fine and produces result val exitCode_2 = (stringToProcess(cmd_2)).! // works fine and produces result val exitCode_3 = (stringToProcess(cmd_3)).! // **it just hangs, yielding nothing** val exitCode_4 = (stringToProcess(cmd_4)).! // **it just hangs, yielding nothing**
以上cmd_3和cmd_4之间的区别只是绝对路径.
我正在如下所示的spark-submit脚本中显式传递相关的依赖项
[code]--jars hdfs:///user/hadoop/s3-dist-cp.jar
您的意见/建议将有所帮助.谢谢 !
最佳答案
好像您所做的事情是对的.请参阅此处
https://github.com/gorros/spark-scala-tips/blob/master/README.md
[code]import scala.sys.process._ def s3distCp(src: String, dest: String): Unit = { s"s3-dist-cp --src $src --dest $dest".! }
请检查此注释…我不知道您是否遇到这种情况.
关于您的–jars /usr/lib/hadoop/client/*.jar
您可以使用tr命令(如this. see my answer)附加与s3-dist-cp相关的jars
[code]--jars $(echo /dir_of_jars/*.jar | tr ' ' ',')
注意:要使用此方法,您需要添加Hadoop应用程序,并且需要在客户端或本地模式下运行Spark,因为s3-dist-cp在从属节点上不可用.如果要在群集模式下运行,请在引导过程中将s3-dist-cp命令复制到从属服务器.
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java Process Class : Java 执行外部程序及命令 .
- Java Process Class : Java 执行外部程序及命令
- Java Process Class : Java 执行外部程序及命令
- 用java执行外部命令
- Bat文件执行java命令,报:javac不是内部或外部命令,也不是可运行的程序或批处理文件
- 通过STAF Process Service调用Powershell执行命令或脚本
- java程序执行外部命令
- 纯Java通过SSH执行Linux命令的方法及代码
- 通过API执行AutoCAD命令来…
- Java中的Process,执行一个命令
- Java通过python命令执行DataX任务
- 通过Scala Process执行Shell脚本且收集返回的结果
- java通过telnet执行命令
- 在Java中执行脚本命令以及调用外部程序说明
- Java小白经验, Javac 执行失败,非内部或外部命令.....
- Java外部执行操作系统命令(Java 创建本地系统进程)
- java通过代码登录远程linux服务器并执行linux命令
- spark2.x由浅入深深到底系列六之RDD java api调用scala api的原理
- Spark scala和java的api使用
- Java通过python命令执行DataX任务的实例