2015-12-07 111 views
0

我想在EMR作業中使用EBS快照。由於映射器從快照中讀取,我想要在每個節點上安裝快照。除登錄到每個節點之外,是否有一種簡單的方法可以做到這一點?我想我可以讓我的mapreduce作業的第一步掛載它,但這似乎是錯誤的。有沒有更簡單的方法來做到這一點?將相同的EBS快照附加到每個EMR捲上?

回答

1

這是可能的,但你將不得不跳過一些箍來讓它工作。假設您有配方在shell腳本中通過EBS快照創建EBS卷。 EMR提供引導操作,它們只是您可以創建和運行的shell腳本。引導程序操作在任何作業(EMR中的步驟)被允許運行之前運行。

這裏有您需要在您的shell腳本的步驟執行:

  1. 創建基於快照新的EBS卷。 aws二進制文件安裝在所有EMR實例上,所以這是您的最佳選擇。假設你知道快照ID,這應該是簡單的: http://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html
    • 請務必包括DeleteOnTermination附件。
    • 您將需要解析響應以獲取EBS卷標識。
  2. 附上您剛剛創建的體積(使用EBS卷ID)當前實例: http://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html

爲了得到當前實例ID,使用元數據服務:

wget -q -O - http://instance-data/latest/meta-data/instance-id 

一旦獲得了shell腳本,就需要將其上傳到S3,然後將該腳本作爲引導操作添加到羣集中: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html

另外要小心,您將爲您創建的每個EBS卷收費,因此請確保在終止邏輯上的刪除已正確設置!

+0

謝謝。我還與AWS技術支持部門討論了這一點,他們說正確的做法是使用引導程序代碼在創建節點時在每個節點上運行相同的腳本。 – vy32