इस लेख में, हम देखेंगे कि AWS Glue में मौजूद जॉब के सभी जॉब रन्स के माध्यम से कैसे पेजिनेट करें।
उदाहरण
समस्या कथन: आपके खाते में बनाए गए AWS Glue Data Catalog से जॉब के जॉब रन्स के माध्यम से पेजिनेट करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।
समस्या हल करने का दृष्टिकोण/एल्गोरिदम
चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।
चरण 2: max_items, page_size और starting_token इस फ़ंक्शन के लिए वैकल्पिक पैरामीटर हैं, जबकि job_name आवश्यक है।
max_items वापस लौटने वाले कुल रिकॉर्ड की संख्या दर्शाता है। यदि उपलब्ध रिकॉर्ड की संख्या > max_items तो पेजिनेशन फिर से शुरू करने के लिए रिस्पांस में NextToken प्रदान किया जाएगा।
page_size प्रत्येक पृष्ठ का आकार दर्शाता है।
starting_token पेजिनेट करने में मदद करता है, और यह पिछले रिस्पांस से NextToken का उपयोग करता है।
चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं। सुनिश्चित करें कि डिफ़ॉल्ट प्रोफ़ाइल में region_name उल्लिखित है। यदि नहीं, तो सत्र बनाते समय स्पष्ट रूप से region_name पास करें।
चरण 4: Glue के लिए AWS क्लाइंट बनाएं।
चरण 5: get_job_runs का उपयोग करके सभी क्रॉलर्स का विवरण रखने वाला एक paginator ऑब्जेक्ट बनाएं।
चरण 6: paginate फ़ंक्शन कॉल करें और max_items, page_size और starting_token को PaginationConfig पैरामीटर के रूप में पास करें।
चरण 7: यह max_size और page_size के आधार पर रिकॉर्ड की संख्या लौटाता है।
चरण 8: पेजिनेट करते समय यदि कुछ गलत होता है तो सामान्य एक्सेप्शन को संभालें।
उदाहरण कोड
उपयोगकर्ता खाते में बनाए गए जॉब के सभी जॉब रन्स के माध्यम से पेजिनेट करने के लिए निम्न कोड का उपयोग करें:
import boto3
from botocore.exceptions import ClientError
def paginate_through_jobruns(job_name, max_items=None, page_size=None, starting_token=None):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
paginator = glue_client.get_paginator('get_job_runs')
response = paginator.paginate(JobName=job_name, PaginationConfig={
'MaxItems': max_items,
'PageSize': page_size,
'StartingToken': starting_token
})
return response
except ClientError as e:
raise Exception("boto3 client error in paginate_through_jobruns: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in paginate_through_jobruns: " + e.__str__())
a = paginate_through_jobruns("glue_test_job", 1, 5)
print(*a)
आउटपुट
{'JobRuns': [{'Id': 'jr_435b66cfe451adf5fa7c7f914be3c87d199616f52bd13bdd91bb1269f02db705', 'Attempt': 0, 'JobName': ' glue_test_job', 'StartedOn': datetime.datetime(2021, 1, 25, 22, 19, 56, 52000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 1, 25, 22, 21, 50, 603000, tzinfo=tzlocal()), 'CompletedOn': datetime.datetime(2021, 1, 25, 22, 21, 50, 603000, tzinfo=tzlocal()), 'JobRunState': 'SUCCEEDED', 'Arguments': {'--additional-python-modules': 'pandas==1.1.5', '--enable-glue-datacatalog': 'true', '--extra-files': 's3://glue/job/test', '--job-bookmark-option': 'job-bookmark-disable', 'step': '0'}, 'PredecessorRuns': [], 'AllocatedCapacity': 2, 'ExecutionTime': 107, 'Timeout': 2880, 'MaxCapacity': 2.0, 'WorkerType': 'G.1X', 'NumberOfWorkers': 2, 'LogGroupName': '/aws-glue/jobs', 'GlueVersion': '2.0'}], 'NextToken': 'eyJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE2MTc0NTQ0NDgsIm5hbm9zIjo2OTUwMDAwMDB9LCJsYXN0RXZhbHVhdGVkS2V5Ijp7ImpvYklkIjp7InMiOiJqXzdlYzIzNTYwOWRkMGVmYjRhNTgyNDU2YWVlZmQ4NmFlMTgwYTAyNDQ3NWY2ODRkMzc4YWFiZDBmYTk1MGJmMDcifSwicnVuSWQiOnsicyI6ImpyXzJjNDFkMmJmMzY1NGZhZGFhYzkzMjU1ZTY0OTkxOTg2YTE0Yjk2MjIyMTRlNDc4ZGNkOWE0ZTY5N2M3MGZmY2YifSwic3RhcnRlZE9uIjp7Im4iOiIxNjExMjA3MjcwODIyIn19fQ==', 'ResponseMetadata': {'RequestId': '1874370e-***********-40d', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 02 Apr 2021 12:54:08 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '6509', 'connection': 'keep-alive', 'x-amzn-requestid': '1874370e-**************40d'}, 'RetryAttempts': 0}}
महत्वपूर्ण सुधार नोट
मूल कोड में त्रुटि: उदाहरण में paginate_through_crawlers कॉल किया गया है लेकिन फ़ंक्शन का नाम paginate_through_jobruns है। उपरोक्त कोड में इसे ठीक कर दिया गया है।
जॉब रन मुख्य फ़ील्ड
Id: जॉब रन अद्वितीय पहचानकर्ता
Attempt: प्रयास संख्या (पुनर्प्रयास के लिए)
JobRunState: STARTING, RUNNING, STOPPING, STOPPED, SUCCEEDED, FAILED, TIMEOUT
StartedOn/CompletedOn: समय टाइमस्टैम्प
ExecutionTime: सेकंड में निष्पादन समय
Arguments: रन-विशिष्ट आर्ग्यूमेंट्स (डिफ़ॉल्ट को ओवरराइड करते हैं)
PredecessorRuns: पूर्ववर्ती जॉब रन्स (वर्कफ़्लो के लिए)
WorkerType/NumberOfWorkers: वर्कर कॉन्फ़िगरेशन
ErrorMessage: यदि विफल हुआ तो त्रुटि संदेश
उपयोग के मामले
जॉब निष्पादन इतिहास निगरानी
विफल रन्स का डीबगिंग
प्रदर्शन विश्लेषण (निष्पादन समय रुझान)
लागत आवंटन (जॉब प्रति निष्पादन समय)
IAM अनुमति
glue:GetJobRuns अनुमति आवश्यक है।