From 3d8864093c3e8fd46f4b635ba278a6d304548cad Mon Sep 17 00:00:00 2001 From: Haziq Abiyyu Mahdy <haziq.a.mahdy@gmail.com> Date: Thu, 9 Jan 2025 00:30:30 +0700 Subject: [PATCH] checkpoint (baru bisa jalanin spark tapi blm bisa jalanin DAG yg ada spark nya) --- Dockerfile.temp | 14 +++++ airflow/airflow-webserver.pid | 2 +- airflow/airflow.db | Bin 577536 -> 630784 bytes .../__pycache__/pyspark_dag.cpython-312.pyc | Bin 0 -> 1027 bytes .../pyspark_functions.cpython-312.pyc | Bin 0 -> 1173 bytes .../dags/__pycache__/test_dag.cpython-312.pyc | Bin 0 -> 865 bytes .../__pycache__/welcome_dag.cpython-312.pyc | Bin 1611 -> 1611 bytes airflow/dags/test_dag.py | 23 +++++++ airflow/standalone_admin_password.txt | 2 +- docker-compose.yml | 57 +++++++++++++++-- pre-process.ipynb | 22 ------- requirements.txt | 3 +- workspace/input.txt | 2 + workspace/wordcount.py | 59 ++++++++++++++++++ 14 files changed, 155 insertions(+), 29 deletions(-) create mode 100644 Dockerfile.temp create mode 100644 airflow/dags/__pycache__/pyspark_dag.cpython-312.pyc create mode 100644 airflow/dags/__pycache__/pyspark_functions.cpython-312.pyc create mode 100644 airflow/dags/__pycache__/test_dag.cpython-312.pyc create mode 100644 airflow/dags/test_dag.py delete mode 100644 pre-process.ipynb create mode 100644 workspace/input.txt create mode 100644 workspace/wordcount.py diff --git a/Dockerfile.temp b/Dockerfile.temp new file mode 100644 index 0000000..6c1cda8 --- /dev/null +++ b/Dockerfile.temp @@ -0,0 +1,14 @@ +FROM apache/airflow:latest +USER root + +RUN apt-get update && \ + apt-get -y install git && \ + apt-get install -y openjdk-17-jdk && \ + apt-get clean + +ENV JAVA_HOME /usr/lib/jvm/java-17-openjdk-amd64/ +RUN export JAVA_HOME + +USER airflow + +RUN pip install apache-airflow-providers-apache-spark diff --git a/airflow/airflow-webserver.pid b/airflow/airflow-webserver.pid index f5c8955..2bd5a0a 100644 --- a/airflow/airflow-webserver.pid +++ b/airflow/airflow-webserver.pid @@ -1 +1 @@ -32 +22 diff --git a/airflow/airflow.db b/airflow/airflow.db index 8eeb1c7af263e7ddde55342aa0bc49fc43968beb..f9568a1d587b8d949abc3e561275d03af28b8bb5 100644 GIT binary patch literal 630784 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 B^^gDn delta 19683 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 diff --git a/airflow/dags/__pycache__/pyspark_dag.cpython-312.pyc b/airflow/dags/__pycache__/pyspark_dag.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e61ec5ac67db3fae9a2a0e6de6ffee5901b07947 GIT binary patch literal 1027 zcmZWo&1=*^6rUuUWH;H*)^$s3CH6zRAYD9o6JbI8IM^1f2XhJ2ooO4JO~Pd2c6*Ti z2_6JJc<?IqKk%eiFM^jiP*6Pe)}kVK@=dxcqBAh_d++^T-f!Ma-d8FXg7K6+-nv^r z=&Llw!ybWe?*KeQ1Q8`bedHoVVl`0us;lN$3$%X0E#$Zm=zYUA0PC(v47W&3Qp{(G zSTA(9q#~*ko0dqKQ~)DVB_&ci&`zt7;_KRhaf+`Z*8)a?)Tu#DS|p7Z>g$Oy)3vD$ zRVs2GsHYhU8dm1f6_h9gQ1$?nO3$wL01cG(<dGz`6;ULZQ||XEVC_ct7HrkEA>WR| z)tEBOBL*I85HaHQqBP`tQ=KU09dPU<G49chAI2$P=DU2a`A;NDIfR6XeYP1ygPTW+ zEU61U8ibUI8lf=_N#aGJ7vqGBI_+aWkme@rDWjtL$HORRLt)Czr-^9BL#WPnJSi;K z<q^EKce(2%em@SV11E8K<ghe!u(LM2C&`W^J2~5V7;UWhM<(bogaN6ZPehr}O`HbY z!)z-NHlaz6`7!sSP&AU>HYI65JwN1>J;H&o5{?;%vYZODhk0*1jYSg*djDx_tHR3L z1n1=2!ai+GZnQOFa-8hQ`n5RkyVt`(fHwjvN>S|X45XTNnaMZ7KrmwPHj%h6>gsYd zx~61#ls<MaUGf@ZHJfSJlV?eod{M%>v$A%7-COIf-xl`j{q?cI>N2W9OGN$e!$^^@ z&^HL8Urv6}BLN+tCY^B=FhGYWUh7A)UDw$HB*=SDp1^XfDT;E4W)D&85M4V&OUDMP zF6~=cb#dQ5E~08HYn{ucX0x+1S*?Cz8+CQRd@_NIQfAL(joGYzJv%%7sn&X4c#dB- zKGx>5a^pwEG}PlNkiN7Qv-+iMYVPy&LN;^pMAs&*@1{9rd?=iOujtL6i$MK}U^$V? TuSEXVZyMdE_O_{a&zrvirIk8( literal 0 HcmV?d00001 diff --git a/airflow/dags/__pycache__/pyspark_functions.cpython-312.pyc b/airflow/dags/__pycache__/pyspark_functions.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..153fd0ee0be64d76855bc4619719757934025ebd GIT binary patch literal 1173 zcmZ`&L2DC16rRn_ChcZJ+hAK_K}Hdqr6xIumm)$f5v&pm6$CF~%}&#-o9sF>+cqVY z2o}#h#bb|^`a={i4G|&(g5b$pA)W-mnN89Lq7Qc7oA<u=?R#%#J|_}75b}q<Du0Xs z@I!8fBKD#5=7eei8`z2qs>(A(0e0jKcowOvCj2QOroxR4-y$zIFr^i*RvM<tAQYb} zzFt9*G)($JaYj)?pEfW?l&zeIOes#RuSeID!Dc_wh&U6Yk-qK3$9)YjWZYL9s*@N; z*pYJtY(Qt~9|(1baAwA%=T&J9%}I{Oo!N0;L$Top?PM?&1&Ds;$5BIO1=OQvZ10nf zgsh<TdUyb6GpLoAI0D2xRPw5Rz%XK480~n(7LK6C&?fP!$U+S73cKRstlsA!Wx5<% zlCe?~sYTynTPRH#F_+Q0v<0hV3!|e9GDV6Pu>a*zYkRB|f@$EgZ1`6``Bc=nDofnE zhIf6}vvHdGZiS_{EjPe7(IQ$jO=Quq84hJjPsG)WZeh#Dq+l9E-ZLJ19#mZ6;4#bh z3sx2Lcp0<DWR+lxVGf0|Ih5^lonjZ4Sbo<R=rZvF|6ZMI;h4C#Ln;EUmgqKzlzF}x z<@&`~czmQ+u2FgY`J`km%AtyMQ6A-Ssfr;ZrBP8{I41P_M$YqD&Z>}2*W1b2R+;Af zdPq_n9wE*8b*^9JlglDqc1RDz(geSzK_b;PP}@LVBi%OA#|s_fcGp;G8!H`SwV6MQ zf|<FNeyF#m4yTUv&h%3Af$$~f`bno(^Bv=UGygR?-^v_jj-s99VmFy-Co`R7uK7?P zwdpRLZNu3vOtoR^-O{mr3R7R;t?zL1?b_?LgGW742q>5;j}MB^(wA;{3SqJD0a*|L lk`fD_xKs7)z{PjT6|t2sn#zZFrYef^4P5WROUg_L{|gth7kK~x literal 0 HcmV?d00001 diff --git a/airflow/dags/__pycache__/test_dag.cpython-312.pyc b/airflow/dags/__pycache__/test_dag.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11ece8b187243d74b82c12a08c5b121e96c3687a GIT binary patch literal 865 zcmZ8f%TE(Q7@yf^X<6C|l!qdTghOMp4Msc}6B460IG_i5*$ka&S=m=+XItRlUtuCg z4jN<1(SN|RmnL4;O*jxwy+P2BaPpgOHHL4KZ@$NGe)B!{n`IRd$h$9ZJ0BH<eoE)B zj56R{eE{_yQADwaeB8uX+KQ+6YEvEAs;Bu{Q^QC>3{#EjaB9?`CN1>UoQ_VM7W-Om zucM|!sI){UsYRz~nN~Uqt<pO#rqic0eKW^34Q2qpF26ohCk3NJeFd$d821#6cEFdB z19b=WaD8?tA$6Ro&o^GeF})oTzQ3L9`mWfD7$+j+5H3(6m~efTRbvTo;t|3TEEb#Y z5MCc*;29P`y{K!MK}pAPDWF?>j3yp)+(0niC0<sH1>wSxgqhhQqP3SqS!K+ZlfMaf zkM1_YNHlsO--lR>NsG3^BoKCVm{~cFvNlOPky-zej=Va5>#7?>iLk|iII7*sgo%Ju z<7jroXR`y=N}yreXMV^JGi`nCk^ic0W~LzVzU-$&qR4ZhYBvm^`Y;G&R0{}9rt)9T zA-of38UWgv*=2k;jG5#iE^m8bkINNj>toN3c-VC*<FQSk*F9$E<%Hw;$GJbAIhVf# z*Cl}pQ@*_rDD*SBf-JgO8g)B<qygBtA@>EN@5mt*p8BC&%`?6XXt};P0(GHcjL*>A z8G3z&md^D;TDqUs7JroIj<sWQQvF_DNhhnnCv-!(C?aFxeEwltd63SmrIqE>x|c3K z9z59`ENrDyt0&!oWv7*yU**DrG0<i&Ye=tMufol11nN?%o45pzeyVL4>Q_VGD4Tx( D_#O&t literal 0 HcmV?d00001 diff --git a/airflow/dags/__pycache__/welcome_dag.cpython-312.pyc b/airflow/dags/__pycache__/welcome_dag.cpython-312.pyc index 6f135560f187375c54b9a6628250c0c5dacc4cdd..1e9e002c9e84a7d86a9bdbb4a2a6e5b4352db186 100644 GIT binary patch delta 22 ccmX@jbDD?uG%qg~0}wce*QKxA$ZN+207Y>H)c^nh delta 22 ccmX@jbDD?uG%qg~0}w1+U6mfZk=Kq507;bwEdT%j diff --git a/airflow/dags/test_dag.py b/airflow/dags/test_dag.py new file mode 100644 index 0000000..1df5d0b --- /dev/null +++ b/airflow/dags/test_dag.py @@ -0,0 +1,23 @@ +from airflow import DAG +from airflow.providers.apache.spark.operators.spark_submit import SparkSubmitOperator +from datetime import datetime + +with DAG( + dag_id='spark_submit_test', + schedule_interval=None, + start_date=datetime(2025, 1, 8), + catchup=False, +) as dag: + + spark_submit_task = SparkSubmitOperator( + task_id='submit_spark_job', + application='/opt/workspace/wordcount.py', + conn_id='spark_default', + name='wordcount_job', + application_args=['/opt/workspace/input.txt', '/opt/workspace/output/'], + conf={'spark.executor.memory': '512m'}, + verbose=True, + ) + + + spark_submit_task diff --git a/airflow/standalone_admin_password.txt b/airflow/standalone_admin_password.txt index 11c68bd..01c68be 100644 --- a/airflow/standalone_admin_password.txt +++ b/airflow/standalone_admin_password.txt @@ -1 +1 @@ -SbyPAHK96d2ZCYR3 \ No newline at end of file +me4cz7vXfYQsx4HF \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2b790a3..a8d278d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,61 @@ -version: '3' +version: "3" services: sleek-airflow: - build: + build: context: . - dockerfile: Dockerfile + dockerfile: Dockerfile.temp volumes: - ./airflow:/opt/airflow + - ./workspace:/opt/workspace ports: - "8080:8080" - command: airflow standalone + networks: + - airflow-spark-network + environment: + - AIRFLOW_CONN_SPARK_DEFAULT=spark://spark-master:7077 + command: bash -c "rm -f /opt/airflow/airflow-webserver.pid && airflow db init && (airflow scheduler & airflow webserver)" + spark-master: + image: andreper/spark-master:3.0.0 + container_name: spark-master + ports: + - 8081:8080 + - 7077:7077 + networks: + - airflow-spark-network + volumes: + - ./workspace:/opt/workspace + spark-worker-1: + image: andreper/spark-worker:3.0.0 + container_name: spark-worker-1 + environment: + - SPARK_WORKER_CORES=1 + - SPARK_WORKER_MEMORY=512m + ports: + - 8082:8081 + networks: + - airflow-spark-network + volumes: + - ./workspace:/opt/workspace + depends_on: + - spark-master + spark-worker-2: + image: andreper/spark-worker:3.0.0 + container_name: spark-worker-2 + environment: + - SPARK_WORKER_CORES=1 + - SPARK_WORKER_MEMORY=512m + ports: + - 8083:8081 + networks: + - airflow-spark-network + volumes: + - ./workspace:/opt/workspace + depends_on: + - spark-master + +volumes: + shared-workspace: +networks: + airflow-spark-network: + driver: bridge diff --git a/pre-process.ipynb b/pre-process.ipynb deleted file mode 100644 index 7ad2046..0000000 --- a/pre-process.ipynb +++ /dev/null @@ -1,22 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/requirements.txt b/requirements.txt index bbd6d1e..4bdb0ff 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ apache-airflow -pendulum \ No newline at end of file +pendulum +pyspark \ No newline at end of file diff --git a/workspace/input.txt b/workspace/input.txt new file mode 100644 index 0000000..1764b02 --- /dev/null +++ b/workspace/input.txt @@ -0,0 +1,2 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum +Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? \ No newline at end of file diff --git a/workspace/wordcount.py b/workspace/wordcount.py new file mode 100644 index 0000000..9a9361f --- /dev/null +++ b/workspace/wordcount.py @@ -0,0 +1,59 @@ +from pyspark.sql import SparkSession +import sys + +def main(): + # Check if input and output paths are provided + if len(sys.argv) != 3: + print("Usage: wordcount.py <input_path> <output_path>") + sys.exit(-1) + + input_path = sys.argv[1] + output_path = sys.argv[2] + print("=============================================================") + print("input_path: ", input_path) + print("output_path: ", output_path) + print("=============================================================") + + # Initialize SparkSession + spark = SparkSession.builder \ + .appName("WordCount") \ + .getOrCreate() + + print("=============================================================") + print("Spark Session Created") + print("=============================================================") + + + # Read input file + text_file = spark.read.text(input_path).rdd + + print("=============================================================") + print("Text File Read") + print("=============================================================") + + + # Count words + word_counts = ( + text_file.flatMap(lambda line: line.value.split()) # Split lines into words + .map(lambda word: (word, 1)) # Create (word, 1) tuples + .reduceByKey(lambda a, b: a + b) # Reduce by key to sum word counts + ) + + print("=============================================================") + print("Word count: ", word_counts) + print("=============================================================") + + + # Collect results and save to the output file + word_counts.saveAsTextFile(output_path) + + print("=============================================================") + print("Word counts saved") + print("=============================================================") + + + # Stop the SparkSession + spark.stop() + +if __name__ == "__main__": + main() -- GitLab