本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon EMR叢集上執行命令和指令碼
本主題涵蓋如何作為步驟在叢集上執行命令或指令碼。作為步驟執行命令或指令碼是將工作提交至叢集的多種方法之一,在以下情況下非常有用:
-
當您無法存取 SSH Amazon EMR叢集時
-
當您想要執行 bash 或 shell 命令對叢集進行疑難排解時
在建立叢集時,或在您的叢集處於 WAITING
狀態時,您可以執行指令碼。若要在步驟處理開始前執行指令碼,請改用引導操作。如需引導動作的詳細資訊,請參閱 Amazon EMR管理指南 中的建立引導動作以安裝其他軟體。
Amazon EMR提供下列工具,協助您執行指令碼、命令和其他叢集上程式。您可以使用 Amazon EMR管理主控台或 叫用這兩種工具 AWS CLI。
command-runner.jar
-
位於叢集EMRAMI的 Amazon 上。您可以使用
command-runner.jar
在叢集上執行命令。您可以指定command-runner.jar
而不使用其完整路徑。 script-runner.jar
-
在 Amazon S3 上託管,
s3://
其中<region>
.elasticmapreduce/libs/script-runner/script-runner.jar
是 Amazon EMR叢集所在的區域。您可以使用<region>
script-runner.jar
,來執行儲存在本機或叢集的 Amazon S3 上的指令碼。當您提交步驟script-runner.jar
時,必須指定 URI的完整。
提交自訂JAR步驟以執行指令碼或命令
下列 AWS CLI 範例說明 Amazon script-runner.jar
上 command-runner.jar
和 的一些常見使用案例EMR。
範例 :使用 command-runner.jar
在叢集上執行命令
使用 command-runner.jar
時,您可以在步驟的引數清單中指定命令、選項和值。
下列 AWS CLI 範例會將步驟提交至叫用 的執行中叢集command-runner.jar
。Args
清單中的指定命令會下載名為 的指令碼 my-script.sh
從 Amazon S3 到 hasoop 使用者主目錄。命令接著會修改指令碼的許可並執行 my-script.sh
.
使用 時 AWS CLI,Args
清單中的項目應該以逗號分隔,且清單元素之間沒有空格。例如,Args=[example-command,example-option,"example option value"]
,而不是 Args=[example-command, example-option, "example option
value"]
。
aws emr add-steps \ --cluster-id
j-2AXXXXXXGAPLF
\ --steps Type=CUSTOM_JAR,Name="Download a script from S3, change its permissions, and run it",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[bash,-c,"aws s3 cps3://EXAMPLE-DOC-BUCKET/my-script.sh
/home/hadoop; chmod u+x /home/hadoop/my-script.sh; cd /home/hadoop; ./my-script.sh"]
範例 :使用 script-runner.jar
在叢集上執行指令碼
使用 script-runner.jar
時,您可以在步驟的引數清單中指定要執行的指令碼。
下列 AWS CLI 範例會將步驟提交至叫用 的執行中叢集script-runner.jar
。在此情況下,稱為 的指令碼 my-script.sh
存放在 Amazon S3 上。您還可以指定儲存在叢集主節點上的本機指令碼。
aws emr add-steps \ --cluster-id
j-2AXXXXXXGAPLF
\ --steps Type=CUSTOM_JAR,Name="Run a script from S3 with script-runner.jar",ActionOnFailure=CONTINUE,Jar=s3://us-west-2
.elasticmapreduce/libs/script-runner/script-runner.jar,Args=[s3://EXAMPLE-DOC-BUCKET/my-script.sh
]
其他使用 command-runner.jar
的方式
您還可以使用 command-runner.jar
透過 spark-submit
或 hadoop-streaming
等工具將工作提交至叢集。使用 command-runner.jar
啟動應用程式時,您可以指定 CUSTOM_JAR
作為步驟類型,而不是使用 SPARK
、STREAMING
或 PIG
之類的值。工具可用性視您在叢集上安裝的應用程式而異。
下列範例命令使用 command-runner.jar
透過 spark-submit
提交步驟。Args
清單會指定 spark-submit
作為命令,後面接著 URI Spark 應用程式的 Amazon S3 my-app.py
引數和值。
aws emr add-steps \ --cluster-id
j-2AXXXXXXGAPLF
\ --steps Type=CUSTOM_JAR,Name="Run spark-submit using command-runner.jar",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[spark-submit,S3://amzn-s3-demo-bucket/my-app.py
,ArgName1
,ArgValue1
,ArgName2
,ArgValue2
]
下表識別您可以使用 command-runner.jar
執行的其他工具。
工具名稱 | 描述 |
---|---|
hadoop-streaming |
提交 Hadoop 串流程式。在主控台和某些 中SDKs,這是串流步驟。 |
hive-script |
執行 Hive 指令碼。在主控台和 中SDKs,這是 Hive 步驟。 |
pig-script |
執行 Pig 指令碼。在主控台和 中SDKs,這是 Pig 步驟。 |
spark-submit |
執行 Spark 應用程式。在主控台中,此屬一個 Spark 步驟。 |
hadoop-lzo |
在目錄上執行 Hadoop LZO索引器 |
s3-dist-cp |
將大量資料從 Amazon S3 分發到 HDFS。如需詳細資訊,請參閱S3DistCp (s3-dist-cp)。 |