Kỹ sư dữ liệu : Dự án kỹ thuật dữ liệu từng bước

Nov 28 2022
Nếu bạn đang có kế hoạch cải thiện kỹ năng của mình và tham gia vào một số dự án kỹ thuật nặng, thì tôi hiểu rồi, bài viết này là dành cho bạn, những bài tiếp theo cũng vậy, tôi sẽ nêu bật những điều tốt nhất cho bạn, như tôi đã đề cập, luôn luôn, kiến thức tốt được phân phối ở đây. Trong bài viết này, chúng ta sẽ chia nhỏ cách xây dựng ngăn xếp dữ liệu bằng cách sử dụng công cụ quản lý quy trình làm việc apache Airflow, tạo bảng điều khiển bằng Dash theo sơ đồ, thu thập số liệu bằng Statsd và trực quan hóa hiệu suất bằng Prometheus và Grafana.

Nếu bạn đang có kế hoạch cải thiện kỹ năng của mình và tham gia vào một số dự án kỹ thuật nặng, thì tôi hiểu rồi, bài viết này là dành cho bạn, những bài tiếp theo cũng vậy, tôi sẽ nêu bật những điều tốt nhất cho bạn, như tôi đã đề cập, luôn luôn, kiến thức tốt được phân phối ở đây.

Hình 1 : kiến ​​trúc của dự án

Trong bài viết này, chúng ta sẽ chia nhỏ cách xây dựng ngăn xếp dữ liệu bằng cách sử dụng công cụ quản lý quy trình làm việc apache Airflow , tạo bảng điều khiển bằng Dash theo sơ đồ , thu thập số liệu bằng Statsd và trực quan hóa hiệu suất bằng PrometheusGrafana .

Tất cả các nhiệm vụ được chỉ định ở trên, đang tiến triển để được kết nối với nhau bằng cách sử dụng soạn thảo docker . một số bạn không có cơ hội làm việc với nó, vì vậy chúng ta hãy định nghĩa ngắn gọn về nó.

Hình 2: Docker soạn thư

Hãy tưởng tượng rằng bạn đang làm việc với nhiều container cùng một lúc, mỗi container có công việc cụ thể của riêng nó, bạn sẽ xử lý từng container một cách riêng biệt? DĨ NHIÊN LÀ KHÔNG ! . Docker Compose là công cụ giúp khắc phục vấn đề này và dễ dàng xử lý nhiều container cùng lúc.

Tôi có thể thấy bạn thắc mắc, tại sao tôi bắt đầu bài viết nói về docker Compose , nhưng không sao, tôi sẽ giải thích tại sao. Tôi muốn các bạn hiểu rằng bắt buộc phải nghĩ về nền tảng của mọi dự án CNTT trước khi bắt đầu đào sâu hơn. Docker soạn sẽ cho phép chúng tôi bắt đầu tất cả các dịch vụ cần thiết cho dự án của chúng tôi.

Hãy xem từ tệp soạn thảo docker của chúng tôi ( docker-compose-LocalExecutor.yml ):

mọi tệp docker-compose đều có các thuộc tính mà chúng ta cần hiểu:

  • phiên bản: docker soạn phiên bản
  • hình ảnh: hình ảnh docker được kéo từ trung tâm docker
  • phụ thuộc_on: ở đây chúng ta cần đề cập đến dịch vụ nào được liên kết với dịch vụ hiện tại, ví dụ luồng không khí apache cần Postgres và Mysql để lưu trữ siêu dữ liệu của dags
  • môi trường: ở đây chúng tôi xác định các biến môi trường của dịch vụ, ví dụ: POSTGRES_USER = luồng không khí sẽ được sử dụng khi chúng tôi khởi động dịch vụ.
  • lệnh : lệnh bash đầu tiên bạn cần chạy bất cứ khi nào dịch vụ bắt đầu
  • khối lượng: vị trí bên trong vùng chứa của bạn sẽ được gắn trên hệ thống tệp của bạn, ví dụ: dữ liệu được chuyển đổi từ các đường ống sẽ được lưu trữ ở một nơi lưu trữ liên tục
  • cổng : đó là phương tiện mà bộ chứa của bạn sẽ sử dụng để giao tiếp với các dịch vụ khác, ví dụ: dữ liệu sẽ được nhập vào Statsd từ luồng không khí qua cổng 8125 bằng giao thức udp (kiểm tra ảnh chụp màn hình bên dưới).
  • Bắt đầu các dịch vụ cơ sở dữ liệu:
  • Hình 3: dịch vụ mysql
    Hình 4 : máy chủ web luồng không khí

    3. Thống kê bắt đầu:

    Hình 5: Dịch vụ Statsd

    4.Bắt đầu Prometheus và Grafana:

    Hình 6 : Dịch vụ Prometheus
    Hình 7 : Dịch vụ Grafana

    Vì vậy, như chúng ta có thể thấy tất cả các định nghĩa này được viết trên cùng một tệp và chúng sẽ được bắt đầu cùng nhau bằng một lệnh đơn giản để đạt được mục tiêu mà dự án hướng tới.

    Dự án được chia thành 3 bước chính:

    1. cạo dữ liệu và tự động hóa nó bằng cách sử dụng luồng không khí Apache .
    2. bảng điều khiển sử dụng Dash plotly .
    3. theo dõi nó bằng 3 công cụ: Statsd, Prometheus, Grafana.
    • nguồn dữ liệu :https://www.fahrrad.de/
    Hình 8: Ảnh chụp màn hình từ trang web Fahrrad.de

    chúng tôi sẽ trích xuất:

    • tên thương hiệu
    • danh mục
    • tên người mẫu
    • giá tiền
    • hình ảnh của chiếc xe đạp

    Các tập lệnh cạo sẽ được tự động hóa bằng cách sử dụng công cụ mạnh mẽ nhất apache Airflow, nhưng nếu bạn chưa từng sử dụng nó trước đây, tôi sẽ cung cấp một cái nhìn tổng quan ngắn gọn về công cụ này.

    Luồng khí Apache là một công cụ quản lý luồng công việc có nhiều người vận hành có thể giúp bất kỳ kỹ sư dữ liệu nào thiết kế và điều phối công việc của các dự án khoa học dữ liệu lớn, chẳng hạn như tự động hóa các tập lệnh thu thập dữ liệu. các toán tử được sử dụng trong dự án này là:

    • PythonOperator : dành cho tập lệnh quét web
    • BashOperator : để xác định các công việc quản trị Linux
    • EmailOperator : Để gửi email khi đường ống kết thúc

    Dag là một chuỗi các tác vụ và mỗi tác vụ được xác định bằng một toán tử

    nhiệm vụ phải có một vị trí xác định và có trật tự (t1 >> t2 : nhiệm vụ một nên được thực hiện trước nhiệm vụ 2)

    Hình 9: ảnh chụp màn hình từ đường ống

    Sau khi thu thập dữ liệu từ nguồn (trang web sử dụng phương pháp cạo), bây giờ là lúc để hiểu rõ hơn về nó, đó là lý do tại sao chúng tôi đã xây dựng một bảng điều khiển tương tác bằng cách sử dụng Dash theo sơ đồ .

    Dash plotly : nó là một framework để viết các ứng dụng web tương tác, được viết trên Flask, Plotly. js và Phản ứng. js .

    Hình 10: bảng điều khiển để trực quan hóa dữ liệu

    Ngay bây giờ, chúng ta hãy làm một số nhân viên ưa thích, trong khi công việc đang chạy, nó sẽ tạo ra các số liệu cần được theo dõi, các số liệu này sẽ được đẩy từ luồng không khí qua cổng 8125 sang Statsd bằng giao thức udp (bạn có thể kiểm tra tệp soạn thảo docker ), dữ liệu số liệu không thể hiển thị trong giao diện có tổ chức nếu chúng tôi chỉ sử dụng statsd , vì vậy chúng tôi sẽ dựa vào Prometheus và Grafana để đạt được những gì chúng tôi đang tìm kiếm.

    Hình 11 : số liệu trong Statsd
    Hình 12 : số liệu hiển thị trong Prometheus
    Hình 13 : Bảng điều khiển Grafana

    toàn bộ quá trình được thực hiện theo cách này:

    Hình 14 : theo dõi luồng không khí

    Video của dự án:

    Phần kết luận :

    Trong bài viết này, chúng tôi đã xây dựng toàn bộ ngăn xếp dữ liệu: bắt đầu từ việc thu thập dữ liệu bằng cách sử dụng tập lệnh python, chuyển sang xây dựng bảng điều khiển để trích xuất thông tin chi tiết hữu ích từ đó, đồng thời theo dõi đường dẫn dữ liệu và xem hiệu suất của các tác vụ khác nhau. Tôi hy vọng bạn thích đọc bài viết của tôi và thoải mái hỏi tôi bất kỳ câu hỏi nào và tôi mong muốn được nghe ý kiến ​​​​của bạn về bài viết tiếp theo.

    Kho lưu trữ GIT:

    https://github.com/chiheb08/data_enginnering_project