Sơ lược về quá trình ETL ứng dụng trong dự án Custom Data Platform.

Nguyễn Minh Đức
Edumall Engineering
5 min readJul 11, 2019

1. Tổng quát về ETL.

1.1 Giới thiệu chung

ETL là viết tắt của Extract Transform Load và nó là quá trình làm thế nào dữ liệu được đưa vào từ các nguồn dữ liệu vào kho dữ liệu.

ETL (Extracts + Transforms + Load Data)

ETL đơn giản là :

  • Extracts dữ liệu - tức là đi thu gom dữ liệu từ nhiều nguồn khác nhau — doanh nghiệp của bạn sẽ có một vài phần mềm với mỗi phần mềm đảm nhiệm một công việc nào đó như dữ liệu người dùng từ database của một website, từ hệ thống quản lý quan hệ khách hàng (CRM) và công việc cần làm đi thu gom dữ liệu từ các nguồn dữ liệu này
  • Transforms dữ liệu - tức là chuyển đổi dữ liệu, việc chuyển đổi này có mục đích hẳn hoi, đó là chuyển đổi từ các dữ liệu nghiệp vụ của các phần mềm thành dữ liệu phân tích được, đồng thời phải tối ưu hóa cho mục đích phân tích dữ liệu này. Ngoài ra, việc chuyển đổi dữ liệu còn một mục đích khác nữa là làm sạch dữ liệu
  • Load dữ liệu - như bạn thấy ở hình trên, sau khi được chuyển đổi thì toàn bộ các dữ liệu này được đưa vào một nơi lưu trữ mới, mà người ta gọi là DataWarehouse (tạm dịch là kho dữ liệu). Và đến đây là kết thúc giai đoạn ETL dữ liệu, giai đoạn đầu tiên để bạn triển khai giải pháp Business Intelligence cho doanh nghiệp của bạn.

1.2 Kiến trúc ETL trong dự án Custom Data Platform

Hiện tại Edumall đang sử dụng nhiều hệ thống, mỗi hệ thống sẽ xử lý những nghiệp vụ riêng vì vậy sẽ lưu trữ các data nghiệp vụ riêng. Những data này rất có giá trị, nhưng chúng đang bị rời rạc hóa và không có tính ứng dụng trong việc xây dựng đầu ra phục vụ cho quá trình phân tích và báo cáo.

Vì vậy là cần thiết để phải tạo ra quá trình ETL đưa tất cả các dữ liệu này về chung một nguồn.

Kiến trúc tổng quan ứng dụng trong dự án CDP

Có thể thấy trong hình trên:

Đầu vào là data từ các nguồn khác nhau, Streamset (nền tảng — bộ công cụ giúp đơn giản hóa việc xây dựng, thực thi, vận hành và bảo vệ data-streaming architectures của doanh nghiệp) sẽ load real-time data này vào Kafka (streaming platform, cho phép lưu trữ lượng lớn messages).

Thông qua Spark, dữ liệu từ Kafka sẽ được đổ vào Kudu.

Từ data trong kudu, một bộ set of tools (Azkaban-Zookeeper-Mozart) sẽ giúp transform dữ liệu này sang một database đầu cuối (PostgreSQL).

Database đầu cuối này nhằm phục vụ cho các quá trình phân tích cũng như khai thác phục vụ hệ thống UserProfile (360 độ người dùng).

2. Làm sao để nhận biết dữ liệu mới ?

Việc transform dữ liệu từ kudu vào postgre có hai cách:

  • Full transform: Transform lại toàn bộ dữ liệu có trong kudu, kể cả có một phần dữ liệu đã được transform từ trước rồi.
  • Incremental: Chỉ transform những data mới được thêm hoặc update được đổ vào kudu

Có thể thấy cách thứ nhất (Full transform) là không được do lặp lại dữ liệu, khi dữ liệu ngày một lớn thì quá trình transform cũng ngày một lâu.

Nhưng khi dùng incremental thì làm sao nhận biết được trong kudu, data nào mới được thêm hoặc mới được update.

Giải pháp:

Mỗi bản ghi khi được đổ vào kudu sẽ lưu trữ 1 cờ etl và giá trị mặc định là false. Sau khi dữ liệu được transform vào trong postgre, cờ này sẽ chuyển thành true.

Như vậy khi transform chỉ cần tìm kiếm những bản ghi có cờ etl bằng false.

Kiến trúc giai đoạn sau

Giai đoạn sau do đã bỏ Spark, cũng như Kafka vì vậy cần một cơ chế khác để biết các bản ghi mới hoặc update mới.

Giải pháp:

Sử dụng cờ transform_at, start_time và end_time.

Khi lại khoảng thời gian đầu cuối của lượng dữ liệu trong kudu. Lúc transform sẽ cần phải full transform lần đầu tiên, cập nhật end time vào các bản ghi. Các lần transform sau chỉ cần transform lượng bản ghi được đổ vào tính từ thời điểm end time đến thời điểm lúc transform. Lượng bản ghi này chính là lượng bản ghi mới nhất.

3. Cơ chế hoạt động của bộ ba set of tools Azkaban - Zookeeper - Mozart

Cơ chế hoạt động của set of tools
  • Azkaban: tool có chức năng tạo các job, tạo flow cho các job, lên lịch chạy schedule. Nó giải quyết vấn đề các job phụ thuộc vào nhau và cũng cấp một giao diện giúp người dùng dễ dàng theo dõi quá trình etl.
  • Zookeeper: Zookeeper được sử dụng với mục đích để điều phối các ETL Jobs đến các Mozart-Workflow Service
  • Điều đó có nghĩa nó hỗ trợ việc parallel hoá các ETL Job → Giúp việc chạy các task ETL song song trong môi trường cluster(Base on theo mô hình master,slave)
  • Mozart: xử lý logic quá trình transform dữ liệu.

Luồng hoạt động của 3 công cụ này

Lần đầu tiên khởi động mozart, mozart sẽ tạo ra 4 node trên zookeeper gồm: tasks, workers, assign, status.

Khi muốn thực hiện quá trình etl, việc đầu tiên là cần tạo flow trên Azkanban(giao diện tương tác). Flow này gồm nhiều job có thể phụ thuộc vào nhau, và tiến hành execute flow.

Sau khi excecute, azkaban sẽ tạo 1 node con trong /tasks. Node này sẽ chứa tên của job cần thực hiện.

Trên Mozart có một node master sẽ luôn quét xem có task nào không, nếu có kiểm tra xem có worker nào trong thư mục worker có thể hoạt động không.

Nếu có, master sẽ gán task cho worker làm việc và đẩy vào thư mục assign,

Sau khi thực hiện xong task sẽ được đẩy vào thư mục status chuyển trạng thái của nó là successful hay failed và hiển thị lên Azkaban web.

Tài liệu tham khảo:

https://medium.com/@lehuutoan/etl-l%C3%A0-g%C3%AC-7a94d58f722f

* Bài viết có sự đóng góp của VuongPD

--

--