วิศวกรข้อมูล: โครงการวิศวกรรมข้อมูลทีละขั้นตอน
หากคุณกำลังวางแผนที่จะพัฒนาทักษะของคุณและมีส่วนร่วมในโครงการด้านเทคนิคหนักๆ ฉันเข้าใจแล้ว บทความนี้มีไว้สำหรับคุณ และบทความถัดไปด้วย ฉันจะเน้นสิ่งที่ดีที่สุดสำหรับคุณ ดังที่ฉันพูดถึงเสมอ ความรู้ดีๆมีกระจายที่นี่
ในบทความนี้ เราจะแจกแจงวิธีสร้างกองข้อมูลโดยใช้เครื่องมือการจัดการเวิร์กโฟลว์apache airflowสร้างแดชบอร์ดด้วยDash plottlyรวบรวมเมตริกด้วยStatsd และแสดง ภาพประสิทธิภาพโดยใช้PrometheusและGrafana
การมอบหมายทั้งหมดที่ระบุข้างต้นกำลังดำเนินการเชื่อมต่อเข้าด้วยกันโดยใช้นักเทียบท่าเขียน พวกคุณบางคนไม่มีโอกาสได้ทำงานกับมัน ดังนั้นเรามานิยามสั้นๆ ของมันกัน
ลองนึกภาพว่าคุณกำลังทำงานกับคอนเทนเนอร์จำนวนมากในเวลาเดียวกัน แต่ละคอนเทนเนอร์มีหน้าที่เฉพาะของตัวเอง คุณจะจัดการแต่ละคอนเทนเนอร์แยกกันหรือไม่ แน่นอน ไม่ ! . Docker Composeเป็นเครื่องมือที่ช่วยแก้ปัญหานี้และจัดการหลายคอนเทนเนอร์พร้อมกันได้อย่างง่ายดาย
ฉันเห็นคุณสงสัยว่าเหตุใดฉันจึงเริ่มบทความโดยพูดถึงการเขียนนักเทียบท่าแต่ไม่เป็นไร ฉันจะอธิบายว่าทำไม ฉันอยากให้พวกคุณเข้าใจว่าจำเป็นต้องคิดเกี่ยวกับรากฐานของโครงการไอทีทุกโครงการก่อนที่จะเริ่มเจาะลึกลงไป การเขียน Docker จะทำให้เราสามารถเริ่มบริการทั้งหมดที่จำเป็นสำหรับโครงการของเราได้
ลองดูจากไฟล์เขียน docker ของเรา ( docker-compose-LocalExecutor.yml ) :
ไฟล์ docker-compose ทุกไฟล์มีคุณสมบัติที่เราต้องเข้าใจ:
- เวอร์ชัน :เวอร์ชันที่เขียนโดยนักเทียบท่า
- ภาพ : ภาพนักเทียบท่าที่จะดึงจากฮับนักเทียบท่า
- ขึ้นอยู่กับ:ที่นี่เราต้องพูดถึงบริการที่เชื่อมโยงกับบริการปัจจุบัน ตัวอย่างเช่น apache airflow ต้องการ Postgres และ Mysql เพื่อเก็บข้อมูลเมตาของ dags
- สภาพแวดล้อม:ที่นี่เรากำหนดตัวแปรสภาพแวดล้อมของบริการ ตัวอย่างเช่น POSTGRES_USER = การไหลของอากาศจะถูกใช้เมื่อเราเริ่มบริการ
- command : คำสั่ง bash แรกที่คุณต้องการให้เรียกใช้เมื่อใดก็ตามที่บริการเริ่มทำงาน
- ปริมาณ :ตำแหน่งภายในคอนเทนเนอร์ของคุณที่จะติดตั้งบนระบบไฟล์ของคุณ ตัวอย่างเช่น ข้อมูลที่แปลงจากไปป์ไลน์จะถูกจัดเก็บไว้ในที่จัดเก็บถาวร
- ports :เป็นสื่อที่คอนเทนเนอร์ของคุณจะใช้เพื่อสื่อสารกับบริการอื่นๆ เช่น ข้อมูลจะถูกนำเข้าไปยังStatsdจาก airflow ผ่านพอร์ต 8125 โดยใช้โปรโตคอล udp (ตรวจสอบภาพหน้าจอด้านล่าง)
- เริ่มบริการฐานข้อมูล:
- การขูดข้อมูลและทำให้เป็นอัตโนมัติโดยใช้Apache airflow
- แด ชบอร์ดโดยใช้Dash plotly
- ตรวจสอบโดยใช้ 3 เครื่องมือ: Statsd , Prometheus , Grafana
- แหล่งข้อมูล :https://www.fahrrad.de/
- ชื่อแบรนด์
- หมวดหมู่
- ชื่อรุ่น
- ราคา
- รูปภาพของจักรยาน
- PythonOperator : สำหรับสคริปต์การขูดเว็บ
- BashOperator : สำหรับกำหนดงานการดูแลระบบ Linux
- EmailOperator : เพื่อส่งอีเมลเมื่อไปป์ไลน์เสร็จสิ้น
3.Start Statsd:
4.เริ่ม Prometheus และ Grafana :
ดังที่เราจะเห็นว่าคำจำกัดความทั้งหมดเหล่านี้เขียนในไฟล์เดียวกันและจะเริ่มต้นทั้งหมดด้วยคำสั่งง่ายๆ เพื่อให้บรรลุสิ่งที่โครงการตั้งเป้าไว้
โครงการแบ่งออกเป็น 3 ขั้นตอนใหญ่ ๆ :
เราจะแยก:
สคริปต์การขูดจะเป็นแบบอัตโนมัติโดยใช้เครื่องมือที่ทรงพลังที่สุดapache airflowแต่ถ้าคุณไม่เคยใช้มาก่อน ฉันจะให้ภาพรวมคร่าวๆ เกี่ยวกับเครื่องมือนี้
Apache airflowเป็นเครื่องมือจัดการเวิร์กโฟลว์ที่มีผู้ปฏิบัติงานจำนวนมากที่สามารถช่วยวิศวกรข้อมูลคนใดก็ได้ในการออกแบบและจัดการงานของโครงการนักวิทยาศาสตร์ข้อมูลขนาดใหญ่ ตัวอย่างเช่น สคริปต์การรวบรวมข้อมูลโดยอัตโนมัติ ตัวดำเนินการที่ใช้ในโครงการนี้คือ:
Dag เป็นลำดับของงานและแต่ละงานถูกกำหนดโดยใช้ตัวดำเนินการหนึ่งตัว
งานต้องมีตำแหน่งที่แน่นอนและเป็นระเบียบเรียบร้อย (t1 >> t2 : งานที่หนึ่งควรดำเนินการก่อนงานที่ 2 )
หลังจากรวบรวมข้อมูลจากแหล่งที่มา (เว็บไซต์โดยใช้วิธีการคัดลอก ) ตอนนี้ได้เวลารับข้อมูลเชิงลึกจากแหล่งข้อมูลแล้ว นั่นเป็นเหตุผลที่เราสร้างแดชบอร์ดแบบโต้ตอบโดยใช้Dash plotly
Dash plotly : เป็นกรอบสำหรับเขียนเว็บแอปพลิเคชันเชิงโต้ตอบ เขียนบน Flask, Plotly js และปฏิกิริยา จ.
ตอนนี้ มาทำพนักงานแฟนซีกัน ในขณะที่งานกำลังทำงาน มันจะสร้างเมตริกที่ควรได้รับการตรวจสอบ เมตริกเหล่านี้จะถูกผลักจากการไหลของอากาศผ่านพอร์ต 8125 ไปยัง Statsd โดยใช้โปรโตคอล udp (คุณสามารถตรวจสอบไฟล์ที่เขียนโดยนักเทียบท่า ) ข้อมูลเมตริกไม่สามารถแสดงในอินเทอร์เฟซที่จัดระเบียบได้หากเราใช้เฉพาะ statsd ดังนั้นเราจะพึ่งพา Prometheus และ Grafana เพื่อบรรลุสิ่งที่เรากำลังมองหา
กระบวนการทั้งหมดทำได้ดังนี้:
วิดีโอของโครงการ:
บทสรุป :
ในบทความนี้ เราสร้างกองข้อมูลทั้งหมด: เริ่มต้นจากการรวบรวมข้อมูลโดยใช้สคริปต์ไพธอน ย้ายไปสร้างแดชบอร์ดเพื่อดึงข้อมูลเชิงลึกที่เป็นประโยชน์จากมัน รวมถึงตรวจสอบไปป์ไลน์ข้อมูลและดูประสิทธิภาพของงานต่างๆ ฉันหวังว่าคุณจะสนุกกับการอ่านบทความของฉัน และอย่าลังเลที่จะถามคำถามใดๆ กับฉัน ฉันหวังว่าจะได้รับฟังความคิดเห็นของคุณเกี่ยวกับบทความถัดไป
ที่เก็บ GIT :
https://github.com/chiheb08/data_enginnering_project