簡體   English   中英

如何使用 EMR Serverless 在 spark JOB 中傳遞 Arguments (EntryPointArguments)?

[英]How to Pass Arguments (EntryPointArguments) in spark JOB using EMR Serverless?

**我試圖通過 boto3(emr-serverless 客戶端)EntryPointArguments 的參數傳遞一些 arguments 來運行我的 pyspark 腳本,但是,它根本不起作用,我想知道我是否正在這樣做正確的方法。 **

**my python code is like this:**
`

import argparse


parser = argparse.ArgumentParser()

parser.add_argument('-env', nargs='?', metavar='Environment', type=str,
                help='String: Environment to run. Options: [dev, prd]',
                choices=['dev', 'prd'],
                required=True,
                default="prd")

# Capture args
args = parser.parse_args()
env = args.env

print(f"HELLO WOLRD FROM {env}")`
**and my script that runs emr-serverless looks like this:**
jobDriver={
        "sparkSubmit": {
            "entryPoint": "s3://example-bucket-us-east-1-codes-prd/hello_world.py",
            "entryPointArguments": ["-env prd"],
            "sparkSubmitParameters": 
                "--conf spark.executor.cores=2 \
                 --conf spark.executor.memory=4g \
                 --conf spark.driver.cores=2 \
                 --conf spark.driver.memory=8g \
                 --conf spark.executor.instances=1 \
                 --conf spark.dynamicAllocation.maxExecutors=12 \
                ",
        }
**I've already tried putting single quotes, double quotes, I've tried to pass along these parameters in the "sparkSubmitParameters" and so far, nothing works, there aren't many examples of how to do this on the internet, so my hope is that someone has already done it, and achieved, thank you!**

我正在測試它,最后我弄清楚了如何做到這一點。 據我了解,當它是這樣的參數時:

-env prd

您必須像這樣傳遞 EntryPointArguments:

["-env", "prd"]

分離 arg,然后分別傳遞值。

要將一些參數傳遞給應用程序,應該在名為 entryPointArguments 的命令的 sparkSubmit 部分指定一個配置。

下面我為 EMR 無服務器應用程序粘貼了一個完整的 AWS CLI 命令以運行作業,將名為 arguments 傳遞到包含 pySpark 代碼的 python 腳本中。 Spark Submit 部分命令中的附加參數允許將包 (utilities.zip) 和 jar 文件 (JDBC_Driver.jar) 傳遞給 Spark 執行器,以允許應用程序使用它。 --execution-role-arn 值應來自 IAM,--application-id 是將運行作業的 EMR 無服務器應用程序(必須事先創建)。

aws emr-serverless start-job-run --execution-role-arn arn:aws:iam::123456:role/RoleName \
 --application-id 1234567 --job-driver \
'{
  "sparkSubmit": {
    "entryPoint": "s3://MyS3Bucket/dir/pyspark/spark_app.py",
    "entryPointArguments": [
      "--s3",
      "MyS3Bucket",
      "--prefix",
      "dir/pyspark",
      "--env",
      "dev"
    ],
    "sparkSubmitParameters": "--conf spark.submit.pyFiles=s3://MyS3Bucket/dir/pyspark/utilities.zip, --jars s3://MyS3Bucket/dir/drivers/JDBC_Driver.jar"
  }
}' \
--configuration-overrides \
'{
  "monitoringConfiguration": {
    "s3MonitoringConfiguration": {
      "logUri": "s3://MyS3Bucket/logs/"
    }
  }
}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM