1

我有一个简单的DataPipeline作业,它只有一个EmrActivity,只有一个步骤尝试执行我的配置单元脚本s3桶。AWS Datapipeline,运行配置单元脚本的EmrActivity步骤立即失败,'没有这样的文件或目录'

为EmrActivity的配置是这样的:

{ 
    "name" : "Extract and Transform", 
    "id" : "HiveActivity", 
    "type" : "EmrActivity", 
    "runsOn" : { "ref" : "EmrCluster" }, 
    "step" : ["command-runner.jar,/usr/share/aws/emr/scripts/hive-script --run-hive-script --args -f s3://[bucket-name-removed]/s1-tracer-hql.q -d INPUT=s3://[bucket-name-removed] -d OUTPUT=s3://[bucket-name-removed]"], 
    "runsOn" : { "ref": "EmrCluster" } 
} 

而对于相应EmrCluster资源的配置它的运行:

{ 
    "id" : "EmrCluster", 
    "type" : "EmrCluster", 
    "name" : "Hive Cluster", 
    "keyPair" : "[removed]", 
    "masterInstanceType" : "m3.xlarge", 
    "coreInstanceType" : "m3.xlarge", 
    "coreInstanceCount" : "2", 
    "coreInstanceBidPrice": "0.10", 
    "releaseLabel": "emr-4.1.0", 
    "applications": ["hive"], 
    "enableDebugging" : "true", 
    "terminateAfter": "45 Minutes" 
} 

我得到该错误消息始终是以下:

java.io.IOException: Cannot run program "/usr/share/aws/emr/scripts/hive-script --run-hive-script --args -f s3://[bucket-name-removed]/s1-tracer-hql.q -d INPUT=s3://[bucket-name-removed] -d OUTPUT=s3://[bucket-name-removed]" (in directory "."): error=2, No such file or directory 
    at com.amazonaws.emr.command.runner.ProcessRunner.exec(ProcessRunner.java:139) 
    at com.amazonaws.emr.command.runner.CommandRunner.main(CommandRunner.java:13) 
... 

主要的错误消息是“...(在目录”。“中):err或= 2,没有这样的文件或目录“。

我已登录到主节点并验证/usr/share/aws/emr/scripts/hive-script的存在。我还试着在hive-script等几个地方指定一个基于s3的位置;始终是相同的错误结果。

我可以直接在EMR中手动创建群集,看起来与我在此DataPipeline中指定的内容完全相同,步骤使用相同的"command-runner.jar,/usr/share/aws/emr/scripts/hive-script ..."命令字符串,并且工作正常。

有没有人遇到过这种情况,并可以告诉我我失踪和/或做错了什么?我已经在这一段时间了。

回答

3

经过长时间的研究和尝试错误,我能够回答我自己的问题。

有三件事情,也许4,错了我的步骤脚本:

  • 所需的“脚本runner.jar”,而不是“命令runner.jar”,因为我们正在运行一个脚本(我结束了刚刚从电子病历的libs S3上DIR拉)
  • 需要从其他地方得到“蜂巢脚本” - 所以,也到了公众EMR库目录在S3这
  • 乐趣一,感谢AWS;为步ARGS(一切“蜂巢脚本”规范后)... need to comma-separate every value in it when in DataPipeline(相对于空间分隔为你做直接在EMR一个步骤指定ARGS时)

,然后在“可能第四届“:

  • 列入我们正在使用的蜂巢脚本S3和具体的蜂巢版本的基本文件夹(我说这是在看到类似an AWS blog东西的结果,但还没有测试它是否在我的情况下有所不同,与其他一切排除)

所以,到最后,我的工作EmrActivity结束看起来像这样:

{ 
    "name" : "Extract and Transform", 
    "id" : "HiveActivity", 
    "type" : "EmrActivity", 
    "runsOn" : { "ref" : "EmrCluster" }, 
    "step" : ["s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,s3://us-east-1.elasticmapreduce/libs/hive/hive-script,--base-path,s3://us-east-1.elasticmapreduce/libs/hive/,--hive-versions,latest,--run-hive-script,--args,-f,s3://[bucket-name-removed]/s1-tracer-hql.q,-d,INPUT=s3://[bucket-name-removed],-d,OUTPUT=s3://[bucket-name-removed],-d,LIBS=s3://[bucket-name-removed]"], 
    "runsOn" : { "ref": "EmrCluster" } 
} 

希望这有助于节省有人同时下沉我投资人。快乐的编码!

相关问题