வணக்கம், ஹப்ர்! இந்த கட்டுரையில், தொகுதி தரவு செயலாக்க செயல்முறைகளை உருவாக்குவதற்கான ஒரு சிறந்த கருவியைப் பற்றி பேச விரும்புகிறேன், எடுத்துக்காட்டாக, கார்ப்பரேட் DWH அல்லது உங்கள் DataLake இன் உள்கட்டமைப்பில். நாம் Apache Airflow பற்றி பேசுவோம் (இனி காற்றோட்டம் என குறிப்பிடப்படுகிறது). இது அநியாயமாக ஹப்ரே மீதான கவனத்தை இழக்கிறது, மேலும் உங்கள் ETL/ELT செயல்முறைகளுக்கான திட்டமிடலைத் தேர்ந்தெடுக்கும்போது குறைந்தபட்சம் காற்றோட்டம் கவனிக்கத்தக்கது என்பதை முக்கியப் பகுதியில் நான் உங்களுக்குச் சொல்ல முயற்சிப்பேன்.
முன்பு, நான் Tinkoff வங்கியில் பணிபுரிந்தபோது DWH என்ற தலைப்பில் தொடர் கட்டுரைகளை எழுதினேன். இப்போது நான் Mail.Ru குழுவின் ஒரு பகுதியாக மாறிவிட்டேன் மற்றும் கேமிங் பகுதியில் தரவு பகுப்பாய்வுக்கான தளத்தை உருவாக்கி வருகிறேன். உண்மையில், செய்திகள் மற்றும் சுவாரஸ்யமான தீர்வுகள் தோன்றும் போது, தரவு பகுப்பாய்வுக்கான எங்கள் தளத்தைப் பற்றி நானும் எனது குழுவும் இங்கே பேசுவோம்.
முன்னுரையாக
எனவே, ஆரம்பிக்கலாம். காற்றோட்டம் என்றால் என்ன? இது ஒரு நூலகம் (அல்லது
இப்போது காற்றோட்டத்தின் முக்கிய அம்சங்களைப் பார்ப்போம். அவற்றின் சாராம்சம் மற்றும் நோக்கத்தைப் புரிந்துகொள்வதன் மூலம், உங்கள் செயல்முறை கட்டமைப்பை நீங்கள் உகந்ததாக ஒழுங்கமைக்கலாம். இயக்கப்பட்ட அசைக்ளிக் கிராஃப் (இனி DAG என குறிப்பிடப்படுகிறது) என்பது முக்கிய பொருளாக இருக்கலாம்.
DAG உத்தியோகத்தர்
ஒரு DAG என்பது ஒரு குறிப்பிட்ட அட்டவணையின்படி கண்டிப்பாக வரையறுக்கப்பட்ட வரிசையில் நீங்கள் முடிக்க விரும்பும் உங்கள் பணிகளின் சில அர்த்தமுள்ள சங்கமாகும். ஏர்ஃப்ளோ DAGகள் மற்றும் பிற நிறுவனங்களுடன் பணிபுரிய வசதியான இணைய இடைமுகத்தை வழங்குகிறது:
DAG இப்படி இருக்கலாம்:
டெவலப்பர், ஒரு DAG ஐ வடிவமைக்கும்போது, DAG க்குள் உள்ள பணிகள் கட்டமைக்கப்படும் ஆபரேட்டர்களின் தொகுப்பை அமைக்கிறது. இங்கே நாம் மற்றொரு முக்கியமான நிறுவனத்திற்கு வருகிறோம்: ஏர்ஃப்ளோ ஆபரேட்டர்.
ஆபரேட்டர்கள்
ஒரு ஆபரேட்டர் என்பது ஒரு நிறுவனமாகும், அதன் அடிப்படையில் வேலை வாய்ப்புகள் உருவாக்கப்படுகின்றன, இது ஒரு வேலை நிகழ்வின் போது என்ன நடக்கும் என்பதை விவரிக்கிறது.
- BashOperator - ஒரு பாஷ் கட்டளையை இயக்குவதற்கான ஆபரேட்டர்.
- PythonOperator - பைதான் குறியீட்டை அழைப்பதற்கான ஆபரேட்டர்.
- EmailOperator — மின்னஞ்சல் அனுப்புவதற்கான ஆபரேட்டர்.
- HTTPOoperator - http கோரிக்கைகளுடன் பணிபுரியும் ஆபரேட்டர்.
- SqlOperator - SQL குறியீட்டை இயக்குவதற்கான ஆபரேட்டர்.
- சென்சார் என்பது ஒரு நிகழ்விற்காக காத்திருக்கும் ஒரு ஆபரேட்டர் (தேவையான நேரத்தின் வருகை, தேவையான கோப்பின் தோற்றம், தரவுத்தளத்தில் ஒரு வரி, API இலிருந்து ஒரு பதில், முதலியன போன்றவை).
மேலும் குறிப்பிட்ட ஆபரேட்டர்கள் உள்ளனர்: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator.
உங்கள் சொந்த குணாதிசயங்களின் அடிப்படையில் நீங்கள் ஆபரேட்டர்களை உருவாக்கலாம் மற்றும் அவற்றை உங்கள் திட்டத்தில் பயன்படுத்தலாம். எடுத்துக்காட்டாக, நாங்கள் MongoDBToHiveViaHdfsTransferஐ உருவாக்கினோம், இது MongoDB இலிருந்து Hive க்கு ஆவணங்களை ஏற்றுமதி செய்வதற்கான ஒரு ஆபரேட்டர் மற்றும் பணிபுரியும் பல ஆபரேட்டர்கள்
அடுத்து, இந்த பணிகளின் அனைத்து நிகழ்வுகளும் செயல்படுத்தப்பட வேண்டும், இப்போது நாம் திட்டமிடுபவரைப் பற்றி பேசுவோம்.
திட்டமிடுபவர்
ஏர்ஃப்ளோவின் டாஸ்க் ஷெட்யூலர் கட்டமைக்கப்பட்டுள்ளது
ஒவ்வொரு குளத்திற்கும் இடங்களின் எண்ணிக்கையில் வரம்பு உள்ளது. ஒரு DAG ஐ உருவாக்கும் போது, அதற்கு ஒரு குளம் வழங்கப்படுகிறது:
ALERT_MAILS = Variable.get("gv_mail_admin_dwh")
DAG_NAME = 'dma_load'
OWNER = 'Vasya Pupkin'
DEPENDS_ON_PAST = True
EMAIL_ON_FAILURE = True
EMAIL_ON_RETRY = True
RETRIES = int(Variable.get('gv_dag_retries'))
POOL = 'dma_pool'
PRIORITY_WEIGHT = 10
start_dt = datetime.today() - timedelta(1)
start_dt = datetime(start_dt.year, start_dt.month, start_dt.day)
default_args = {
'owner': OWNER,
'depends_on_past': DEPENDS_ON_PAST,
'start_date': start_dt,
'email': ALERT_MAILS,
'email_on_failure': EMAIL_ON_FAILURE,
'email_on_retry': EMAIL_ON_RETRY,
'retries': RETRIES,
'pool': POOL,
'priority_weight': PRIORITY_WEIGHT
}
dag = DAG(DAG_NAME, default_args=default_args)
dag.doc_md = __doc__
DAG மட்டத்தில் வரையறுக்கப்பட்ட ஒரு குளம் பணி மட்டத்தில் மேலெழுதப்படலாம்.
ஒரு தனி செயல்முறை, Scheduler, Airflow இல் அனைத்து பணிகளையும் திட்டமிடுவதற்கு பொறுப்பாகும். உண்மையில், செயல்பாட்டிற்கான பணிகளை அமைக்கும் அனைத்து இயக்கவியலையும் திட்டமிடுபவர் கையாள்கிறார். செயல்படுத்தப்படுவதற்கு முன் பணி பல நிலைகளில் செல்கிறது:
- DAG இல் முந்தைய பணிகள் முடிக்கப்பட்டுள்ளன; புதிய ஒன்றை வரிசைப்படுத்தலாம்.
- பணிகளின் முன்னுரிமையைப் பொறுத்து வரிசை வரிசைப்படுத்தப்படுகிறது (முன்னுரிமைகளும் கட்டுப்படுத்தப்படலாம்), மேலும் குளத்தில் இலவச ஸ்லாட் இருந்தால், பணியை செயல்படுத்தலாம்.
- இலவச தொழிலாளி செலரி இருந்தால், பணி அதற்கு அனுப்பப்படுகிறது; சிக்கலில் நீங்கள் திட்டமிடப்பட்ட வேலை ஒன்று அல்லது மற்றொரு ஆபரேட்டரைப் பயன்படுத்தி தொடங்குகிறது.
போதும் எளிமையானது.
அனைத்து DAGகள் மற்றும் DAG களுக்குள் உள்ள அனைத்து பணிகளின் தொகுப்பிலும் Scheduler இயங்குகிறது.
திட்டமிடுபவர் DAG உடன் பணிபுரியத் தொடங்க, DAG ஒரு அட்டவணையை அமைக்க வேண்டும்:
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='@hourly')
ஆயத்த முன்னமைவுகளின் தொகுப்பு உள்ளது: @once
, @hourly
, @daily
, @weekly
, @monthly
, @yearly
.
நீங்கள் கிரான் வெளிப்பாடுகளையும் பயன்படுத்தலாம்:
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='*/10 * * * *')
செயல்படுத்தும் தேதி
காற்றோட்டம் எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்து கொள்ள, DAG க்கு செயல்படுத்தும் தேதி என்ன என்பதைப் புரிந்துகொள்வது அவசியம். ஏர்ஃப்ளோவில், DAG ஒரு செயல்படுத்தும் தேதி பரிமாணத்தைக் கொண்டுள்ளது, அதாவது, DAG இன் பணி அட்டவணையைப் பொறுத்து, ஒவ்வொரு செயல்படுத்தும் தேதிக்கும் பணி நிகழ்வுகள் உருவாக்கப்படுகின்றன. ஒவ்வொரு நிறைவேற்றும் தேதிக்கும், பணிகளை மீண்டும் செயல்படுத்தலாம் - அல்லது, எடுத்துக்காட்டாக, ஒரு DAG பல செயல்படுத்தும் தேதிகளில் ஒரே நேரத்தில் வேலை செய்ய முடியும். இது இங்கே தெளிவாகக் காட்டப்பட்டுள்ளது:
துரதிர்ஷ்டவசமாக (அல்லது அதிர்ஷ்டவசமாக: இது சூழ்நிலையைப் பொறுத்தது), DAG இல் பணியைச் செயல்படுத்துவது சரி செய்யப்பட்டால், முந்தைய செயல்படுத்தல் தேதியில் செயல்படுத்தல் மாற்றங்களை கணக்கில் எடுத்துக்கொள்வது தொடரும். புதிய வழிமுறையைப் பயன்படுத்தி கடந்த காலங்களில் தரவை மீண்டும் கணக்கிட வேண்டியிருந்தால் இது நல்லது, ஆனால் அது மோசமானது, ஏனெனில் முடிவின் மறுஉருவாக்கம் இழக்கப்படுகிறது (நிச்சயமாக, Git இலிருந்து மூலக் குறியீட்டின் தேவையான பதிப்பைத் திருப்பித் தர யாரும் உங்களைத் தொந்தரவு செய்ய மாட்டார்கள். உங்களுக்கு ஒரு முறை தேவை, உங்களுக்கு தேவையான வழி).
பணிகளை உருவாக்குதல்
DAG ஐ செயல்படுத்துவது பைத்தானில் உள்ள குறியீடாகும், எனவே வேலை செய்யும் போது குறியீட்டின் அளவைக் குறைக்க எங்களுக்கு மிகவும் வசதியான வழி உள்ளது, எடுத்துக்காட்டாக, துண்டிக்கப்பட்ட ஆதாரங்களுடன். உங்களிடம் மூன்று MySQL துண்டுகள் உள்ளன என்று வைத்துக்கொள்வோம், நீங்கள் ஒவ்வொன்றிலும் ஏறி சில தரவை எடுக்க வேண்டும். மேலும், சுதந்திரமாகவும் இணையாகவும். DAG இல் உள்ள பைதான் குறியீடு இப்படி இருக்கலாம்:
connection_list = lv.get('connection_list')
export_profiles_sql = '''
SELECT
id,
user_id,
nickname,
gender,
{{params.shard_id}} as shard_id
FROM profiles
'''
for conn_id in connection_list:
export_profiles = SqlToHiveViaHdfsTransfer(
task_id='export_profiles_from_' + conn_id,
sql=export_profiles_sql,
hive_table='stg.profiles',
overwrite=False,
tmpdir='/data/tmp',
conn_id=conn_id,
params={'shard_id': conn_id[-1:], },
compress=None,
dag=dag
)
export_profiles.set_upstream(exec_truncate_stg)
export_profiles.set_downstream(load_profiles)
DAG இது போல் தெரிகிறது:
இந்த வழக்கில், அமைப்புகளைச் சரிசெய்து, DAG ஐப் புதுப்பிப்பதன் மூலம் நீங்கள் ஒரு துண்டைச் சேர்க்கலாம் அல்லது அகற்றலாம். வசதியாக!
நீங்கள் மிகவும் சிக்கலான குறியீட்டு உருவாக்கத்தையும் பயன்படுத்தலாம், எடுத்துக்காட்டாக, தரவுத்தள வடிவில் உள்ள ஆதாரங்களுடன் பணிபுரியலாம் அல்லது அட்டவணை அமைப்பு, அட்டவணையுடன் பணிபுரியும் வழிமுறையை விவரிக்கலாம் மற்றும் DWH உள்கட்டமைப்பின் அம்சங்களை கணக்கில் எடுத்துக்கொண்டு ஒரு செயல்முறையை உருவாக்கலாம். உங்கள் சேமிப்பகத்தில் N அட்டவணைகளை ஏற்றுவதற்கு. அல்லது, எடுத்துக்காட்டாக, பட்டியல் வடிவில் உள்ள அளவுருவுடன் வேலை செய்வதை ஆதரிக்காத API உடன் பணிபுரிந்தால், இந்தப் பட்டியலிலிருந்து DAG இல் N பணிகளை உருவாக்கலாம், API இல் உள்ள கோரிக்கைகளின் இணையான தன்மையை ஒரு பூலுக்கு வரம்பிடலாம். API இலிருந்து தேவையான தரவு. நெகிழ்வான!
களஞ்சியம்
ஏர்ஃப்ளோவிற்கு அதன் சொந்த பின்தள களஞ்சியம் உள்ளது, ஒரு தரவுத்தளம் (MySQL அல்லது Postgres ஆக இருக்கலாம், Postgres உள்ளது), இது பணிகளின் நிலைகள், DAGகள், இணைப்பு அமைப்புகள், உலகளாவிய மாறிகள் போன்றவற்றை சேமிக்கிறது. இங்கே நான் சொல்ல விரும்புகிறேன் ஏர்ஃப்ளோவில் உள்ள களஞ்சியம் மிகவும் எளிமையானது (சுமார் 20 அட்டவணைகள்) மற்றும் அதன் மேல் உங்கள் சொந்த செயல்முறைகளில் ஏதேனும் ஒன்றை உருவாக்க விரும்பினால் வசதியானது. இன்ஃபர்மேட்டிகா களஞ்சியத்தில் உள்ள 100500 அட்டவணைகள் எனக்கு நினைவிருக்கிறது, இது ஒரு வினவலை எவ்வாறு உருவாக்குவது என்பதைப் புரிந்துகொள்வதற்கு முன்பு நீண்ட நேரம் படிக்க வேண்டியிருந்தது.
கண்காணிப்பு
களஞ்சியத்தின் எளிமையைக் கருத்தில் கொண்டு, உங்களுக்கு வசதியான பணி கண்காணிப்பு செயல்முறையை நீங்கள் உருவாக்கலாம். செப்பெலினில் ஒரு நோட்பேடைப் பயன்படுத்துகிறோம், அங்கு பணிகளின் நிலையைப் பார்க்கிறோம்:
இது ஏர்ஃப்ளோவின் இணைய இடைமுகமாகவும் இருக்கலாம்:
ஏர்ஃப்ளோ குறியீடு திறந்த மூலமாகும், எனவே டெலிகிராமில் விழிப்பூட்டலைச் சேர்த்துள்ளோம். ஒரு பணியின் ஒவ்வொரு இயங்கும் நிகழ்வும், பிழை ஏற்பட்டால், டெலிகிராமில் குழுவை ஸ்பேம் செய்கிறது, அங்கு முழு வளர்ச்சி மற்றும் ஆதரவு குழு உள்ளது.
டெலிகிராம் மூலம் உடனடி பதிலைப் பெறுகிறோம் (தேவைப்பட்டால்), மேலும் செப்பெலின் மூலம் ஏர்ஃப்ளோவில் உள்ள பணிகளின் ஒட்டுமொத்த படத்தைப் பெறுகிறோம்.
மொத்தம்
காற்றோட்டம் முதன்மையாக திறந்த மூலமாகும், மேலும் அதிலிருந்து நீங்கள் அற்புதங்களை எதிர்பார்க்கக்கூடாது. வேலை செய்யும் ஒரு தீர்வை உருவாக்க நேரத்தையும் முயற்சியையும் செலவிட தயாராக இருங்கள். இலக்கு அடையக்கூடியது, என்னை நம்புங்கள், அது மதிப்புக்குரியது. வளர்ச்சியின் வேகம், நெகிழ்வுத்தன்மை, புதிய செயல்முறைகளைச் சேர்ப்பதில் எளிமை - நீங்கள் விரும்புவீர்கள். நிச்சயமாக, திட்டத்தின் அமைப்பு, காற்றோட்டத்தின் நிலைத்தன்மை ஆகியவற்றில் நீங்கள் அதிக கவனம் செலுத்த வேண்டும்: அற்புதங்கள் நடக்காது.
இப்போது எங்களிடம் ஏர்ஃப்ளோ தினசரி வேலை செய்கிறது சுமார் 6,5 ஆயிரம் பணிகள். அவர்கள் குணத்தில் முற்றிலும் வேறுபட்டவர்கள். பல்வேறு மற்றும் மிகவும் குறிப்பிட்ட ஆதாரங்களில் இருந்து முக்கிய DWH இல் தரவை ஏற்றும் பணிகள் உள்ளன, முக்கிய DWH க்குள் ஸ்டோர்ஃப்ரன்ட்களைக் கணக்கிடும் பணிகள் உள்ளன, வேகமான DWH இல் தரவை வெளியிடும் பணிகள் உள்ளன, பல, பல்வேறு பணிகள் உள்ளன - மற்றும் காற்று ஓட்டம் அவை அனைத்தையும் நாளுக்கு நாள் மெல்லும். எண்களில் பேசுவது, இது 2,3 ஆயிரம் DWH (ஹடூப்) க்குள் மாறுபட்ட சிக்கலான ELT பணிகள், தோராயமாக. 2,5 நூறு தரவுத்தளங்கள் ஆதாரங்கள், இது ஒரு குழு 4 ETL டெவலப்பர்கள், இவை DWH இல் ETL தரவு செயலாக்கம் மற்றும் DWH க்குள் ELT தரவு செயலாக்கம் மற்றும் நிச்சயமாக மேலும் ஒரு நிர்வாகி, சேவையின் உள்கட்டமைப்பைக் கையாள்பவர்.
எதிர்கால திட்டங்கள்
செயல்முறைகளின் எண்ணிக்கை தவிர்க்க முடியாமல் அதிகரித்து வருகிறது, மேலும் காற்றோட்ட உள்கட்டமைப்பின் அடிப்படையில் நாம் செய்யும் முக்கிய விஷயம் அளவிடுதல் ஆகும். ஏர்ஃப்ளோ கிளஸ்டரை உருவாக்கவும், செலரி தொழிலாளர்களுக்கு ஒரு ஜோடி கால்களை ஒதுக்கவும், வேலை திட்டமிடல் செயல்முறைகள் மற்றும் களஞ்சியத்துடன் சுய-நகல் தலையை உருவாக்கவும் விரும்புகிறோம்.
முடிவுரை
இது, நிச்சயமாக, ஏர்ஃப்ளோ பற்றி நான் சொல்ல விரும்பும் அனைத்தும் அல்ல, ஆனால் முக்கிய புள்ளிகளை முன்னிலைப்படுத்த முயற்சித்தேன். சாப்பிட்டால் பசி வரும், செய்து பாருங்கள் உங்களுக்கு பிடிக்கும் :)
ஆதாரம்: www.habr.com