มาใช้ Apache Beam กันเถอะ – ตอนที่ 2 วาด Beam ให้เป็น flow
in this series
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 1 สร้าง batch process แบบง่ายๆ
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 2 วาด Beam ให้เป็น flow
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 3 สร้าง function ไว้ใช้เอง
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 4 ได้เวลา Google Dataflow
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 5 Beam functions จัดให้แล้ว
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 6 IO สำเร็จรูป
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 7 IO ที่สร้างได้
- มาใช้ Apache Beam กันเถอะ – ตอนที่ 8 โพย side inputs และการติด tag
มาต่อกันที่ตอนที่ 2 นะฮะ
ครั้งที่แล้ว เราได้ลองเขียน Apache Beam pipeline แบบง่ายๆ ไปแล้ว พอจะมองภาพออกนะฮะ ว่ามัน flow จากบนลงล่าง และไม่มีวนลูป เราเรียกอีกชื่อว่า "DAG" ซึ่งย่อมาจาก "Directed Acyclic Graph"
และเรายังสามารถวาด DAG diagram นี่ได้ง่ายๆ แค่ไม่กี่ขั้นตอนด้วยฮะ
1. ติดตั้ง Graphviz
graphviz
เป็น package ที่นิยมใช้เขียน diagram โดยจะใช้ DOT language
เราจะเริ่มจากติดตั้งมันก่อน ซึ่งก็มีหลายวิธี ดูรายละเอียดได้จากลิงก์นี้ฮะ https://graphviz.org/download/
แต่ผมเองถนัดใช้ brew
brew install graphviz
เมื่อติดตั้งเสร็จแล้ว ก็เช็คอีกทีว่าเรียบร้อยนะ ด้วยคำสั่ง
dot -V # capital `V`
ก็ควรจะแสดงตัวเลข version ออกมาประมาณนี้ฮะ
ถ้าสนใจ brew
อ่านต่อได้ที่ลิงก์ข้างล่างเลยฮะ
2. ใช้ RenderRunner ใน Beam
เอาล่ะ ทีนี้เราก็กลับมาที่ Beam code ของเราบ้าง ให้เราปรับเป็นแบบนี้ฮะ
เรากำลังเรียกใช้ RenderRunner
เพื่อให้มันสร้าง DOT script แล้วส่งต่อไปให้ graphviz
ทำงานอีกทีนีง รายละเอียดของ runner ตัวนี้อ่านเพิ่มเติมได้ที่ลิงก์นี้ฮะ
และต้องมี beam.options.pipeline_options.PipelineOptions()
ให้กับ parameter options
ด้วยนะฮะ ไม่งั้น diagram ไม่ออกนะ
3. สั่ง execute
หน้าตา code ตัวอย่าง ก็จะได้ประมาณนี้
ทีนี้ พอเราจะสั่งให้มันทำงาน ให้เราเติมที่อยู่ของ diagram ด้วยว่าจะให้ไปเก็บที่ไหน ด้วย parameter --render_output="<path>"
ฮะ เช่น
python3 main.py --render_output="dag.png"
ท้ายสุด เราก็จะเห็น "dag.png" อันสวยงาม
อีกนิดนึงฮะ Beam เนี่ย เราสามารถกำหนดชื่อให้แต่ละ step ได้ด้วยนะ แบบนี้
ถ้าเราสั่ง render อีกทีนึง เราก็จะได้ diagram ที่มีชื่อที่เรากำหนดใน code มาด้วยแหละฮะ