2022. 9. 17. 13:42ใ๐ Data Engineering/Apache Airflow
์ด๋ฒ ํฌ์คํ ์์ Airlfow์ Spark์ ์ฐ๋์ ๋ํด ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
Spark์์์ ์์ ์ Airflow๋ฅผ ํตํด ์๋ํ์ํค๋ ์์ ๊น์ง ํด๋ณด๊ฒ ์ต๋๋ค.
๋น์ฐํ Airlflow์ pyspark ํ๊ฒฝ์ด ์ธํ ๋์ด ์์ด์ผ ํฉ๋๋ค.
* ๋ณธ ํฌ์คํ ์ ํด๋น ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ ๊ฒ์์ ๋ฐํ๋๋ค.
[pyspark ์ธํ ํ๋ฌ ๊ฐ๊ธฐ]
https://mengu.tistory.com/25?category=932924
๋ชฉ์ฐจ
๐ Airflow x Spark ์ฐ๋ ์๋ฆฌ
๐ ์ฐ๋ํ๊ธฐ
๐ mini project
Airflow x Spark ์ฐ๋ ์๋ฆฌ
๐ ์๋ฆฌ
๋ณธ๋ Airflow์์ ๊ฐ๋จํ ๋ฐ์ดํฐ ์์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํ์ง๋ง ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๊ณ , ๊ฐ๊ณตํ๋ ์์ ์ Airflow์์ ์ง์ ์ํํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋๊น์ง๋ Airflow๋ ์ํฌ ํ๋ก์ฐ ํ๋ซํผ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ Spark ์์ ์ ์ํํ๋๋ก ํ ๊น์?
Airflow ์์ ์๋ SparkOperator๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค.
Airflow๋ ์์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ๋ณด๋จ, ์ด๋ฏธ Spark ์์ ์ด ๊ตฌํ๋์ด ์๋ 'Task ํ์ผ'์ ์คํ์ํค๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ ํ๋จํ์ต๋๋ค. ์ด์ ๋ฐ๋ผ DAG Task๋ค์ ๊ฑฐ๋ํ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ๋ณด๋จ, Spark ํ์ผ์ ์คํ์ํค๋ ๊ฒ์ ์ด์ ์ด ๋ง์ถฐ์ง๋๋ค. ์ํฌ ํ๋ก์ฐ๋ ๋์ฑ ๊ฐํธํด์ง๊ณ , Task๋ค์ ๊ฐ์์ ํ์ผ์์ ์ฝคํฉํธํ๊ฒ ๊ด๋ฆฌ๋ ์ ์์ด ํธ๋ฆฌํฉ๋๋ค.
์ฐ๋ํ๊ธฐ
๐ ํ์ํ ํจํค์ง ์ค์น
airflow์ spark ์ฐ๋์ ์ํ ํจํค์ง๋ฅผ ๊น์์ค๋๋ค.
pip install apache-airflow-providers-apache-spark
๐ ๊ธฐ๋ณธ ํ์ผ ์์ฑ & Import
(1) airflow ์์ dags ํด๋์ ํ์ผ์ ํ๋ ์์ฑํด์ค๋๋ค.
(2) ํจํค์ง๋ค์ airflow_spark.py ํ์ผ ๋ด์์ ์ํฌํธ ํด์ค๋๋ค.
from datetime import datetime
from airflow import DAG
# from airflow.providers.apache.spark.operators.spark_sql import SparkSqlOperator
from airflow.providers.apache.spark.operators.spark_submit import SparkSubmitOperator
์๋ SparkSqlOperator๋ฅผ ํตํด Spark๋ฌธ์ ์คํํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ Airflow ๋ด์์ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ด๋ฏ๋ก ๋์ฉ๋/๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์๋ง์ง ์์ต๋๋ค. SparkSubmitOperator๋ฅผ ํตํด ์์์ ์ธ๊ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก spark ํ์ผ์ ์ง์ ์คํ์ํค๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ Connection
Airflow์ Spark๊ฐ ์ฐ๋๋๊ธฐ ์ํด์ Spark Connection์ ์์ฑํด์ค์ผ ํฉ๋๋ค. Airlfow๋ ์ง์ ๋ Connection์ ๋ฐํ์ผ๋ก ์ ์ ๋ฐ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
(1) Web Server ์ฐ๊ฒฐ
(base) mingu@DESKTOP-6EBUJPM:~/airflow$ airflow webserver
____________ _____________
____ |__( )_________ __/__ /________ __
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /| / /
___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/
Running the Gunicorn Server with:
Workers: 4 sync
Host: 0.0.0.0:8080
Timeout: 120
Logfiles: - -
Access Logformat:
=================================================================
[2022-09-15 13:18:24 +0900] [233] [INFO] Starting gunicorn 20.1.0
[2022-09-15 13:18:25 +0900] [233] [INFO] Listening at: http://0.0.0.0:8080 (233)
[2022-09-15 13:18:25 +0900] [233] [INFO] Using worker: sync
[2022-09-15 13:18:25 +0900] [234] [INFO] Booting worker with pid: 234
[2022-09-15 13:18:25 +0900] [235] [INFO] Booting worker with pid: 235
[2022-09-15 13:18:25 +0900] [236] [INFO] Booting worker with pid: 236
[2022-09-15 13:18:25 +0900] [237] [INFO] Booting worker with pid: 237
(2) Connection ์์ฑ
(3) Connection Type๋ฅผ ๊ผญ Spark๋ก ์ง์ ํด์ฃผ์ ์ผ ํฉ๋๋ค!
์ด๋ ๊ฒ ๋๋ฉด ์ฐ๋์ ์๋ฃ๋์์ต๋๋ค. ์์ผ๋ก DAG๋ฅผ ์์ฑํ ๋ SparkSubmitOperator๋ฅผ ์ด์ฉํ์ฌ Spark ํ์ผ์ ์คํ์ํค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์์ธํ ์ดํด๋ฅผ ์ํด ๊ฐ๋จํ ์ค์ต์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
๋ค์ ํฌ์คํ ์์ ๋ต๊ฒ ์ต๋๋ค!
'๐ Data Engineering > Apache Airflow' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Airflow] Airflow & Spark ์ฐ๋ํด์ ํ์ฉํ๊ธฐ (2) (2) | 2022.09.19 |
---|---|
[Airflow] Airflow ๊ธฐ์ด ์ง์ (0) | 2022.09.15 |
[Airflow Error] 403:Forbidden (0) | 2022.09.08 |