AWS Glue에서 Python 쉘 작업에 대한 작업 속성 구성
AWS Glue에서 Python 셸 작업을 사용하여 Python 스크립트를 셸로 실행할 수 있습니다. Python 쉘 작업을 사용하면 Python 3.6 또는 Python 3.9와 호환되는 스크립트를 실행할 수 있습니다.
주제
제한 사항
Python 셸 작업의 다음 제한 사항에 유의합니다.
-
Python 셸 작업에는 작업 북마크를 사용할 수 없습니다.
-
Python 3.9 이상에서는 어떤 Python 라이브러리도
.egg
파일로 패키징할 수 없습니다. 대신.whl
를 사용합니다. S3 데이터의 임시 복사본에 대한 제한 사항 때문에 이
--extra-files
옵션을 사용할 수 없습니다.
Python 셸 작업에 대한 작업 속성 정의
이 섹션에서는 AWS Glue Studio에서 또는 AWS CLI를 사용하여 작업 속성을 정의하는 것을 설명합니다.
AWS Glue Studio
AWS Glue Studio에서 Python 셸 작업을 정의할 때 다음 속성 중 일부를 입력합니다.
- IAM 역할
-
사용된 리소스에 대한 권한 부여에 사용되는 AWS Identity and Access Management(IAM) 역할을 지정하여 작업을 실행하고 데이터 스토어에 액세스합니다. AWS Glue 작업을 실행하는 권한에 대한 자세한 내용은 AWS Glue의 Identity and Access Management 단원을 참조하십시오.
- 유형
-
Python shell(Python 셸)을 선택하여
pythonshell
작업 명령으로 Python 스크립트를 실행합니다. - Python 버전
-
Python 버전을 선택합니다. 기본값은 Python 3.9입니다. 유효한 버전은 Python 3.6과 Python 3.9입니다.
- 공통 분석 라이브러리 로드(권장)
-
Python 셸에 Python 3.9용 공통 라이브러리를 포함하려면 이 옵션을 선택합니다.
라이브러리가 사용자 지정 라이브러리이거나 사전 설치된 라이브러리와 충돌하는 경우 공통 라이브러리를 설치하지 않을 수 있습니다. 하지만 공통 라이브러리 외에 추가 라이브러리를 설치할 수 있습니다.
이 옵션을 선택하는 경우
library-set
옵션이analytics
로 설정됩니다. 이 옵션을 선택 취소하는 경우library-set
옵션이none
으로 설정됩니다. - 스크립트 파일 이름 및 스크립트 경로
-
스크립트의 코드는 작업 절차 논리를 정의합니다. Amazon Simple Storage Service(Amazon S3)에서 스크립트 이름과 위치를 제공합니다. 경로의 스크립트 디렉터리와 동일한 이름의 파일이 없다는 것을 확인합니다. 스크립트 사용에 대한 자세한 내용은 AWS Glue 프로그래밍 안내서 단원을 참조하십시오.
- Script
-
스크립트의 코드는 작업 절차 논리를 정의합니다. Python 3.6 또는 Python 3.9에서 스크립트를 코딩할 수 있습니다. AWS Glue Studio에서 스크립트를 편집할 수 있습니다.
- 데이터 처리 단위
-
이 작업이 실행될 때 할당할 수 있는 AWS Glue 데이터 처리 단위(DPU)의 최대 수입니다. DPU는 4 vCPU의 컴퓨팅 파워와 16GB 메모리로 구성된 프로세싱 파워의 상대적 측정값입니다. 자세한 내용은 AWS Glue 요금
을 참조하십시오. 값을 0.0625 또는 1로 설정할 수 있습니다. 기본값은 0.0625입니다. 어느 경우든 인스턴스의 로컬 디스크는 20GB가 됩니다.
CLI
다음 예와 같이 AWS CLI를 사용하여 [Python 셸(Python shell)] 작업을 생성할 수도 있습니다.
aws glue create-job --name python-job-cli --role Glue_DefaultRole --command '{"Name" : "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --max-capacity 0.0625
참고
--glue-version
파라미터는 AWS Glue 쉘 작업에 적용되지 않으므로 AWS Glue 버전을 지정할 필요가 없습니다. 지정된 버전은 모두 무시됩니다.
AWS CLI를 사용하여 생성된 작업은 Python 3으로 기본 설정됩니다. 유효한 Python 버전은 3(3.6에 해당)과 3.9입니다. Python 3.6을 지정하려면 이 튜플을 --command
파라미터 "PythonVersion":"3"
에 추가합니다.
Python 3.9를 지정하려면 이 튜플을 --command
파라미터 "PythonVersion":"3.9"
에 추가합니다.
Python 셸 작업에서 사용하는 최대 용량을 설정하려면 --max-capacity
파라미터를 제공합니다. Python 셸 작업에서 --allocated-capacity
파라미터는 사용할 수 없습니다.
Python 셸 작업에 지원되는 라이브러리
Python 3.9를 사용하는 Python 셸에서 필요에 따라 사전 패키징된 라이브러리 세트를 사용하도록 라이브러리 세트를 선택할 수 있습니다. library-set
옵션을 사용하여 라이브러리 세트를 선택할 수 있습니다. 유효한 값은 analytics
및 none
입니다.
Python 셸 작업의 실행 환경은 다음 라이브러리를 지원합니다.
Python 버전 | Python 3.6 | Python 3.9 | |
---|---|---|---|
라이브러리 세트 | 해당 사항 없음 | 분석 | none |
avro | 1.11.0 | ||
awscli | 116.242 | 1.23.5 | 1.23.5 |
awswrangler | 2.15.1 | ||
botocore | 1.12.232 | 1.24.21 | 1.23.5 |
boto3 | 1.9.203 | 1.21.21 | |
elasticsearch | 8.2.0 | ||
numpy | 1.16.2 | 1.22.3 | |
pandas | 0.24.2 | 1.4.2 | |
psycopg2 | 2.9.3 | ||
pyathena | 2.5.3 | ||
PyGreSQL | 5.0.6 | ||
PyMySQL | 1.0.2 | ||
pyodbc | 4.0.32 | ||
pyorc | 0.6.0 | ||
redshift-connector | 2.0.907 | ||
요청 | 2.22.0 | 2.27.1 | |
scikit-learn | 0.20.3 | 1.0.2 | |
scipy | 1.2.1 | 1.8.0 | |
SQLAlchemy | 1.4.36 | ||
s3fs | 2022.3.0 |
NumPy
라이브러리는 공학용 컴퓨팅의 Python 셸 작업에서 사용할 수 있습니다. 자세한 내용은 NumPy
import numpy as np print("Hello world") a = np.array([20,30,40,50]) print(a) b = np.arange( 4 ) print(b) c = a-b print(c) d = b**2 print(d)
자체 Python 라이브러리 제공
PIP 사용
Python 3.9를 사용하는 Python 셸을 사용하면 작업 수준에서 추가 Python 모듈 또는 다른 버전을 제공할 수도 있습니다. --additional-python-modules
옵션을 쉼표로 구분된 Python 모듈 목록과 함께 사용하여 새 모듈을 추가하거나 기존 모듈의 버전을 변경할 수 있습니다. Python 쉘 작업을 사용할 때는 이 파라미터로 Amazon S3에 호스팅된 사용자 지정 Python 모듈을 제공할 수 없습니다.
예를 들어 새 scikit-learn
모듈을 업데이트하거나 추가하려면 "--additional-python-modules",
"scikit-learn==0.21.3"
키 및 값을 사용합니다.
AWS Glue는 Python 패키지 설치 프로그램(pip3)을 사용하여 추가 모듈을 설치합니다. --additional-python-modules
값 내에 추가 pip3 옵션을 전달할 수 있습니다. 예: "scikit-learn==0.21.3 -i https://pypi.python.org/simple/"
. pip3의 비호환성 또는 제한 사항이 적용됩니다.
참고
향후에 비호환성을 방지하려면 Python 3.9용으로 빌드된 라이브러리를 사용하는 것이 좋습니다.
Egg 또는 Whl 파일 사용
이미 하나 이상의 .egg
또는 .whl
파일로 패키징된 하나 이상의 Python 라이브러리가 있을 수 있습니다. 그렇다면 다음 예와 같이 AWS Command Line Interface(AWS CLI)를 사용하여 "--extra-py-files
" 플래그 하에서 작업에 이를 지정할 수 있습니다.
aws glue create-job --name python-redshift-test-cli --role
role
--command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections=connection-name
--default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
Python 라이브러리에서 .egg
파일 또는 .whl
파일을 생성하는 방법을 모르는 경우 다음 단계를 따르십시오. 이 예제는 macOS, Linux 및 Windows Subsystem for Linux(WSL)에 적용됩니다.
Python .egg 또는 .whl 파일을 만들려면
-
Virtual Private Cloud(VPC)에서 Amazon Redshift 클러스터를 생성하고 일부 데이터를 테이블에 추가합니다.
-
클러스터를 만드는 데 사용한 VPC-SecurityGroup-Subnet 조합에 대해 AWS Glue 연결을 만듭니다. 연결이 성공인지 테스트합니다.
-
redshift_example
이라는 디렉터리를 생성하고setup.py
라는 파일을 생성합니다.setup.py
에 다음 코드를 붙여넣습니다.from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
-
redshift_example
디렉터리에redshift_module
디렉터리를 만듭니다.redshift_module
디렉터리에서__init__.py
및pygresql_redshift_common.py
라는 파일을 만듭니다. -
__init__.py
파일은 비워둡니다.pygresql_redshift_common.py
에 다음 코드를 붙여넣습니다.port
,db_name
,user
및password_for_user
를 Amazon Redshift 클러스터에 해당하는 세부 정보로 바꿉니다.table_name
을 Amazon Redshift의 테이블 이름으로 바꿉니다.import pg def get_connection(host): rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % ( host,
port
,db_name
,user
,password_for_user
) rs_conn = pg.connect(dbname=rs_conn_string) rs_conn.query("set statement_timeout = 1200000") return rs_conn def query(con): statement = "Select * fromtable_name
;" res = con.query(statement) return res -
아직 이동하지 않은 경우
redshift_example
디렉터리로 변경합니다. -
다음 중 하나를 수행합니다.
.egg
파일을 생성하려면 다음 명령을 실행합니다.python setup.py bdist_egg
.whl
파일을 생성하려면 다음 명령을 실행합니다.python setup.py bdist_wheel
-
이전 명령에 필요한 종속성을 설치합니다.
-
해당 명령은
dist
디렉터리에서 파일을 생성합니다.-
egg 파일을 만든 경우, 이름은
redshift_module-0.1-py2.7.egg
입니다. -
wheel 파일을 만든 경우, 이름은
redshift_module-0.1-py2.7-none-any.whl
입니다.
이 파일을 Amazon S3에 업로드합니다.
이 예제에서 업로드된 파일 경로는
s3://DOC-EXAMPLE-BUCKET/EGG-FILE
또는s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE
입니다. -
-
AWS Glue 작업의 스크립트로 사용할 Python 파일을 생성하고 다음 코드를 파일에 추가합니다.
from redshift_module import pygresql_redshift_common as rs_common con1 = rs_common.get_connection(
redshift_endpoint
) res = rs_common.query(con1) print "Rows in the table cities are: " print res -
이전 파일을 Amazon S3에 업로드합니다. 이 예제에서 업로드된 파일 경로는
s3://DOC-EXAMPLE-BUCKET/scriptname.py
입니다. -
이 스크립트를 사용하여 Python 셸 작업을 생성합니다. AWS Glue 콘솔의 [작업 속성(Job properties)] 페이지에서 Python 라이브러리 경로(Python library path) 상자에
.egg/.whl
파일의 경로를 지정합니다. 여러.egg/.whl
파일 및 Python 파일이 있으면 이 상자에 쉼표로 구분된 목록을 제공합니다..egg
파일을 수정하거나 이름을 바꿀 때 파일 이름은 “python setup.py bdist_egg” 명령으로 생성된 기본 이름을 사용하거나 Python 모듈 명명 규칙을 준수해야 합니다. 자세한 내용은 Python 코드 스타일 가이드를 참조하십시오. AWS CLI를 사용하여 다음 예와 같이 명령으로 작업을 생성하십시오.
aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
작업이 실행되면 스크립트는 Amazon Redshift 클러스터의
table_name
테이블에 생성된 행을 인쇄합니다.
AWS Glue에서 Python 쉘 작업과 함께 AWS CloudFormation 사용
AWS Glue에서 Python 쉘 작업과 함께 AWS CloudFormation을 사용할 수 있습니다. 다음은 그 예제입니다.
AWSTemplateFormatVersion: 2010-09-09 Resources: Python39Job: Type: 'AWS::Glue::Job' Properties: Command: Name: pythonshell PythonVersion: '3.9' ScriptLocation: 's3://bucket/location' MaxRetries: 0 Name: python-39-job Role: RoleName
Python 셸 작업 출력에 대한 Amazon CloudWatch Logs 그룹은 /aws-glue/python-jobs/output
입니다. 오류의 경우 로그 그룹 /aws-glue/python-jobs/error
를 확인합니다.