Data Engineer คืออะไร และสกิลของ Data Engineer

Thanyavuth Akarasomcheep
3 min readOct 11, 2019

--

Data Engineer คือวิศวกรผู้วางระบบเส้นทางการไหลของข้อมูล และรวบรวมข้อมูลไปเก็บไว้ที่แหล่งต่างๆ ให้พร้อมสำหรับการนำไปใช้งาน

https://hackr.io/blog/how-to-become-a-data-engineer

หน้าที่หลักของ Data Engineer

  • เลือกเทคโนโลยีสำหรับจัดเก็บข้อมูลให้เหมาะสม
  • สร้างแหล่งเก็บข้อมูลต่างๆ (Data lake, Data warehouse, Data mart)
  • ดึงข้อมูลจากแหล่งข้อมูลต่างๆ เข้าไปเก็บที่ทะเลสาบข้อมูล (Data lake)
  • โอนข้อมูลจากแหล่งเก็บข้อมูลหนึ่งไปยังแหล่งเก็บข้อมูลอีกแห่ง
  • ดูแลและพัฒนาประสิทธิภาพของ Data Infrastructure
Data pipeline

แหล่งเก็บข้อมูลภายใต้การดูแลของ Data Engineer

  • Data lake คือแหล่งเก็บข้อมูลกลางที่เก็บรวบรวมข้อมูลทุกอย่างขององค์กร ไม่ว่าองค์กรนั้นจะมีข้อมูลแยกของแต่ละผลิตภัณฑ์หรือระบบจำนวนเท่าไร ข้อมูลทั้งหมดจากทุกที่จะถูกเก็บเข้ามาสำรองไว้ที่นี่(Backup) โดยเก็บให้เหมือนต้นฉบับที่สุด (Raw data) เปรียบเสมือนเป็น Data center ขององค์กร ต้องมีระบบรักษาความปลอดภัยสูงเพราะมีข้อมูลทุกสิ่งทุกอย่าง
  • Data warehouse คือแหล่งเก็บข้อมูลที่ผ่านการจัดรูปแบบโครงสร้างให้ง่ายต่อการนำไปใช้งาน อาจมีการแบ่งเป็น Data warehouse หลายๆที่ได้ ขึ้นอยู่กับการแบ่งขอบเขตข้อมูล และสิทธิในการเข้าใช้งาน เป็นต้น
  • Data mart คือแหล่งเก็บข้อมูลที่เฉพาะเจาะจงในการใช้งาน มีขนาดเล็กกว่า Data warehouse
  • Database คือแหล่งเก็บข้อมูลที่เป็นโครงสร้างในรูปแบบต่างๆ เช่น Table, Document, Graph, Key-value

ความสามารถที่ Data Engineer ต้องมี

เขียนโปรแกรม (Programming)

ภาษาหลักที่ใช้ในสายงานการจัดการข้อมูล จะมี Python, Java, Scala, R เนื่องจาก Framework และ Library ส่วนใหญ่จะรองรับภาษาพวกนี้เป็นหลัก

นอกจากนี้ควรสามารถใช้งาน Shell Script เพื่อใช้ในการติดตั้งระบบต่างๆ

ฐานข้อมูล (Database)

สร้างฐานข้อมูล ออกแบบโครงสร้างข้อมูล เข้าไปใช้งานและปรับแต่งประสิทธิภาพของฐานข้อมูลชนิดต่างๆได้ ทั้งฐานข้อมูลที่มีความสัมพันธ์(SQL) และฐานข้อมูลที่ไม่มีความสัมพันธ์ (NoSQL) ฐานข้อมูลที่นิยม เช่น MySQL, PostgreSQL, MongoDB, Cassandra

นอกจากนี้ยังมีฐานข้อมูลที่เก็บข้อมูลในเมมโมรี(Memory) เช่น Redis, Memcached ที่ทำให้การประมวลผลข้อมูลเร็วมาก และช่วยลดโหลดที่จะไปเกิดกับ database

แพลตฟอร์มจัดการข้อมูลปริมาณมาก (Big Data Platform)

เนื่องจาก Database จะมีประสิทธิภาพในการทำงานลดลง เมื่อข้อมูลมีปริมาณมากในระดับ Big data จึงจำเป็นต้องรู้และใช้งานแพลตฟอร์มที่ใช้จัดการกับข้อมูลปริมาณมาก เช่น Apache Spark, Apache Druid, Apache Flink, Apache Hadoop, Apache Hive

การประมวลผลตลอดเวลา (Real-Time Processing)

การทำงานบางอย่างเมื่อมีข้อมูลใหม่เข้ามาต้องนำไปประมวลผลทันที หากมีข้อมูลเกิดขึ้นใหม่พร้อมกันจำนวนมากจำเป็นต้องมีระบบในการจัดการการทำงานเพื่อให้ทรัพยากรของเซิร์ฟเวอร์รองรับการทำงานของทุกคนได้ ไม่เช่นนั้นเซิร์ฟเวอร์อาจจะช้าลงหรือค้างไปได้ รวมถึงการแก้ปัญหาบางอย่าง

เช่น ผู้ใช้กดซื้อบัตรคอนเสิร์ตเข้ามาพร้อมกัน 1,000 คน ตอนที่ระบบทำการตัดสต็อกใน database หากส่ง query เข้าไปพร้อมกัน database จะค้างได้ หรือถ้ามีการนำยอดเดิมไปคำนวณพร้อมกันผลลัพธ์อาจผิดจากความเป็นจริง (มีคนนำ 1,000-1 พร้อมกัน 2 คน ในระบบอาจเหลือ 999 ทั้งที่ควรเหลือ 998)

สิ่งที่จะเข้ามาช่วยจัดการในส่วนนี้คือ Message Queue เช่น Apache Kafka, RabbitMQ

กลุ่มคอมพิวเตอร์ (Cluster Computing)

การทำงานด้าน Big data ส่วนใหญ่ เครื่องคอมพิวเตอร์ส่วนบุคคลเครื่องเดียวมักจะมีสเปคไม่พอหรือประมวลผลได้ช้ามาก จึงมีเทคนิคในการนำคอมพิวเตอร์หลายๆตัวมาช่วยกันประมวลผล ที่นิยมใช้กันคือ Kubernetes(k8s), Docker swarm เป็นระบบที่สามารถเพิ่มลดสเปคตัวเองได้(Auto scaling) คือถ้ามีการประมวลผลมากระบบจะปรับสเปคและจำนวนเครื่องเพิ่มขึ้นเพื่อช่วยกันประมวลผล ถ้ามีการประมวลผลน้อยระบบจะปรับสเปคและจำนวนเครื่องน้องลงเพื่อนำทรัพยากรไปให้ส่วนอื่นใช้งานได้ ข้อดีอีกอย่างคือหากมีเครื่องใดเสียก็ยังมีเครื่องอื่นที่สามารถทำงานได้อยู่ เป็นเสมือน backup ในตัวเอง

การศึกษาเกี่ยวกับ Kubernetes จำเป็นต้องเข้าใจการทำงานของ VMWare, Docker, Container ด้วย

การประมวลผลบนคลาวด์ (Cloud Computing)

การทำงานด้าน Big data ส่วนใหญ่ เครื่องคอมพิวเตอร์ส่วนบุคคลเครื่องเดียวมักจะมีสเปคไม่พอหรือประมวลผลได้ช้ามาก รวมถึงการวาง Data Infrastructure ต่างๆ หากติดตั้งเองจะต้องมีตู้เซิร์ฟเวอร์มีระบบในการจัดการดูแล Hardware เอง ซึ่งยุ่งยาก(ยกเว้นองค์กรจะมีอยู่แล้ว) จึงควรศึกษาการใช้งานคลาวด์ต่างๆ เช่น Google Cloud Platform, Amazon Web Services, Microsoft Azure, Alibaba Cloud โดยแต่ละเจ้าก็จะมีเครื่องมือช่วยงานด้าน Big data ที่แตกต่างกัน

นอกจากนี้ระบบที่สร้างไว้บนคลาวด์ควรทำเป็น Cluster computing ด้วยเพื่อเพิ่มประสิทธิภาพและความคงทนของระบบ

เครื่องมือตรวจสอบ (Monitoring Tool)

หลังจากสร้างระบบขึ้นมาใช้งานแล้ว สิ่งที่ควรมีด้วยคือเครื่องมือในการตรวจสอบระบบ เพื่อให้รู้ทันทีหากมีส่วนใดทำงานผิดปกติเกิดขึ้น เช่น Grafana, Prometheus

ระบบความปลอดภัย (Security)

  • VPN / VPC ใช้ในการจำกัดการเข้าถึงข้อมูลจากภายนอกระบบ

เครื่องมืออื่นๆ

  • Elasticsearch ใช้ในการเรียกข้อมูลเท่าที่ต้องการใช้งาน ไม่จำเป็นต้องดึงออกมาทั้งหมด
  • Apache Airflow ใช้ในตัวจัดการงานต่างๆ เช่น ต้องทำขั้นแรกให้เสร็จก่อนแล้วจึงทำขั้นต่อไป หากขั้นแรกทำไม่สำเร็จจะลองทำใหม่ หากไม่สำเร็จจริงจะไม่ทำขั้นต่อไป หากเรามีการติดตั้ง Monitoring tool ไว้ก็จะสามารถรู้ได้ทันทีที่เกิดปัญหาขึ้น
  • gRPC ใช้แทน REST ปกติ เพราะมีความเร็วในการส่งข้อมูลไวกว่ามาก

Data Architecture with Tech Stacks (example)

Data Architecture with Tech Stacks

Tech Stacks

  • จากภาพด้านบนกล่องสีส้มด้านซ้ายคือแหล่งข้อมูล (Data source) ทั้งหมดที่ต้องการนำมาเก็บรวมกันที่ Data lake
  • Collection service ในภาพใช้เป็น Python code สำหรับเก็บข้อมูลจากแหล่งต่างๆเข้าสู่ Data lake
  • Data lake ในภาพใช้เป็น Google Storage คือจะเก็บข้อมูลในรูปแบบของไฟล์ ข้อมูลจาก database ที่ถูก dump ออกมาจะเข้าไปเก็บที่ Google Storage โดยแต่ละ table จะกลายเป็นไฟล์ table_schema.sql และไฟล์ table_data.csv
  • Data warehouse ในภาพใช้เป็น PostgreSQL สำหรับเก็บข้อมูลที่ถูกปรับเปลี่ยนโครงสร้างให้ง่ายต่อการใช้งานแล้ว
  • Scheduler ในภาพใช้เป็น Apache Airflow (โลโก้รูปกังหัน) เป็นตัวจัดการงาน
  • Data streaming ในภาพใช้เป็น Apache Kafka สำหรับรับส่งข้อมูลแบบเรียลไทม์
  • ETL service ในภาพใช้เป็น Apache Spark สำหรับทำ ETL ข้อมูล เข้าสู่ Data warehouse
  • Analysis & ML Service ในภาพใช้เป็น Apache Spark สำหรับเป็นตัวประมวลข้อมูลเพื่อทำการวิเคราะห์หรือทำ Machine learning
  • ลูกศรเส้นเล็กสีส้ม เป็นตัวสั่งการให้ service ที่ถูกชี้ทำงาน
  • ลูกศรสีแดง เป็นการทำงานเมื่อถูกสั่งเป็นรอบๆ (Batch)
  • ลูกศรสีน้ำเงิน เป็นการทำงานแบบเรียลไทม์ ถ้ามีข้อมูลใหม่เข้ามาจะทำงานทันที

การไหลของข้อมูล (Data pipeline)

Batch Process

  • ข้อมูลที่ไม่สามารถประมวลผลแบบเรียลไทม์ได้ เช่น ข้อมูลจาก Third party (ที่ไม่มีระบบ streaming ให้เชื่อมต่อข้อมูล)
  • Scheduler จะถูกตั้งเวลาไว้ว่าให้ทำงานทุกเวลาใด เช่น ทุกเที่ยงคืนเรียก Collection Service ทำงาน เมื่อทำเสร็จให้เรียก ETL Service ทำงานต่อ
  • เมื่อถึงเวลาเที่ยงคืนของแต่ละวัน
  • Collection Service จะไปดึงข้อมูลจากแหล่งข้อมูลต่างๆ แล้วส่งเข้าสู่ Data lake
  • หลังจาก Collection Service นำข้อมูลเข้าสู่ Data lake สำเร็จ
  • ETL Service จะไปดึงข้อมูลจาก Data lake แล้วทำ ETL เข้าสู่ Data warehouse (ในขั้นตอนนี้อาจทำการพ่นข้อมูลที่ผ่านการทำ ETL แล้วกลับเข้าสู่ Data streaming ด้วยก็ได้ เผื่อมี service ที่ต้องนำข้อมูลไปใช้งานต่อแบบเรียลไทม์ เช่น dashboard)

Realtime Process

  • ข้อมูลที่ถูกพ่นใส่ Data streaming เช่น Event, Log
  • ETL Service จะคอยฟังข้อมูลจาก Data streaming ถ้าหากมีข้อมูลเข้ามาจะนำข้อมูลนั้นเข้าไปเก็บที่ Data lake และนำข้อมูลนั้นมาทำ ETL เข้าสู่ Data warehouse เช่นกัน (ในขั้นตอนนี้อาจทำการพ่นข้อมูลที่ผ่านการทำ ETL แล้วกลับเข้าสู่ Data streaming ด้วยก็ได้ เผื่อมี service ที่ต้องนำข้อมูลไปใช้งานต่อแบบเรียลไทม์ เช่น dashboard)

สำหรับฝั่ง Data scientist

  • จากในภาพจะใช้ Apache Spark ดึงข้อมูลจาก Data warehouse หรือฟังข้อมูลจาก Data streaming มาประมวลวิเคราะห์ข้อมูลหรือทำ Machine learning

สามารถอ่านเพิ่มเติมเกี่ยวกับ Data scientist ได้ที่

สำหรับตำแหน่งงานอื่นในสายงานการจัดการข้อมูลสามารถอ่านเพิ่มเติมได้ที่

อ้างอิง

--

--