โปรเจค DE ง่ายๆ ผ่าน Docker, Apache Airflow
เมื่อเราพูดถึงการโปรเจค DE ส่วนมากก็คงหนีไม่พ้น Docker
โปรเจคนี้เป็นแค่ส่วนหนึ่งที่ผมได้ ร่ำเรียนวิชาจากคอร์ส R2DE ของ Data TH.com — Data Science ชิลชิล เหมือนเดิม ใครสนใจ ตามมาเลยครับบ แน่นแน่นอน
Docker และ Kubernetes คืออะไร ลองอ่านได้ ที่นี้
การติดตั้ง และการใช้งานเบื้องต้น ของ Docker
แผนของโปรเจคก็คือ
โปรเจคนี้ ผมจะนำโค้ดจากโปรเจค DE ที่เราทำลง Google Cloud ครั้งที่แล้ว
มาปรับแก้นิดหน่อยแล้วก็ใช้การรัน Airflow ใน Docker
โค้ดที่ปรับแต่ง ดูได้ ที่นี่
ขั้นแรกนำไฟล์ทีเราปรับแล้ว มาไว้ใน โฟเดอร์ dags แล้วให้สร้างโฟเดอร์ data อีกอันหนึ่งเพื่อเป็นโฟเดอร์ที่เราไว้เรียก หรือ save ไฟล์ในกระบวนการ
ต่อไปก็เริ่มกระบวนการรัน ตามนี้เลยครับ https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html
อย่างแรกเราก็ต้องโหลก Docker-compose.yml ที่ทาง docker เขาเขียนมาให้ แต่ผมได้ปรับแต่งเล็กน้อยแล้ว มาสารถดูได้ ที่นี้
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.1.4/docker-compose.yaml'
ต่อไปเราต้องต้อง สร้าง 3 โฟร์เดอร์
mkdir -p ./dags ./logs ./plugins
ยังจำการที่เราเชื่อมต่อกับ Data Base ได้กันไหมครับ ถ้าใครจำไม่ได้ลองอ่าน ที่นี้ เรามี ip username password ต่างๆที่เป็นความลับ ไม่สามารถเปิดเผยได้ เราจึงต้องเก็บไว้ในไฟล์ .env เพื่อความปลอดภัย ดังนั้นจึงใช้คำสั่งเพื่อโหลด
echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env
ก็จะมี ไฟล์ .env ปรากฏ ในตัวไฟล์(ตรงสีแดง) เราจะได้ airflow id ออกมา จากนั้น เราต้องนำ ข้อมูลของ MySql ของเรามาเก็บไว้ที่นี้ เพื่อความปลอดภัยของข้อมูล
ลองกลับไปดูในไฟล์ python ที่แก้ไขเราจะใช้คำสั้ง os.getenv ดึงออกมา
เมื่อเรามี โฟเดอร์ครบแล้ว ต่อไป ก็รัน airflow-init เพื่อจัดการ database ทุกอย่างให้เรียบร้อย
docker-compose up airflow-init
โดยจะมีการสร้าง username password ขึ้นมาใหม่คือ
เราสามารถเปลี่ยนได้ตรง docker-compose.yml
ปัญหาหนึ่งใน airflow ตรงนี้คือ ไม่มีการ install reqirements ต่างๆ ดังนั้นเราต้องสร้างไฟล์ requirements.txt ไว้ด้วย
และเราก็ใช้เครื่องมือในการ import โดยการรัน pip ในตัว Dockerfile
ทำการ run คำสั่งต่างๆ โดยใช้
docker build -t apache/airflow:2.1.0 .
จากนั้นเราก็ใช้คำสั่ง docker-compose up เพื่อรันได้เลย
docker-compose up
localhost ของเราจะอยู่ที่พอต 8080
แล้วเราก็กด บังคับ run dag เหมือนเดิม
ข้อมูลของเรา ตารางก่อนแก้ และหลังแก้ เป็นเหมือนกับ GCP ที่เราทดลองทำในครั้งที่แล้ว ยอดไปเล้ยยยย
กราบขอบคุณทุกท่านนะครับที่อ่านมาจนจบ ผิดพลาดตรงไหน ก็ขออภัยด้วยนะครับ
ติดชมกันได้นะครับ :)
!!!! ข้อควรระวัง เวลาเชื่อ git อัพเข้า github อย่า อัพไฟล์ .env เข้าไปนะครับ!!!!