AWS Glue 첫 경험 - 섹션 3 - 논증 및 기록

도전 3: 매개 변수 및 구성


AWS Glue 어플리케이션은 거의 모든 어플리케이션에 대해 특정 구성 또는 매개변수가 필요합니다.
저희 코드는 3개의 다른 환경(계정)에서 실행되어야 합니다. DEV, TEST, PROD, 로그 레벨, SNS 테마(상태 업데이트용) 등입니다.
문서에 언급된 special parameters 그러나 이것은 당신이 기대하는 모든 논거가 아닙니다.우리는 이 절 뒤에서 이 점을 탐구할 것이다.
내가 한 프로젝트에 종사하는 동안, 단지 한 조DefaultArguments만이 작업이 시작되기 전에 덮어쓸 수 있다.본문을 작성할 때 현재 두 그룹DefaultArgumentsNonOverridableArguments이 있는데 후자는 최근에 추가된 것이다.
일부 매개변수는 SSM 매개변수로 제공되고 다른 매개변수는 DefaultArguments로 커밋됩니다.작업이 실패하면 매우 유용할 수 있습니다. 기본값 WARN 과 비기본값 DEBUG 과 같은 다른 로그 레벨을 사용하여 작업을 다시 실행하기를 원합니다.
작업이 실행되기 전에 매개 변수를 추가하거나 변경하려면 컨트롤러를 사용하십시오Security configuration, script libraries, and job parameters -> Job parameters AWS 풀 작업 매개변수
또는 CLI/API를 사용할 때 매개변수를 DefaultArguments 섹션에 추가합니다.
그리고 작업 코드에서 aws-glue-libgetResolvedOptionsargparse에서 제공하는 내장 awsglue.utils.getResolvedOptions 모듈이나 기능을 사용할 수 있습니다.
내가 여정을 시작할 때, 함수 getResolvedOptions 는 Python Shell 작업에 적용되지 않았고, 이 대상은 작업에 필요한 설정을 저장하는 설정 대상을 만들 계획이다.나중에 실시했어요.
PySpark 작업 중getResolvedOptions과 Python Shell 작업 중awsglue의 실현 사이에 차이가 있다.
PySpark 작업에서 사용되는 awsglue 코드는 aws-glue-lib 저장소의 GitHub에 있습니다.주요 차이점은 PySpark 작업 처리reserved arguments의 일부 상황에 있다
Python Shell 작업에 사용되는 코드는 다음과 같습니다.

이 함수의 주요 문제는 모든 것이 필요하다는 것이다awsglue.매개 변수 앞에서 사용해야 한다는 것을 감안하면DefaultArguments(이중 대시 부호), 이것은 상당히 서투르다. 보통 선택할 수 있는 매개 변수에 사용된다


this StackOverflow answer의 건의에 따라 이 함수를 포장하면 선택할 수 있는 매개 변수this를 다시 실현할 수 있습니다.그러나 AWS 팀이 이 문제를 해결하기로 결정하면 중단될 수 있는 해결 방법입니다


또한 컨트롤러를 통해 -- 를 지정할 때 DefaultArguments 를 포함하지 않으면 더욱 자연스러운 느낌이 듭니다. 왜냐하면 UI에서 이 점을 언급하지 않았기 때문입니다


sys에 매개 변수가 없습니다.argv


나의 최초의 몇 가지 작업은 단지 PySpark를 사용했을 뿐이다. 나는 -- 중 일부 추가 파라미터가 발견되었다. 이 파라미터들은 의 예시에서 사용되었지만 설명되지 않았다.이러한 논점에 대한 설명을 얻기 위해서, 우리는 AWS Glue API docs 페이지를 방문해야 한다. 이 페이지는 약간 숨겨져 있다. 왜냐하면 개발자 안내서에서 직접 링크가 그곳을 가리키기 때문이다.p>

다음은 PySpark 작업(Glue 1.0)의 sys.argv 매개 변수



[
  'script_2020-06-24-07-06-36.py',
  '--JOB_NAME', 'my-pyspark-job',
  '--JOB_ID', 'j_dfbe1590b8a1429eb16a4a7883c0a99f1a47470d8d32531619babc5e283dffa7',
  '--JOB_RUN_ID', 'jr_59e400f5f1e77c8d600de86c2c86cefab9e66d8d64d3ae937169d766d3edce52',
  '--job-bookmark-option', 'job-bookmark-disable',
  '--TempDir', 's3://aws-glue-temporary-<accountID>-us-east-1/admin'
]

매개 변수sys.argv, JOB_NAME, JOB_ID는 작업 내부의 자체 참고에 사용할 수 있으며, 하드코딩 코드의 JOB_RUN_ID


는 자체 설정이나 어떤 상태 관리에 매우 유용한 기능일 수 있습니다.예를 들어 JOB_NAME 클라이언트가 작업에 접근하는 연결을 사용하고 코드에서 사용할 수 있습니다.코드에 직접 연결 이름을 지정하지 않습니다.또는 작업이 워크플로에서 트리거된 경우 현재 워크플로와 해당 속성을 참조할 수 있습니다


파이썬 셸 작업boto3
탐색해 봅시다.



[
  '/tmp/glue-python-scripts-7pbpva1h/my_pyshell_job.py',
  '--job-bookmark-option', 'job-bookmark-disable',
  '--scriptLocation', 's3://aws-glue-scripts-133919474178-us-east-1/my_pyshell_job.py',
  '--job-language', 'python'
]

위에서 볼 수 있듯이 Python Shell 작업에서 set 매개 변수를 사용할 수 있습니다


이러한 매개 변수는 PySparkjob의 매개 변수와 약간 다르지만 주요 문제는 매개 변수sys.argv,JOB_NAME,JOB_ID를 사용할 수 없다는 것이다


이것은 매우 일치하지 않는 개발자 체험을 생성하고 작업 내부의 자체 인용을 막아 이러한 매개 변수의 잠재력을 낮춘다


도전 4: 로깅


내가 이미 언급한 바와 같이 AWS 풀 작업 로그는 AWS CloudWatch 로그로 전송됩니다


작업마다 두 개의 로그 그룹이 있습니다.JOB_RUN_ID,/aws-glue/python-jobs/outputstdout/aws-glue/python-jobs/error를 포함한다.로그 그룹에서 stderr 라는 작업의 로그 흐름을 찾을 수 있습니다. 예를 들어 JOB_RUN_ID


작업이 시작되었을 때 특정 로그로 이동할 수 있도록 2개의 링크가 있습니다


aws 컨트롤러의 전시


링크가 있어도 작업이 시작되기 전에 로그 흐름을 만들지 않습니다


작업에서 로그 기록을 사용할 때, 로그 흐름을 /aws-glue/python-jobs/output/jr_3c9c24f19d1d2d5f9114061b13d4e5c97881577c26bfc45b99089f2e1abe13cc 로 기록하거나 stderr 로 다시 지정하는 것을 피하려고 할 수 있습니다. 왜냐하면 stdout 로그 흐름은 작업이 실패했을 때만 생성되기 때문입니다.


Glue 1.0 PySpark 작업 로그는 매우 지루하고 코드와 무관한'난잡함'을 대량으로 포함하고 있다.이런 혼란은 스파크의 밑바닥 서비스에서 나온다.Glue 2.0은 이 문제를 해결했습니다. Glue 2.0에서 관련 서비스가 없는 로그에 대한 노출이 가장 적기 때문에 로그에 쉽게 집중할 수 있습니다.AWS 팀 잘했어


Python Shell 작업은 이러한 상황의 영향을 받지 않습니다. 당신은 당신이 기록한 내용을 정확하게 얻을 수 있습니다


이것이 바로 설정과 로그 기록입니다.다음 회에서 우리는 포장과 배치를 연구할 것이다


본문에서 예시된 코드는 GitHub 저장소aws-glue-monorepo-style에서 찾을 수 있습니다

좋은 웹페이지 즐겨찾기