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