在 EMR AWS 上执行 shell 脚本作为步骤之一

在 EMR AWS 上执行 shell 脚本作为步骤之一

我们正在考虑将 Hadoop 基础设施从数据中心迁移到 AWS EMR。由于 ETL 流程中的某些任务/阶段相互依赖,例如流程如下

  1. Map Reduce作业将生成数据
  2. Shell脚本会将步骤1中生成的数据移动到输出位置

在 EMR 中,我们可以找到 Custom Jar、Pig、Hive 的步骤,但没有找到执行 shell 脚本的选项。我们必须克服这个问题的几个选项是:

  • 我们可以在java程序中编写shell脚本逻辑,并添加自定义jar步骤。
  • 引导操作。但由于我们的要求是在步骤 1 完成后执行 shell 脚本,所以我不确定它是否有用。

与其重新发明轮子,如果有任何其他可从 EMR 或 AWS 直接获得的选项能够满足我们的要求,那么我们的工作量就会减少。

答案1

请参考链接: http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-script.html

aws emr create-cluster --name "Test cluster" –-release-label  --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/script-path/my_script.sh"]

答案2

为了通过步骤运行 shell 脚本,我们仍然可以使用 command-runner.jar 并将绝对路径传递给脚本,如下所示:

**JAR location** : command-runner.jar
**Arguments** : bash /home/hadoop/script_name.sh or bash /path_to_script/script_name.sh

{
  'Name': 'run_script',
  'ActionOnFailure': 'CANCEL_AND_WAIT',
  'HadoopJarStep': {
     'Jar': 'command-runner.jar',
     'Args': [
           "bash","/home/hadoop/script_name.sh"
     ]
}

相关内容