2014-04-08 46 views
2

我開始用下面的命令行的彈性MapReduce集羣:如何知道工作流ID,在腳本其他羣集參數通過腳本的運行runner.jar

$ elastic-mapreduce \ 
--create \ 
--num-instances "${INSTANCES}" \ 
--instance-type m1.medium \ 
--ami-version 3.0.4 \ 
--name "${CLUSTER_NAME}" \ 
--log-uri "s3://my-bucket/elasticmapreduce/logs" \ 
--step-name "${STEP_NAME}" \ 
--step-action TERMINATE_JOB_FLOW \ 
--jar s3://elasticmapreduce/libs/script-runner/script-runner.jar \ 
--arg s3://my-bucket/log-parser/code/hadoop-script.sh \ 
--arg "${CLUSTER_NAME}" \ 
--arg "${STEP_NAME}" \ 
--arg s3n://my-bucket/log-parser/input \ 
--arg s3n://my-bucket/log-parser/output 

我想能夠從hadoop-script.sh發送包含日誌文件的電子郵件,但是這些郵件寫入s3:// my-bucket/elasticmapreduce/logs/{JOB_FLOW_ID}。有沒有辦法知道我的shell腳本中的JOB_FLOW_ID?

另外:有沒有辦法知道jobflow的名字,step-name? (目前,我將它們作爲參數,但感覺哈克)

回答

1

而不是使用一個shell腳本,你可以使用一個Ruby腳本:

#!/usr/bin/ruby 

require 'json' 
require 'emr/common' 

job_flow = Emr::JsonInfoFile.new('job-flow') 
job_flow_id = job_flow['jobFlowId'] 

您也可以在工作步驟的信息,例如:

step_one = Emr::JsonInfoFile.new('steps/1') 
state = step_one['state'] 

或實例信息:

instance_info = Emr::JsonInfoFile.new('instance') 
is_master = instance_info['isMaster'] 

基本上,一切都在/mnt/var/lib/info/目錄可通過此界面使用。

相關問題