簡體   English   中英

AWS Glue 通過 Boto3 傳遞參數導致異常

[英]AWS Glue Passing Parameters via Boto3 causing exception

對於我的生活,我無法弄清楚這里發生了什么。

我正在通過 Boto3 開始膠水作業(來自 Lambda,但在本地測試會給出完全相同的問題),當我通過“開始作業運行”api 傳遞參數時,我得到了同樣的錯誤,但查看日志參數看起來都是正確的. 這是 output (我已經更改了存儲桶的一些名稱等)

膠水代碼(示例):

def main():
    args = getResolvedOptions(sys.argv, [
        'JOB_NAME',
        's3_bucket',
        's3_temp_prefix',
        's3_schema_prefix',
        's3_processed_prefix',
        'ingestion_run_id'
    ]
                              )

    sc = SparkContext()
    glueContext = GlueContext(sc)
    logger = glueContext.get_logger()
    job = Job(glueContext)
    job.init(args['JOB_NAME'], args)

    s3_client = boto3.client('s3')
    s3_bucket = args['s3_bucket']
    temp_prefix = args['s3_temp_prefix']
    schema_prefix = args['s3_schema_prefix']
    processed_prefix = args['s3_processed_prefix']
    ingestion_run_id = args['ingestion_run_id']

    logger.info(f's3_bucket: {s3_bucket}')
    logger.info(f'temp_prefix {temp_prefix}')
    logger.info(f'schema_prefix: {schema_prefix}')
    logger.info(f'processed_prefix: {processed_prefix}')
    logger.info(f'ingestion_run_id: {ingestion_run_id}')

制作膠水作業的 SAM 模板:

  CreateDataset:
    Type: AWS::Glue::Job
    Properties:
      Command:
        Name: glueetl
        PythonVersion: 3
        ScriptLocation: !Sub "s3://bucket-name/GLUE/create_dataset.py"
      DefaultArguments:
        "--extra-py-files": "s3://bucket-name/GLUE/S3GetKeys.py"
        "--enable-continuous-cloudwatch-log": ""
        "--enable-metrics": ""
      GlueVersion: 2.0
      MaxRetries: 0
      Role: !GetAtt GlueRole.Arn
      Timeout: 360
      WorkerType: Standard
      NumberOfWorkers: 15

嘗試啟動 Glue 作業的代碼:

import boto3

session = boto3.session.Session(profile_name='glue_admin', region_name=region)
client = session.client('glue')

name = 'CreateDataset-1uPuNfIw1Tjd'

args = {
    "--s3_bucket": 'bucket-name',
    "--s3_temp_prefix": 'TEMP',
    "--s3_schema_prefix": 'SCHEMA',
    "--s3_processed_prefix": 'PROCESSED',
    "--ingestion_run_id": 'FakeRun'
}

client.start_job_run(JobName=name, Arguments=args)

這開始了工作,然后腳本錯誤,這是留下的日志,從我所見,參數似乎排列得很好?

Wed Feb 10 09:16:00 UTC 2021/usr/bin/java -cp /opt/amazon/conf:/opt/amazon/lib/hadoop-lzo/*:/opt/amazon/lib/emrfs-lib/*:/opt/amazon/spark/jars/*:/opt/amazon/superjar/*:/opt/amazon/lib/*:/opt/amazon/Scala2.11/* com.amazonaws.services.glue.PrepareLaunch --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.dynamicAllocation.minExecutors=1 --conf spark.dynamicAllocation.maxExecutors=29 --conf spark.executor.memory=5g --conf spark.executor.cores=4 --conf spark.driver.memory=5g --JOB_ID j_76c49a0d580594d5c0f584458cc0c9d519 --enable-metrics --extra-py-files s3://bucket-name/GLUE/S3GetKeys.py --JOB_RUN_ID jr_c0b9049abf1ee1161de189a901dd4be05694c1c42863 --s3_schema_prefix SCHEMA --enable-continuous-cloudwatch-log --s3_bucket bucket-name --scriptLocation s3://bucket-name/GLUE/create_dataset.py --s3_temp_prefix TEMP --ingestion_run_id FakeRun --s3_processed_prefix PROCESSED --JOB_NAME CreateDataset-1uPuNfIw1Tjd

此帖子的存儲桶名稱已更改,但完全匹配。

Glue JOb 日志中的故障點:

java.lang.IllegalArgumentException: For input string: "--s3_bucket"

存儲桶名稱沒有非法字符,但里面有“-”?

提前感謝您的幫助。

發生這種情況是因為--enable-continuous-cloudwatch-log參數需要一個值,並且由於您沒有提供值,因此參數解析器假定下一個參數是它的值( --enable-continuous-cloudwatch-log --s3_bucket ),在這種情況下是--s3_bucket ,現在--s3_bucket--enable-continuous-cloudwatch-log選項的無效值,因此會發生該錯誤。

暫無
暫無

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

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