Shell 如何执行从s3加载更多脚本的EMR步骤?
我想在EMR上执行一个shell脚本,加载一个tarball,解压它并在里面运行脚本。我选择此设置是为了尽可能不依赖供应商。 我的剧本是Shell 如何执行从s3加载更多脚本的EMR步骤?,shell,amazon-web-services,amazon-s3,amazon-emr,Shell,Amazon Web Services,Amazon S3,Amazon Emr,我想在EMR上执行一个shell脚本,加载一个tarball,解压它并在里面运行脚本。我选择此设置是为了尽可能不依赖供应商。 我的剧本是 #!/bin/sh aws s3 cp s3://path_to_my_bucket/name_of.tar.gz . tar -xzf name_of.tar.gz . main_script.sh 其中,main_script.sh是tarball的一部分,还有许多其他包、脚本和配置文件 如果我在主节点上以Hadoop用户的身份运行此脚本,那么一切都会正
#!/bin/sh
aws s3 cp s3://path_to_my_bucket/name_of.tar.gz .
tar -xzf name_of.tar.gz
. main_script.sh
其中,main_script.sh
是tarball的一部分,还有许多其他包、脚本和配置文件
如果我在主节点上以Hadoop用户的身份运行此脚本,那么一切都会正常工作。作为通过添加的步骤,无论我尝试什么,都会出现错误
到目前为止我尝试的内容(以及错误):
- 按上述方式运行脚本(未找到文件“main_script.sh”)
- 将路径硬编码为Hadoop用户主目录(对
的权限被拒绝)main\u script.sh
- 动态获取脚本所在的路径(使用),并将此路径作为
选项的参数,并从此路径显式调用tar-C
(另一个对main_script.sh
的权限被拒绝)main_script.sh
作为奖励,我想知道为什么
命令runner.jar
的设置与spark步骤的设置如此不同,spark步骤作为Hadoop用户在Hadoop用户目录中运行。您可以将script-runner.jar与region一起使用
JAR位置:s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.JAR
参数:s3://your_bucket/your_shell\u script.sh
有关更多信息,请参阅下面的链接