• Cài đặt Apache NiFi

  • Kết nối NiFi với các Data Source và Destination

  • ELT Data

Hi mọi người hôm nay Balloon sẽ hướng dẫn mọi người cách làm sao để sync được data từ một database ở đầu source sang một database khác, các bạn có thể gọi nó là Data Lake vì chúng ta sẽ không thay đổi bất cứ thứ tự hay cấu trúc các table ở source.

Mình không biết các bạn khác có áp dụng build Datawarehouse ngay từ ban đầu hay không nhưng mình thì lại thích build Data Lake trước vì nó giữ nguyên vẹn được những thông tin ở source, tránh trường hợp apply quá nhiều việc biến đổi dữ liệu. Việc biến đổi dữ liệu trước từ lúc ETL sẽ mang lại lợi ích rất lớn là người dùng (Data Analyst, Department Manager) có thể dử dụng dữ liệu mà chúng ta đẩy vào trong Datawarehouse ngay mà không cần phải làm thêm thao tác gì nữa thông qua các công cụ visualization như PowerBI của Microsoft hoặc Tableau, bên cạnh đó nó sẽ tìm ẩn một số những rủi ro như sau:

  • Quá trình transform xảy ra lỗi do xử lí không tốt => phải can thiệp bằng tay để sửa lỗi (T . T) . Cái này mình gặp hoài luôn khi bên source có thay đổi gì đó, lúc trước đó vẫn chạy tốt

    Ex: 0 + null = null

  • Không on the same page với người tạo ra dữ liệu

    Giả sử bạn là người kế thừa sản phẩm của người đi trước và có gì trục trặc xảy ra với một số cột data đã bị biến đổi, bạn có thể sẽ gặp trường hợp là bên source quả quyết là cột này họ làm đúng bên warehouse mới sai đó, quá trình trace lỗi sẽ trở thành ác mộng khi bạn không rõ logic transform của người cũ

    Ex: total_amount trong source là total sau khi đã trừ discount nhưng trong warehousee lại là total_amount + discount vì một lí do nào đó

  • Thay đổi cách tính => heartshot

    Cái này thì các bạn không còn lạ gì nữa đúng hông, khi công ty quyết định thay đổi cách tính đã tồn tại 2 năm nay, và bạn sẽ phải ETL lại hết dữ liệu của 2 năm để đồng bộ dữ liệu theo cách tính mới vì bạn đã lỡ không lấy các cột dữ liệu gốc có trong công thức mà chỉ lấy kết quả tính toán cuối cùng và công ty đã archive data cũ ra đĩa cứng

Vì những lí do trên nên mình sẽ hướng dẫn mọi người cách build Data Lake nhé

Cài đặt Apache Nifi

Mình sẽ start Nifi bằng docker, cách cài docker các bạn tham khảo ở đây nhé docker.io . Sau đó các bạn vào terminal và chạy dòng lệnh sau, các bạn có thể xem rõ hơn tại đây DockerHub

Copy to Clipboard

Sau đó các bạn kiểm tra lại bằng cách gõ docker ps để list ra tất cả các container đang chạy. Nếu thành công thì container nifi của chúng ta sẽ hiển thị như hình dưới đây

Data ETL

Nếu vẫn chưa hiển thị được container như trên thì cứ comment lên bài viết lỗi của các bạn nhé. Bây giờ mình sẽ vào khám phá giao diện của Apache NiFi xem thử mình sẽ làm việc với nó như thế nào để move data từ database này qua database khác nhé

Kết nối NiFi với các Data Source và Destination

Các bạn mở trình duyệt và gõ http://localhost:8080/nifi

Các thông tin liên quan đến chức năng của NiFi mình sẽ không giải thích ở đây các bạn tham khảo thêm ở link này , nếu các bạn quan tâm thì có thể comment cho mình ở bài viết này, mình sẽ làm tiếp một bài giải thích riêng ở mục khác, mình sẽ assume là các bạn đã có một số kiến thức cơ bản về NiFi nhé, workspace chính của nifi sẽ hiển thị như sau:

Data ETL

Copy driver vào container nifi, mình sẽ sử dụng mysql để demo các bạn download ở link này mình chọn bản Platform Independent , bản này có thể chạy trên 20 hệ điều hành khác nhau bao gồm Debian của NiFi, sau khi download bạn mở terminal và gõ

Copy to Clipboard
  • Tạo Process Group:

    Rê chuột lên thanh Toolbar và chọn Component tên Process Group, kéo nó ra workspace và đặt tên cho nó, mình đặt tên nó là Demo như hình bên dưới, đúng như thêm gọi của nó Process Group sẽ giúp bạn tổ chức các processor khoa học và gọn gàng hơn, mình thường nhóm các process trong cùng một database lại tronng một Process Group và đặt tên cho nó bằng số IP cho dễ nhớ

  • Configure Database Connector:

    Bạn click phải chuột vào bất kì chỗ nào trên workspace, hông phải Process Group mà mình mới tạo đâu nha, và chọn Configure

    Trong khung Configure bạn chọn dấu cộng để thêm Controller Service, trong khung searcho gõ tìm jdbc, bạn chọn DBCPConnectionPool

    Click Configure, Đặt tên cho ConnectionPool là Demo_SourceDatabase, sau đó bạn chọn Tab Properties và điền vào các thông tin sau.

    Tiếp tục tạo thêm controller service trỏ vào database đích là datalake mysql mình tạo lúc trước, vì ở chung network với nhau nên bạn lưu ý thay thể hostname của database bằng tên container nhé, trong trường hợp này là mysql

    Sau khi đã configure xong, bạn click chọn enable 2 controller này (icon hình sấm sét)

  • Design Data Flow:

    Ở khung workspace bạn double click vào ProcessGroup Demo, bên trong Process Group bạn click chọn Component Processor, kéo nó ra giữa workspace

    Trên màn hình sẽ hiển thị tất cả các processor để chọn, bạn gõ chữ Fetch để tìm và chọn Processor GenerateTableFetch, để tìm hiểu nó sử dụng như thế nào bạn click chuột phải vào component và chọn View Usage

    Double click vào component GenerateTableFetch và thay đổi tên cho nó trùng với tên table mà bạn muốn ETL từ database nguồn cho descriptive hơn, sau đó bạn chọn Tab Properties, và điền vào các thông tin như bên dưới

Copy to Clipboard
Copy to Clipboard

To be continued …

Nếu các bạn hứng thú về build cluster Apache NiFi hoặc enable login thì comment cho mình biết nhé, mình sẽ viết nhiều hơn về 2 cái này.

Cám ơn các bạn đã đọc nhớ thả tim cho mình nhé, nhiều quá viết bài thứ nhất mà chưa xong nữa (T . T), hẹn cái bạn mấy ngày nữa xong bài này

Các bài viết khác

Leave A Comment