繁体   English   中英

如何在 EMR 上运行的 Bash 脚本中“获取”另一个文件

[英]How to 'source' another file in a Bash script run on EMR

在 AWS EMR 中运行一个步骤以在 bash 脚本中“获取”另一个文件时,有没有办法?

例如,这是一个脚本,我们称它为“run.sh”:

#!/bin/sh
source $1
echo $VAR1" "$VAR2
exit0

然后有另一个文件,称之为“parms.sh”:

VAR1=this
VAR2=that

然后从 AWS EMR 步骤运行:

aws emr add-steps \
--cluster-id 123 \
--steps Type=CUSTOM_JAR,\
Name="Script Test",\
ActionOnFailure=CONTINUE,\
Jar=s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,\
Args=[s3://mybucket/run.sh,"s3://mybucket/parms.sh"]

一旦遇到“源”语句,此错误就会退出。 我认为由于某种原因它不能从 S3“获取”?

所以从 S3 采购是行不通的,我认为这在某种程度上是有道理的。 仔细查看 EMR 文档,似乎解决方案是将这两个文件复制到集群上的某个位置,作为步骤的一部分,然后执行:

aws emr add-steps \
--cluster-id 123 \
--steps Type=CUSTOM_JAR,\
Name="Script Test",\
ActionOnFailure=CONTINUE,\
Jar=s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,\
Args=[/usr/bin/bash,-c,"aws s3 cp s3://mybucket/run.sh /home/hadoop; \
aws s3 cp s3://mybucket/parms.sh /home/hadoop; 
/usr/bin/chmod u+x /home/hadoop/run.sh; \
/usr/bin/chmod u+x /home/hadoop/parms.sh; \
cd /home/hadoop; 
./run.sh ./parms.sh"] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM