วิศวกรข้อมูล: โครงการวิศวกรรมข้อมูลทีละขั้นตอน

Nov 28 2022
หากคุณกำลังวางแผนที่จะพัฒนาทักษะของคุณและมีส่วนร่วมในโครงการด้านเทคนิคหนักๆ ฉันเข้าใจแล้ว บทความนี้มีไว้สำหรับคุณ และบทความถัดไปด้วย ฉันจะเน้นสิ่งที่ดีที่สุดสำหรับคุณ ดังที่ฉันพูดถึงเสมอ ความรู้ดีๆมีกระจายที่นี่ ในบทความนี้ เราจะแจกแจงวิธีสร้างกองข้อมูลโดยใช้เครื่องมือการจัดการเวิร์กโฟลว์ apache airflow สร้างแดชบอร์ดด้วย Dash plottly รวบรวมเมตริกด้วย Statsd และแสดงภาพประสิทธิภาพโดยใช้ Prometheus และ Grafana

หากคุณกำลังวางแผนที่จะพัฒนาทักษะของคุณและมีส่วนร่วมในโครงการด้านเทคนิคหนักๆ ฉันเข้าใจแล้ว บทความนี้มีไว้สำหรับคุณ และบทความถัดไปด้วย ฉันจะเน้นสิ่งที่ดีที่สุดสำหรับคุณ ดังที่ฉันพูดถึงเสมอ ความรู้ดีๆมีกระจายที่นี่

รูปที่ 1 : สถาปัตยกรรมของโครงการ

ในบทความนี้ เราจะแจกแจงวิธีสร้างกองข้อมูลโดยใช้เครื่องมือการจัดการเวิร์กโฟลว์apache airflowสร้างแดชบอร์ดด้วยDash plottlyรวบรวมเมตริกด้วยStatsd และแสดง ภาพประสิทธิภาพโดยใช้PrometheusและGrafana

การมอบหมายทั้งหมดที่ระบุข้างต้นกำลังดำเนินการเชื่อมต่อเข้าด้วยกันโดยใช้นักเทียบท่าเขียน พวกคุณบางคนไม่มีโอกาสได้ทำงานกับมัน ดังนั้นเรามานิยามสั้นๆ ของมันกัน

รูปที่ 2: การเขียน Docker

ลองนึกภาพว่าคุณกำลังทำงานกับคอนเทนเนอร์จำนวนมากในเวลาเดียวกัน แต่ละคอนเทนเนอร์มีหน้าที่เฉพาะของตัวเอง คุณจะจัดการแต่ละคอนเทนเนอร์แยกกันหรือไม่ แน่นอน ไม่ ! . Docker Composeเป็นเครื่องมือที่ช่วยแก้ปัญหานี้และจัดการหลายคอนเทนเนอร์พร้อมกันได้อย่างง่ายดาย

ฉันเห็นคุณสงสัยว่าเหตุใดฉันจึงเริ่มบทความโดยพูดถึงการเขียนนักเทียบท่าแต่ไม่เป็นไร ฉันจะอธิบายว่าทำไม ฉันอยากให้พวกคุณเข้าใจว่าจำเป็นต้องคิดเกี่ยวกับรากฐานของโครงการไอทีทุกโครงการก่อนที่จะเริ่มเจาะลึกลงไป การเขียน Docker จะทำให้เราสามารถเริ่มบริการทั้งหมดที่จำเป็นสำหรับโครงการของเราได้

ลองดูจากไฟล์เขียน docker ของเรา ( docker-compose-LocalExecutor.yml ) :

ไฟล์ docker-compose ทุกไฟล์มีคุณสมบัติที่เราต้องเข้าใจ:

  • เวอร์ชัน :เวอร์ชันที่เขียนโดยนักเทียบท่า
  • ภาพ : ภาพนักเทียบท่าที่จะดึงจากฮับนักเทียบท่า
  • ขึ้นอยู่กับ:ที่นี่เราต้องพูดถึงบริการที่เชื่อมโยงกับบริการปัจจุบัน ตัวอย่างเช่น apache airflow ต้องการ Postgres และ Mysql เพื่อเก็บข้อมูลเมตาของ dags
  • สภาพแวดล้อม:ที่นี่เรากำหนดตัวแปรสภาพแวดล้อมของบริการ ตัวอย่างเช่น POSTGRES_USER = การไหลของอากาศจะถูกใช้เมื่อเราเริ่มบริการ
  • command : คำสั่ง bash แรกที่คุณต้องการให้เรียกใช้เมื่อใดก็ตามที่บริการเริ่มทำงาน
  • ปริมาณ :ตำแหน่งภายในคอนเทนเนอร์ของคุณที่จะติดตั้งบนระบบไฟล์ของคุณ ตัวอย่างเช่น ข้อมูลที่แปลงจากไปป์ไลน์จะถูกจัดเก็บไว้ในที่จัดเก็บถาวร
  • ports :เป็นสื่อที่คอนเทนเนอร์ของคุณจะใช้เพื่อสื่อสารกับบริการอื่นๆ เช่น ข้อมูลจะถูกนำเข้าไปยังStatsdจาก airflow ผ่านพอร์ต 8125 โดยใช้โปรโตคอล udp (ตรวจสอบภาพหน้าจอด้านล่าง)
  • เริ่มบริการฐานข้อมูล:
  • รูปที่ 3: บริการ mysql
    รูปที่ 4: เว็บเซิร์ฟเวอร์การไหลของอากาศ

    3.Start Statsd:

    รูปที่ 5 : บริการ Statsd

    4.เริ่ม Prometheus และ Grafana :

    รูปที่ 6: บริการ Prometheus
    รูปที่ 7 : บริการ Grafana

    ดังที่เราจะเห็นว่าคำจำกัดความทั้งหมดเหล่านี้เขียนในไฟล์เดียวกันและจะเริ่มต้นทั้งหมดด้วยคำสั่งง่ายๆ เพื่อให้บรรลุสิ่งที่โครงการตั้งเป้าไว้

    โครงการแบ่งออกเป็น 3 ขั้นตอนใหญ่ ๆ :

    1. การขูดข้อมูลและทำให้เป็นอัตโนมัติโดยใช้Apache airflow
    2. แด ชบอร์ดโดยใช้Dash plotly
    3. ตรวจสอบโดยใช้ 3 เครื่องมือ: Statsd , Prometheus , Grafana
    • แหล่งข้อมูล :https://www.fahrrad.de/
    รูปที่ 8 : ภาพหน้าจอจากเว็บไซต์ Fahrrad.de

    เราจะแยก:

    • ชื่อแบรนด์
    • หมวดหมู่
    • ชื่อรุ่น
    • ราคา
    • รูปภาพของจักรยาน

    สคริปต์การขูดจะเป็นแบบอัตโนมัติโดยใช้เครื่องมือที่ทรงพลังที่สุดapache airflowแต่ถ้าคุณไม่เคยใช้มาก่อน ฉันจะให้ภาพรวมคร่าวๆ เกี่ยวกับเครื่องมือนี้

    Apache airflowเป็นเครื่องมือจัดการเวิร์กโฟลว์ที่มีผู้ปฏิบัติงานจำนวนมากที่สามารถช่วยวิศวกรข้อมูลคนใดก็ได้ในการออกแบบและจัดการงานของโครงการนักวิทยาศาสตร์ข้อมูลขนาดใหญ่ ตัวอย่างเช่น สคริปต์การรวบรวมข้อมูลโดยอัตโนมัติ ตัวดำเนินการที่ใช้ในโครงการนี้คือ:

    • PythonOperator : สำหรับสคริปต์การขูดเว็บ
    • BashOperator : สำหรับกำหนดงานการดูแลระบบ Linux
    • EmailOperator : เพื่อส่งอีเมลเมื่อไปป์ไลน์เสร็จสิ้น

    Dag เป็นลำดับของงานและแต่ละงานถูกกำหนดโดยใช้ตัวดำเนินการหนึ่งตัว

    งานต้องมีตำแหน่งที่แน่นอนและเป็นระเบียบเรียบร้อย (t1 >> t2 : งานที่หนึ่งควรดำเนินการก่อนงานที่ 2 )

    รูปที่ 9 : ภาพหน้าจอจากไปป์ไลน์

    หลังจากรวบรวมข้อมูลจากแหล่งที่มา (เว็บไซต์โดยใช้วิธีการคัดลอก ) ตอนนี้ได้เวลารับข้อมูลเชิงลึกจากแหล่งข้อมูลแล้ว นั่นเป็นเหตุผลที่เราสร้างแดชบอร์ดแบบโต้ตอบโดยใช้Dash plotly

    Dash plotly : เป็นกรอบสำหรับเขียนเว็บแอปพลิเคชันเชิงโต้ตอบ เขียนบน Flask, Plotly js และปฏิกิริยา จ.

    รูปที่ 10 : แดชบอร์ดเพื่อแสดงข้อมูล

    ตอนนี้ มาทำพนักงานแฟนซีกัน ในขณะที่งานกำลังทำงาน มันจะสร้างเมตริกที่ควรได้รับการตรวจสอบ เมตริกเหล่านี้จะถูกผลักจากการไหลของอากาศผ่านพอร์ต 8125 ไปยัง Statsd โดยใช้โปรโตคอล udp (คุณสามารถตรวจสอบไฟล์ที่เขียนโดยนักเทียบท่า ) ข้อมูลเมตริกไม่สามารถแสดงในอินเทอร์เฟซที่จัดระเบียบได้หากเราใช้เฉพาะ statsd ดังนั้นเราจะพึ่งพา Prometheus และ Grafana เพื่อบรรลุสิ่งที่เรากำลังมองหา

    รูปที่ 11 : เมตริกใน Statsd
    รูปที่ 12: เมตริกที่แสดงใน Prometheus
    รูปที่ 13 : แผงหน้าปัด Grafana

    กระบวนการทั้งหมดทำได้ดังนี้:

    รูปที่ 14 : การตรวจสอบการไหลของอากาศ

    วิดีโอของโครงการ:

    บทสรุป :

    ในบทความนี้ เราสร้างกองข้อมูลทั้งหมด: เริ่มต้นจากการรวบรวมข้อมูลโดยใช้สคริปต์ไพธอน ย้ายไปสร้างแดชบอร์ดเพื่อดึงข้อมูลเชิงลึกที่เป็นประโยชน์จากมัน รวมถึงตรวจสอบไปป์ไลน์ข้อมูลและดูประสิทธิภาพของงานต่างๆ ฉันหวังว่าคุณจะสนุกกับการอ่านบทความของฉัน และอย่าลังเลที่จะถามคำถามใดๆ กับฉัน ฉันหวังว่าจะได้รับฟังความคิดเห็นของคุณเกี่ยวกับบทความถัดไป

    ที่เก็บ GIT :

    https://github.com/chiheb08/data_enginnering_project