在 Amazon EMR叢集上執行命令和指令碼 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 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其中 <region>是 Amazon EMR叢集所在的區域。您可以使用 script-runner.jar,來執行儲存在本機或叢集的 Amazon S3 上的指令碼。當您提交步驟script-runner.jar時,必須指定 URI的完整。

提交自訂JAR步驟以執行指令碼或命令

下列 AWS CLI 範例說明 Amazon script-runner.jarcommand-runner.jar和 的一些常見使用案例EMR。

範例 :使用 command-runner.jar 在叢集上執行命令

使用 command-runner.jar 時,您可以在步驟的引數清單中指定命令、選項和值。

下列 AWS CLI 範例會將步驟提交至叫用 的執行中叢集command-runner.jarArgs 清單中的指定命令會下載名為 的指令碼 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 cp s3://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-submithadoop-streaming 等工具將工作提交至叢集。使用 command-runner.jar 啟動應用程式時,您可以指定 CUSTOM_JAR 作為步驟類型,而不是使用 SPARKSTREAMINGPIG 之類的值。工具可用性視您在叢集上安裝的應用程式而異。

下列範例命令使用 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)