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" } 
} 

希望這有助於節省有人同時下沉我投資人。快樂的編碼!

相關問題