100 ngày Data Engineering

Table of contents

Ngày 1: Linux & Bash Scripting

  • Ôn tập các lệnh Linux cơ bản: ls, cd, pwd, mkdir, rm, cp, mv, cat, less, head, tail, chmod, chown, find, grep, awk, sed.

  • Tìm hiểu về Bash scripting: biến ($variable), điều kiện (if, else, elif), vòng lặp (for, while), hàm (function), truyền tham số ($1, $2, ...).

  • Bài tập:

    • Viết một script Bash để kiểm tra dung lượng đĩa trống của tất cả các phân vùng và gửi email cảnh báo nếu dung lượng thấp hơn một ngưỡng cho trước.

    • Viết một script Bash để tìm kiếm tất cả các tệp có phần mở rộng .log trong một thư mục và các thư mục con của nó, sau đó nén chúng lại thành một tệp .zip.

Ngày 2: Linux & Bash Scripting (tiếp theo)

  • Tìm hiểu về các công cụ Linux nâng cao: awk (xử lý văn bản), sed (chỉnh sửa văn bản), grep (tìm kiếm), xargs (thực thi lệnh trên nhiều tệp).

  • Tìm hiểu về SSH và scripting từ xa: sử dụng ssh để thực thi lệnh trên máy chủ từ xa, sử dụng scp để sao chép tệp giữa các máy chủ.

  • Bài tập:

    • Viết một script Bash để kết nối đến một máy chủ từ xa qua SSH, thực hiện một lệnh (ví dụ: kiểm tra trạng thái dịch vụ), và ghi lại kết quả vào một tệp log.

    • Viết một script Bash để tự động sao lưu cơ sở dữ liệu MySQL từ một máy chủ từ xa về máy cục bộ.

Ngày 3: Python Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của Python: generators (yield), decorators, context managers (with), comprehensions (list, dict, set), lambda functions.

  • Tìm hiểu về xử lý lỗi (exceptions) và logging: try, except, finally, raise, module logging.

  • Bài tập:

    • Viết một generator để tạo ra các số Fibonacci.

    • Viết một decorator để đo thời gian thực thi của một hàm.

    • Viết một script Python để đọc một tệp log, phân tích các lỗi và cảnh báo, và gửi email thông báo.

Ngày 4: OOP (Object-Oriented Programming) trong Python

  • Tìm hiểu về các khái niệm cơ bản của OOP: lớp (class), đối tượng (object), thuộc tính (attribute), phương thức (method), kế thừa (inheritance), tính đóng gói (encapsulation), tính đa hình (polymorphism).

  • Thực hành xây dựng các lớp và đối tượng trong Python.

  • Bài tập:

    • Xây dựng một lớp Person với các thuộc tính name, age, address và các phương thức introduce_yourself(), calculate_age_in_dog_years().

    • Xây dựng một lớp Employee kế thừa từ lớp Person và thêm các thuộc tính job_title, salary, start_date.

Ngày 5: OOP (tiếp theo)

  • Tìm hiểu về các khái niệm nâng cao của OOP: lớp trừu tượng (abstract class), giao diện (interface), mixin, đa kế thừa (multiple inheritance), metaclass.

  • Thực hành áp dụng các khái niệm OOP vào các bài toán thực tế.

  • Bài tập:

    • Xây dựng một ứng dụng đơn giản quản lý thư viện sách, sử dụng các lớp và đối tượng để biểu diễn sách, tác giả, người mượn, và các hoạt động mượn/trả sách.

Ngày 6: Mẫu thiết kế (Design Patterns) trong OOP

  • Tìm hiểu về các mẫu thiết kế (design patterns) phổ biến trong OOP: Singleton, Factory, Observer, Decorator, Strategy, Adapter, Facade.

  • Thực hành áp dụng các mẫu thiết kế vào các bài toán thực tế.

  • Bài tập:

    • Xây dựng một ứng dụng xử lý đơn hàng trực tuyến, sử dụng mẫu thiết kế Observer để thông báo cho các bộ phận liên quan khi có đơn hàng mới.

    • Xây dựng một ứng dụng trò chơi đơn giản, sử dụng mẫu thiết kế Strategy để cho phép người chơi lựa chọn các chiến thuật khác nhau.

Ngày 7: Module và Package trong Python

  • Tìm hiểu về module (.py) và package (thư mục chứa các module) trong Python.

  • Tìm hiểu cách tạo, sử dụng và phân phối các module và package của riêng bạn.

  • Tìm hiểu về virtual environment (venv) để quản lý các dependency của dự án Python.

  • Bài tập:

    • Tạo một module Python chứa các hàm xử lý chuỗi (ví dụ: đảo ngược chuỗi, đếm số lần xuất hiện của một ký tự).

    • Tạo một package Python chứa các module xử lý dữ liệu (ví dụ: đọc/ghi file CSV, JSON, XML).

Ngày 8: SQL Nâng Cao

  • Tìm hiểu về các khái niệm nâng cao trong SQL: CTE (Common Table Expressions), window functions, recursive queries, pivot/unpivot.

  • Thực hành viết các truy vấn SQL phức tạp để giải quyết các bài toán phân tích dữ liệu.

  • Bài tập:

    • Sử dụng CTE để tính toán tổng doanh số theo tháng và năm từ bảng orders.

    • Sử dụng window functions để xếp hạng khách hàng theo tổng số tiền đã chi tiêu.

    • Sử dụng recursive queries để tìm kiếm tất cả các con cháu của một node trong cây thư mục.

    • Sử dụng pivot/unpivot để chuyển đổi dữ liệu từ dạng hàng sang dạng cột và ngược lại.

Ngày 9: SQL Alchemy

  • Tìm hiểu về SQL Alchemy, một ORM (Object-Relational Mapper) mạnh mẽ cho Python.

  • Tìm hiểu cách định nghĩa các models (lớp Python ánh xạ tới các bảng trong cơ sở dữ liệu) và thực hiện các thao tác CRUD (Create, Read, Update, Delete) với cơ sở dữ liệu thông qua SQL Alchemy.

  • Bài tập:

    • Xây dựng một ứng dụng web đơn giản sử dụng Flask và SQL Alchemy để quản lý danh sách người dùng.

    • Thực hiện các thao tác CRUD với cơ sở dữ liệu thông qua ứng dụng web.

Ngày 10: Neo4j và Cypher

  • Tìm hiểu về Neo4j, một cơ sở dữ liệu đồ thị (graph database) phổ biến.

  • Tìm hiểu về Cypher, ngôn ngữ truy vấn của Neo4j.

  • Thực hành xây dựng các mô hình đồ thị và viết các truy vấn Cypher để giải quyết các bài toán liên quan đến mối quan hệ giữa các thực thể.

  • Bài tập:

    • Xây dựng một mô hình đồ thị biểu diễn mối quan hệ giữa các diễn viên và phim trong một cơ sở dữ liệu phim.

    • Viết các truy vấn Cypher để tìm các diễn viên đã đóng chung với một diễn viên cụ thể, tìm các phim có chung thể loại, tìm đường đi ngắn nhất giữa hai diễn viên.

Ngày 11: MongoDB và NoSQL

  • Tìm hiểu về MongoDB, một cơ sở dữ liệu NoSQL phổ biến thuộc loại document-oriented.

  • Tìm hiểu về các khái niệm cơ bản của MongoDB: document, collection, database.

  • Tìm hiểu về các thao tác CRUD (Create, Read, Update, Delete) trong MongoDB.

  • Tìm hiểu về các kiểu dữ liệu và các toán tử truy vấn trong MongoDB.

  • Bài tập:

    • Thiết lập một môi trường MongoDB cục bộ.

    • Tạo một collection để lưu trữ thông tin về sản phẩm (tên, giá, số lượng, mô tả).

    • Thực hiện các truy vấn để tìm kiếm sản phẩm theo tên, giá, hoặc các tiêu chí khác.

Ngày 12: MongoDB Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của MongoDB: aggregation framework (pipeline), indexing, replication, sharding.

  • Thực hành xây dựng các ứng dụng sử dụng MongoDB để lưu trữ và truy vấn dữ liệu.

  • Bài tập:

    • Sử dụng aggregation framework để tính toán tổng doanh số theo tháng, năm hoặc theo sản phẩm.

    • Tạo các index để cải thiện hiệu suất truy vấn.

    • Thiết lập một cụm MongoDB replica set để đảm bảo tính sẵn sàng cao.

Ngày 13: Elasticsearch

  • Tìm hiểu về Elasticsearch, một công cụ tìm kiếm và phân tích dữ liệu phân tán, mã nguồn mở.

  • Tìm hiểu về các khái niệm cơ bản của Elasticsearch: index, document, type, field, mapping.

  • Tìm hiểu về các thao tác CRUD (Create, Read, Update, Delete) và tìm kiếm trong Elasticsearch.

  • Bài tập:

    • Thiết lập một môi trường Elasticsearch cục bộ.

    • Tạo một index để lưu trữ thông tin về bài viết (tiêu đề, nội dung, tác giả, ngày đăng).

    • Thực hiện các truy vấn tìm kiếm để tìm bài viết theo từ khóa, tác giả, hoặc khoảng thời gian.

Ngày 14: Elasticsearch Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của Elasticsearch: phân tích văn bản (text analysis), aggregation, scoring, query DSL.

  • Thực hành xây dựng các ứng dụng tìm kiếm phức tạp sử dụng Elasticsearch.

  • Bài tập:

    • Sử dụng các bộ phân tích văn bản khác nhau (ví dụ: Standard Analyzer, English Analyzer) để xử lý dữ liệu văn bản.

    • Sử dụng aggregation để tính toán các chỉ số thống kê về dữ liệu (ví dụ: số lượng bài viết theo tác giả, số lượng bài viết theo tháng).

    • Sử dụng query DSL để xây dựng các truy vấn tìm kiếm phức tạp (ví dụ: tìm kiếm theo nhiều trường, tìm kiếm theo khoảng cách địa lý).

Ngày 15: Hadoop và HDFS

  • Tìm hiểu về Hadoop, một framework mã nguồn mở để xử lý và lưu trữ dữ liệu lớn.

  • Tìm hiểu về HDFS (Hadoop Distributed File System), hệ thống tập tin phân tán của Hadoop.

  • Tìm hiểu về kiến trúc của Hadoop và cách nó hoạt động.

  • Bài tập:

    • Thiết lập một cụm Hadoop đơn node (single node cluster) trên máy cục bộ.

    • Tải dữ liệu lên HDFS và thực hiện các thao tác cơ bản với dữ liệu (ví dụ: đọc, ghi, xóa).

Ngày 16: MapReduce

  • Tìm hiểu về MapReduce, mô hình lập trình của Hadoop để xử lý dữ liệu lớn một cách song song.

  • Tìm hiểu về các thành phần của MapReduce: Mapper, Reducer, Combiner, Partitioner.

  • Thực hành viết các chương trình MapReduce đơn giản để xử lý dữ liệu.

  • Bài tập:

    • Viết một chương trình MapReduce để đếm số lần xuất hiện của các từ trong một tập tin văn bản lớn.

    • Viết một chương trình MapReduce để tính tổng doanh số theo tháng từ một tập tin dữ liệu bán hàng.

Ngày 17: Hadoop Streaming

  • Tìm hiểu về Hadoop Streaming, một tiện ích cho phép bạn viết các chương trình MapReduce bằng bất kỳ ngôn ngữ lập trình nào (ví dụ: Python, Java, Ruby).

  • Thực hành viết các chương trình MapReduce bằng Python sử dụng Hadoop Streaming.

  • Bài tập:

    • Viết một chương trình MapReduce bằng Python để lọc ra các dòng log có chứa một từ khóa cụ thể.

    • Viết một chương trình MapReduce bằng Python để tính toán trung bình, độ lệch chuẩn của một tập dữ liệu số.

Ngày 18: Hive

  • Tìm hiểu về Hive, một hệ thống data warehouse được xây dựng trên Hadoop, cho phép bạn thực hiện các truy vấn SQL trên dữ liệu lớn.

  • Tìm hiểu về kiến trúc của Hive và cách nó hoạt động.

  • Thực hành viết các truy vấn HiveQL để phân tích dữ liệu.

  • Bài tập:

    • Tạo một bảng Hive để lưu trữ dữ liệu bán hàng.

    • Viết các truy vấn HiveQL để tính tổng doanh số theo tháng, năm, sản phẩm, khu vực.

    • Viết các truy vấn HiveQL để tìm kiếm các sản phẩm bán chạy nhất, các khách hàng chi tiêu nhiều nhất.

Ngày 19: Spark

  • Tìm hiểu về Spark, một công cụ tính toán phân tán nhanh và đa năng cho big data.

  • Tìm hiểu về các khái niệm cơ bản của Spark: RDD (Resilient Distributed Dataset), DataFrame, Dataset.

  • Tìm hiểu về các thao tác cơ bản với RDD, DataFrame, Dataset: transformation, action.

  • Bài tập:

    • Thiết lập một môi trường Spark cục bộ.

    • Tạo một RDD từ một tập tin văn bản và thực hiện các thao tác transformation, action để đếm số từ, tìm từ xuất hiện nhiều nhất.

    • Tạo một DataFrame từ một tập tin CSV và thực hiện các thao tác transformation, action để tính tổng doanh số theo tháng, năm.

Ngày 20: Spark SQL

  • Tìm hiểu về Spark SQL, một module của Spark cho phép bạn thực hiện các truy vấn SQL trên dữ liệu phân tán.

  • Tìm hiểu về cách tạo DataFrame từ các nguồn dữ liệu khác nhau (ví dụ: CSV, JSON, JDBC).

  • Thực hành viết các truy vấn Spark SQL để phân tích dữ liệu.

  • Bài tập:

    • Tạo một DataFrame từ một tập tin CSV chứa dữ liệu bán hàng.

    • Viết các truy vấn Spark SQL để tính tổng doanh số theo tháng, năm, sản phẩm, khu vực.

    • Viết các truy vấn Spark SQL để tìm kiếm các sản phẩm bán chạy nhất, các khách hàng chi tiêu nhiều nhất.

Ngày 21: Spark MLlib

  • Tìm hiểu về Spark MLlib, một thư viện machine learning của Spark cung cấp các thuật toán và công cụ để xây dựng các mô hình dự đoán.

  • Tìm hiểu về các thuật toán phân loại (classification), hồi quy (regression), phân cụm (clustering) trong Spark MLlib.

  • Thực hành xây dựng các mô hình machine learning đơn giản sử dụng Spark MLlib.

  • Bài tập:

    • Xây dựng một mô hình phân loại để dự đoán khách hàng có khả năng mua hàng hay không dựa trên dữ liệu lịch sử.

    • Xây dựng một mô hình hồi quy để dự đoán giá nhà dựa trên các thông tin về diện tích, số phòng ngủ, vị trí.

    • Xây dựng một mô hình phân cụm để phân nhóm khách hàng theo hành vi mua sắm.

Ngày 22: Spark Streaming

  • Tìm hiểu về Spark Streaming, một module của Spark cho phép bạn xử lý dữ liệu thời gian thực (real-time).

  • Tìm hiểu về các khái niệm cơ bản của Spark Streaming: DStream (Discretized Stream), windowing, checkpointing.

  • Thực hành xây dựng các ứng dụng xử lý dữ liệu thời gian thực đơn giản sử dụng Spark Streaming.

  • Bài tập:

    • Thiết lập một môi trường Spark Streaming cục bộ.

    • Xây dựng một ứng dụng Spark Streaming để đọc dữ liệu từ một socket và đếm số từ trong mỗi khoảng thời gian.

    • Xây dựng một ứng dụng Spark Streaming để theo dõi các xu hướng (trending topics) trên Twitter.

Ngày 23: HBase

  • Tìm hiểu về HBase, một cơ sở dữ liệu NoSQL phân tán, mã nguồn mở, column-oriented, được xây dựng trên HDFS.

  • Tìm hiểu về các khái niệm cơ bản của HBase: table, row, column family, column qualifier, cell, timestamp.

  • Tìm hiểu về các thao tác CRUD (Create, Read, Update, Delete) trong HBase.

  • Bài tập:

    • Thiết lập một môi trường HBase cục bộ.

    • Tạo một bảng HBase để lưu trữ thông tin về người dùng (tên, tuổi, địa chỉ, số điện thoại).

    • Thực hiện các truy vấn để lấy thông tin về người dùng theo tên, tuổi, hoặc các tiêu chí khác.

Ngày 24: HBase Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của HBase: filters, coprocessors, bulk load, secondary index.

  • Thực hành xây dựng các ứng dụng sử dụng HBase để lưu trữ và truy vấn dữ liệu lớn.

  • Bài tập:

    • Sử dụng filters để lọc dữ liệu trong HBase theo các tiêu chí cụ thể.

    • Sử dụng coprocessors để thực hiện các tính toán trên dữ liệu HBase.

    • Sử dụng bulk load để tải dữ liệu lớn vào HBase một cách hiệu quả.

    • Sử dụng secondary index để cải thiện hiệu suất truy vấn.

Ngày 25: Git

  • Tìm hiểu về Git, một hệ thống quản lý phiên bản phân tán (distributed version control system) phổ biến.

  • Tìm hiểu về các khái niệm cơ bản của Git: repository, commit, branch, merge, rebase.

  • Thực hành sử dụng các lệnh Git cơ bản: git init, git add, git commit, git branch, git checkout, git merge, git rebase.

  • Bài tập:

    • Tạo một repository Git cục bộ cho một dự án của bạn.

    • Thực hiện các thay đổi trên mã nguồn và commit chúng vào repository.

    • Tạo các branch mới để làm việc trên các tính năng mới hoặc sửa lỗi.

    • Merge các branch lại với nhau khi hoàn thành.

Ngày 26: GitHub

  • Tìm hiểu về GitHub, một nền tảng phát triển phần mềm trực tuyến phổ biến, cung cấp các dịch vụ lưu trữ và quản lý mã nguồn dựa trên Git.

  • Tìm hiểu về các tính năng chính của GitHub: pull request, issue, wiki, project board.

  • Thực hành sử dụng GitHub để cộng tác với người khác trên các dự án mã nguồn mở hoặc các dự án riêng của bạn.

  • Bài tập:

    • Tạo một tài khoản GitHub và tạo một repository mới.

    • Fork một repository mã nguồn mở và thực hiện một số thay đổi trên mã nguồn.

    • Tạo một pull request để đóng góp các thay đổi của bạn vào repository gốc.

Ngày 27: Pytest

  • Tìm hiểu về Pytest, một framework kiểm thử (testing framework) phổ biến cho Python.

  • Tìm hiểu về các khái niệm cơ bản của kiểm thử phần mềm: unit test, integration test, functional test.

  • Thực hành viết các unit test sử dụng Pytest để kiểm tra các chức năng của mã nguồn Python.

  • Bài tập:

    • Viết các unit test cho các hàm trong module xử lý chuỗi mà bạn đã tạo ở ngày 7.

    • Viết các unit test cho các module xử lý dữ liệu mà bạn đã tạo ở ngày 7.

Ngày 28: Kiểm thử tích hợp (Integration Testing)

  • Tìm hiểu về kiểm thử tích hợp, một loại kiểm thử phần mềm tập trung vào việc kiểm tra sự tương tác giữa các thành phần khác nhau của hệ thống.

  • Thực hành viết các kiểm thử tích hợp để kiểm tra sự tương tác giữa các module, các lớp, hoặc các thành phần khác trong ứng dụng của bạn.

  • Bài tập:

    • Viết các kiểm thử tích hợp để kiểm tra sự tương tác giữa module xử lý chuỗi và module xử lý dữ liệu mà bạn đã tạo ở ngày 7.

    • Viết các kiểm thử tích hợp để kiểm tra sự tương tác giữa các lớp trong ứng dụng quản lý thư viện sách mà bạn đã xây dựng ở ngày 5.

Ngày 29: Kafka

  • Tìm hiểu về Kafka, một nền tảng streaming phân tán, mã nguồn mở, được sử dụng để xây dựng các ứng dụng xử lý dữ liệu thời gian thực.

  • Tìm hiểu về các khái niệm cơ bản của Kafka: topic, producer, consumer, broker, partition, offset.

  • Thiết lập một môi trường Kafka cục bộ.

  • Bài tập:

    • Viết một ứng dụng producer để gửi dữ liệu (ví dụ: log, metrics) vào một topic Kafka.

    • Viết một ứng dụng consumer để đọc dữ liệu từ một topic Kafka và xử lý chúng (ví dụ: lưu vào cơ sở dữ liệu, hiển thị lên giao diện).

Ngày 30: Kafka Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của Kafka: replication, fault tolerance, scalability, security.

  • Tìm hiểu về Kafka Connect, một công cụ để tích hợp Kafka với các hệ thống khác (ví dụ: cơ sở dữ liệu, hệ thống file).

  • Bài tập:

    • Thiết lập một cụm Kafka gồm nhiều broker để đảm bảo tính sẵn sàng cao.

    • Sử dụng Kafka Connect để tích hợp Kafka với cơ sở dữ liệu PostgreSQL.

Ngày 31: Spark Streaming với Kafka

  • Tìm hiểu về cách tích hợp Spark Streaming với Kafka để xử lý dữ liệu thời gian thực từ Kafka.

  • Thực hành xây dựng các ứng dụng xử lý dữ liệu thời gian thực phức tạp sử dụng Spark Streaming và Kafka.

  • Bài tập:

    • Xây dựng một ứng dụng Spark Streaming đọc dữ liệu từ một topic Kafka, thực hiện các phép biến đổi trên dữ liệu (ví dụ: lọc, aggregation), và ghi kết quả vào một topic Kafka khác.

    • Xây dựng một ứng dụng Spark Streaming để theo dõi các xu hướng (trending topics) trên Twitter bằng cách đọc dữ liệu từ Kafka.

Ngày 32: Airflow

  • Tìm hiểu về Airflow, một nền tảng mã nguồn mở để lập lịch trình và quản lý các workflow.

  • Tìm hiểu về các khái niệm cơ bản của Airflow: DAG (Directed Acyclic Graph), operator, task, task instance.

  • Cài đặt và thiết lập một môi trường Airflow cục bộ.

  • Bài tập:

    • Tạo một DAG đơn giản để thực hiện một tác vụ hàng ngày (ví dụ: gửi email báo cáo).

    • Tạo một DAG phức tạp hơn để thực hiện một quy trình ETL (Extract, Transform, Load) từ một nguồn dữ liệu đến một đích dữ liệu.

Ngày 33: Airflow Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của Airflow: XCom (cross-communication), triggers, sensors, hooks.

  • Tìm hiểu về cách sử dụng Airflow để lập lịch trình và quản lý các workflow phức tạp trong môi trường production.

  • Bài tập:

    • Sử dụng XCom để truyền dữ liệu giữa các task trong một DAG.

    • Sử dụng triggers để kích hoạt một DAG khi một sự kiện xảy ra (ví dụ: khi một tệp mới được tạo).

    • Sử dụng sensors để theo dõi trạng thái của một hệ thống bên ngoài (ví dụ: kiểm tra xem một tệp có tồn tại hay không).

    • Sử dụng hooks để kết nối Airflow với các hệ thống bên ngoài (ví dụ: cơ sở dữ liệu, hệ thống file).

(Còn tiếp)

-===

Ngày 34: Docker

  • Tìm hiểu về Docker, một nền tảng mã nguồn mở để đóng gói, phân phối và chạy các ứng dụng trong các container.

  • Tìm hiểu về các khái niệm cơ bản của Docker: image, container, Dockerfile, Docker Compose.

  • Cài đặt và thiết lập một môi trường Docker cục bộ.

  • Bài tập:

    • Tạo một Dockerfile để đóng gói một ứng dụng web đơn giản (ví dụ: Flask, Django).

    • Xây dựng một image Docker từ Dockerfile.

    • Chạy một container từ image Docker.

    • Sử dụng Docker Compose để định nghĩa và chạy một ứng dụng đa container (ví dụ: ứng dụng web với cơ sở dữ liệu).

Ngày 35: Docker Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của Docker: networking, volumes, secrets, Docker Swarm.

  • Tìm hiểu về cách sử dụng Docker trong môi trường production.

  • Bài tập:

    • Thiết lập một mạng Docker để cho phép các container giao tiếp với nhau.

    • Sử dụng volumes để lưu trữ dữ liệu của container một cách bền vững.

    • Sử dụng secrets để lưu trữ các thông tin nhạy cảm (ví dụ: mật khẩu, khóa API).

    • Sử dụng Docker Swarm để triển khai và quản lý một cụm Docker.

Ngày 36: Kubernetes

  • Tìm hiểu về Kubernetes, một hệ thống mã nguồn mở để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng container.

  • Tìm hiểu về các khái niệm cơ bản của Kubernetes: pod, service, deployment, replica set, namespace.

  • Thiết lập một môi trường Kubernetes cục bộ (ví dụ: minikube, kind).

  • Bài tập:

    • Triển khai một ứng dụng web đơn giản lên Kubernetes.

    • Sử dụng các service để định tuyến traffic đến các pod.

    • Sử dụng các deployment để quản lý vòng đời của các pod.

Ngày 37: Kubernetes Nâng Cao

  • Tìm hiểu về các tính năng nâng cao của Kubernetes: ConfigMap, Secret, Ingress, Persistent Volume, StatefulSet.

  • Tìm hiểu về cách sử dụng Kubernetes trong môi trường production.

  • Bài tập:

    • Sử dụng ConfigMap và Secret để lưu trữ các cấu hình và thông tin nhạy cảm của ứng dụng.

    • Sử dụng Ingress để định tuyến traffic từ bên ngoài vào cluster Kubernetes.

    • Sử dụng Persistent Volume để lưu trữ dữ liệu của ứng dụng một cách bền vững.

    • Sử dụng StatefulSet để quản lý các ứng dụng stateful (ví dụ: cơ sở dữ liệu).

Ngày 38: API và Microservices

  • Tìm hiểu về API (Application Programming Interface) và kiến trúc microservices.

  • Tìm hiểu về các loại API khác nhau: REST, SOAP, GraphQL.

  • Tìm hiểu về các thư viện và framework phổ biến để xây dựng API trong Python: Flask, FastAPI, Django REST Framework.

  • Bài tập:

    • Xây dựng một API RESTful đơn giản sử dụng Flask hoặc FastAPI để cung cấp thông tin về sản phẩm.

    • Xây dựng một ứng dụng microservices đơn giản gồm nhiều API RESTful giao tiếp với nhau.

Ngày 39: FastAPI

  • Tìm hiểu sâu về FastAPI, một framework web hiện đại, nhanh chóng và hiệu quả cao để xây dựng API trong Python.

  • Tìm hiểu về các tính năng nổi bật của FastAPI: type hints, automatic data validation, automatic documentation generation (OpenAPI/Swagger).

  • Thực hành xây dựng các API RESTful phức tạp sử dụng FastAPI.

  • Bài tập:

    • Xây dựng một API RESTful để quản lý danh sách người dùng, sử dụng FastAPI và cơ sở dữ liệu PostgreSQL.

    • Thêm các tính năng xác thực (authentication) và phân quyền (authorization) vào API.

Ngày 40: Flask

  • Tìm hiểu về Flask, một microframework web phổ biến và linh hoạt cho Python.

  • Tìm hiểu về các khái niệm cơ bản của Flask: routes, views, templates, blueprints.

  • Thực hành xây dựng các ứng dụng web đơn giản sử dụng Flask.

  • Bài tập:

    • Xây dựng một ứng dụng web blog đơn giản sử dụng Flask và cơ sở dữ liệu SQLite.

    • Thêm các tính năng đăng nhập, đăng ký, đăng bài viết, bình luận vào ứng dụng.

Ngày 41: Kiểm thử API (API Testing)

  • Tìm hiểu về kiểm thử API, một loại kiểm thử phần mềm tập trung vào việc kiểm tra tính đúng đắn và hiệu suất của các API.

  • Tìm hiểu về các công cụ và thư viện phổ biến để kiểm thử API trong Python: requests, pytest, Postman.

  • Bài tập:

    • Viết các kiểm thử API để kiểm tra các endpoint của API RESTful mà bạn đã xây dựng ở ngày 38 và 39.

    • Kiểm tra các trường hợp khác nhau như: yêu cầu thành công, yêu cầu thất bại (do lỗi dữ liệu, lỗi xác thực), yêu cầu có tải trọng lớn.

Ngày 42: Docker và Kiểm thử Liên tục (Continuous Integration - CI)

  • Tìm hiểu về cách sử dụng Docker để tạo môi trường kiểm thử cô lập và nhất quán.

  • Tìm hiểu về các công cụ CI phổ biến như Jenkins, Travis CI, GitHub Actions.

  • Thiết lập một quy trình CI đơn giản để tự động chạy các kiểm thử khi có thay đổi trên mã nguồn.

  • Bài tập:

    • Tạo một Dockerfile để xây dựng một image chứa môi trường kiểm thử cho dự án của bạn.

    • Thiết lập một quy trình CI trên GitHub Actions để tự động chạy các kiểm thử mỗi khi có commit mới vào nhánh chính.

Ngày 43: Triển khai ứng dụng với Docker (Continuous Deployment - CD)

  • Tìm hiểu về triển khai liên tục (CD), một quy trình tự động hóa việc triển khai các thay đổi mã nguồn lên môi trường production.

  • Tìm hiểu về cách sử dụng Docker để đóng gói và triển khai ứng dụng một cách dễ dàng và nhất quán.

  • Bài tập:

    • Thiết lập một quy trình CD đơn giản để tự động triển khai ứng dụng của bạn lên một máy chủ từ xa khi có thay đổi trên nhánh chính.

    • Sử dụng Docker Compose để triển khai ứng dụng đa container.

Ngày 44: Giới thiệu về Kubernetes

  • Tìm hiểu về Kubernetes, một hệ thống mã nguồn mở để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng container.

  • Tìm hiểu về các khái niệm cơ bản của Kubernetes: cluster, node, pod, service, deployment, replica set.

  • Thiết lập một cluster Kubernetes đơn giản trên máy cục bộ sử dụng Minikube hoặc Kind.

  • Bài tập:

    • Triển khai ứng dụng web đơn giản (ví dụ: Flask, FastAPI) lên cluster Kubernetes.

    • Sử dụng kubectl để quản lý các tài nguyên Kubernetes.

Ngày 45: Kubernetes Nâng Cao

  • Tìm hiểu về các khái niệm nâng cao của Kubernetes: ConfigMap, Secret, Ingress, Persistent Volume, StatefulSet.

  • Tìm hiểu về các chiến lược triển khai ứng dụng trên Kubernetes: rolling update, blue/green deployment, canary deployment.

  • Bài tập:

    • Sử dụng ConfigMap và Secret để quản lý cấu hình và bí mật của ứng dụng.

    • Sử dụng Ingress để định tuyến traffic đến các service trong cluster Kubernetes.

    • Sử dụng Persistent Volume để lưu trữ dữ liệu của ứng dụng một cách bền vững.

    • Sử dụng StatefulSet để triển khai các ứng dụng stateful như cơ sở dữ liệu.

Ngày 46: Spark Nâng Cao

  • Tìm hiểu về Spark Structured Streaming, một API xử lý stream dựa trên DataFrame/Dataset, cho phép bạn áp dụng các truy vấn SQL và các phép biến đổi DataFrame quen thuộc lên dữ liệu streaming.

  • Tìm hiểu về các khái niệm watermark, trigger, stateful operations trong Spark Structured Streaming.

  • Bài tập:

    • Xây dựng một ứng dụng Spark Structured Streaming để đọc dữ liệu từ Kafka, thực hiện các phép biến đổi, và ghi kết quả vào một bảng Hive.

    • Tìm hiểu về cách xử lý dữ liệu muộn (late data) và out-of-order data trong Spark Structured Streaming.

Ngày 47: Spark GraphX

  • Tìm hiểu về Spark GraphX, một API của Spark để làm việc với các đồ thị (graph).

  • Tìm hiểu về các khái niệm cơ bản của GraphX: vertex, edge, property graph.

  • Tìm hiểu về các thuật toán đồ thị phổ biến được hỗ trợ bởi GraphX: PageRank, Connected Components, Triangle Counting.

  • Bài tập:

    • Xây dựng một đồ thị biểu diễn mối quan hệ giữa các người dùng trên mạng xã hội.

    • Sử dụng GraphX để tính toán PageRank của các người dùng.

    • Sử dụng GraphX để tìm các cộng đồng (communities) trong đồ thị.

Ngày 48: Spark với R

  • Tìm hiểu về SparkR, một package R cho phép bạn tương tác với Spark từ R.

  • Tìm hiểu về cách sử dụng SparkR để phân tích dữ liệu lớn bằng R.

  • Bài tập:

    • Tạo một DataFrame Spark từ một tập tin CSV sử dụng SparkR.

    • Thực hiện các phép biến đổi và phân tích dữ liệu trên DataFrame sử dụng các hàm của R.

    • Xây dựng một mô hình machine learning đơn giản sử dụng SparkR và một thư viện machine learning của R (ví dụ: glm, randomForest).

Ngày 49: Machine Learning với Spark

  • Ôn tập các khái niệm cơ bản về machine learning: supervised learning, unsupervised learning, reinforcement learning.

  • Tìm hiểu về các thuật toán machine learning phổ biến: linear regression, logistic regression, decision trees, random forests, support vector machines, k-means clustering.

  • Thực hành xây dựng các mô hình machine learning sử dụng Spark MLlib.

  • Bài tập:

    • Xây dựng một mô hình dự đoán giá nhà sử dụng linear regression và Spark MLlib.

    • Xây dựng một mô hình phân loại thư rác sử dụng logistic regression và Spark MLlib.

    • Xây dựng một mô hình phân cụm khách hàng sử dụng k-means clustering và Spark MLlib.

Ngày 50: Machine Learning Nâng Cao với Spark

  • Tìm hiểu về các kỹ thuật nâng cao trong machine learning: feature engineering, hyperparameter tuning, model evaluation, ensemble learning.

  • Tìm hiểu về các thư viện machine learning khác cho Spark: XGBoost, LightGBM.

  • Bài tập:

    • Thực hiện feature engineering trên một tập dữ liệu để cải thiện hiệu suất của mô hình machine learning.

    • Sử dụng cross-validation để đánh giá hiệu suất của mô hình machine learning và chọn các hyperparameter tối ưu.

    • Xây dựng một mô hình ensemble learning sử dụng nhiều thuật toán khác nhau để cải thiện độ chính xác của dự đoán.

Ngày 51: Xử lý ngôn ngữ tự nhiên (NLP) với Spark NLP

  • Tìm hiểu về Spark NLP, một thư viện xử lý ngôn ngữ tự nhiên được xây dựng trên Spark.

  • Tìm hiểu về các tác vụ NLP cơ bản: phân tách từ (tokenization), gán nhãn từ loại (part-of-speech tagging), nhận dạng thực thể (named entity recognition), phân tích tình cảm (sentiment analysis).

  • Thực hành xây dựng các ứng dụng NLP đơn giản sử dụng Spark NLP.

  • Bài tập:

    • Xây dựng một ứng dụng phân tích tình cảm (sentiment analysis) trên các bài đánh giá sản phẩm sử dụng Spark NLP.

    • Xây dựng một ứng dụng nhận dạng thực thể (named entity recognition) trên các bài báo sử dụng Spark NLP.

Ngày 52: Xử lý dữ liệu lớn với PySpark

  • Tìm hiểu về PySpark, API Python của Spark.

  • Thực hành đọc và ghi dữ liệu từ các nguồn khác nhau (ví dụ: CSV, JSON, Parquet, JDBC) sử dụng PySpark.

  • Thực hiện các phép biến đổi và phân tích dữ liệu trên các DataFrame PySpark.

  • Bài tập:

    • Đọc một tập dữ liệu lớn từ HDFS hoặc S3 sử dụng PySpark.

    • Thực hiện các phép biến đổi dữ liệu như lọc, aggregation, join sử dụng PySpark.

    • Ghi kết quả vào một định dạng khác (ví dụ: Parquet, CSV).

Ngày 53: Tối ưu hóa hiệu năng Spark

  • Tìm hiểu về các kỹ thuật tối ưu hóa hiệu năng Spark: caching, persistence, partitioning, broadcast variables.

  • Tìm hiểu về cách sử dụng Spark UI và các công cụ khác để giám sát và điều chỉnh hiệu năng của các ứng dụng Spark.

  • Bài tập:

    • Tối ưu hóa hiệu năng của một ứng dụng Spark đã có bằng cách áp dụng các kỹ thuật caching, persistence, partitioning.

    • Sử dụng Spark UI để phân tích hiệu năng của ứng dụng và xác định các điểm nghẽn.

Ngày 54: Kiến trúc Lambda

  • Tìm hiểu về kiến trúc Lambda, một kiến trúc xử lý dữ liệu lớn kết hợp cả batch processing và stream processing.

  • Tìm hiểu về các thành phần của kiến trúc Lambda: batch layer, speed layer, serving layer.

  • Tìm hiểu về cách sử dụng Spark, Spark Streaming, và các công nghệ khác để xây dựng một kiến trúc Lambda.

  • Bài tập:

    • Thiết kế một kiến trúc Lambda để xử lý dữ liệu log từ một ứng dụng web.

    • Xây dựng một phần của kiến trúc Lambda sử dụng Spark Streaming để tính toán các số liệu thống kê thời gian thực từ dữ liệu log.

Ngày 55: Kiến trúc Kappa

  • Tìm hiểu về kiến trúc Kappa, một kiến trúc xử lý dữ liệu lớn dựa trên stream processing.

  • Tìm hiểu về sự khác biệt giữa kiến trúc Lambda và Kappa.

  • Tìm hiểu về cách sử dụng Kafka và Spark Streaming để xây dựng một kiến trúc Kappa.

  • Bài tập:

    • Thiết kế một kiến trúc Kappa để xử lý dữ liệu từ một ứng dụng IoT.

    • Xây dựng một phần của kiến trúc Kappa sử dụng Kafka và Spark Streaming để tính toán các số liệu thống kê thời gian thực từ dữ liệu IoT.

  • Tìm hiểu về Apache Flink, một framework xử lý stream mã nguồn mở, hỗ trợ cả batch processing và stream processing.

  • Tìm hiểu về các khái niệm cơ bản của Flink: DataStream, DataSet, window, time, state.

  • Tìm hiểu về các API của Flink: DataStream API, DataSet API, Table API, SQL.

  • Bài tập:

    • Thiết lập một môi trường Flink cục bộ.

    • Xây dựng một ứng dụng Flink đơn giản để đọc dữ liệu từ Kafka, thực hiện các phép biến đổi, và ghi kết quả vào một sink khác (ví dụ: Kafka, Cassandra).

  • Tìm hiểu về các tính năng nâng cao của Flink: exactly-once semantics, savepoints, state management, dynamic scaling.

  • Tìm hiểu về Flink SQL và Table API, cho phép bạn thực hiện các truy vấn SQL trên dữ liệu streaming.

  • Bài tập:

    • Xây dựng một ứng dụng Flink phức tạp hơn để thực hiện một phép tính phức tạp trên dữ liệu streaming (ví dụ: tính toán trung bình, độ lệch chuẩn, phân vị của một tập dữ liệu số).

    • Sử dụng Flink SQL để thực hiện các truy vấn trên dữ liệu streaming.

Ngày 58: Apache Beam

  • Tìm hiểu về Apache Beam, một mô hình lập trình thống nhất cho cả batch processing và stream processing.

  • Tìm hiểu về các khái niệm cơ bản của Beam: PCollection, PTransform, pipeline, runner.

  • Tìm hiểu về các runner của Beam: DirectRunner, DataflowRunner, SparkRunner, FlinkRunner.

  • Bài tập:

    • Viết một pipeline Beam đơn giản để đọc dữ liệu từ một nguồn (ví dụ: CSV, JSON), thực hiện các phép biến đổi, và ghi kết quả vào một đích (ví dụ: BigQuery, Elasticsearch).

    • Chạy pipeline Beam trên các runner khác nhau (ví dụ: DirectRunner, DataflowRunner).

Ngày 59: Dữ liệu theo thời gian thực (Real-Time Data)

  • Tìm hiểu về các khái niệm và thách thức của xử lý dữ liệu thời gian thực.

  • Tìm hiểu về các mô hình xử lý dữ liệu thời gian thực: event-driven, micro-batch, continuous processing.

  • Tìm hiểu về các ứng dụng của xử lý dữ liệu thời gian thực: giám sát hệ thống, phát hiện gian lận, phân tích hành vi người dùng.

  • Bài tập:

    • Thiết kế một hệ thống xử lý dữ liệu thời gian thực để giám sát hiệu suất của một ứng dụng web.

    • Xây dựng một mô hình phát hiện gian lận thời gian thực sử dụng dữ liệu giao dịch.

Ngày 60: Giới thiệu về MLOps

  • Tìm hiểu về MLOps (Machine Learning Operations), một tập hợp các thực tiễn tốt nhất để triển khai, quản lý và mở rộng các hệ thống machine learning trong môi trường production.

  • Tìm hiểu về các giai đoạn của vòng đời MLOps: data preparation, model training, model evaluation, model deployment, model monitoring.

  • Tìm hiểu về các công cụ và nền tảng MLOps phổ biến: MLflow, Kubeflow, TFX.

Ngày 61: MLOps - Quản lý mô hình (Model Management)

  • Tìm hiểu về các khái niệm và công cụ quản lý mô hình trong MLOps.

  • Tìm hiểu về cách đóng gói (packaging) và phiên bản hóa (versioning) mô hình.

  • Tìm hiểu về các kho lưu trữ mô hình (model registry) như MLflow Model Registry.

  • Bài tập:

    • Sử dụng MLflow để theo dõi các thí nghiệm (experiment) và lưu trữ các mô hình.

    • Tạo một model registry đơn giản để quản lý các phiên bản của mô hình.

Ngày 62: MLOps - Triển khai mô hình (Model Deployment)

  • Tìm hiểu về các phương pháp triển khai mô hình: batch inference, online inference.

  • Tìm hiểu về các công cụ triển khai mô hình như TensorFlow Serving, KFServing, Seldon Core.

  • Bài tập:

    • Triển khai một mô hình đơn giản (ví dụ: mô hình phân loại) sử dụng TensorFlow Serving.

    • Tạo một API RESTful để phục vụ các yêu cầu dự đoán từ mô hình đã triển khai.

Ngày 63: MLOps - Giám sát mô hình (Model Monitoring)

  • Tìm hiểu về tầm quan trọng của việc giám sát mô hình trong môi trường production.

  • Tìm hiểu về các chỉ số cần theo dõi: độ chính xác (accuracy), độ trôi dạt (drift), độ trễ (latency).

  • Tìm hiểu về các công cụ giám sát mô hình như Evidently AI, Prometheus, Grafana.

  • Bài tập:

    • Thiết lập một hệ thống giám sát đơn giản cho mô hình đã triển khai ở ngày 62.

    • Theo dõi các chỉ số hiệu suất của mô hình và thiết lập các cảnh báo khi có sự cố.

Ngày 64: MLOps - Tái huấn luyện mô hình (Model Retraining)

  • Tìm hiểu về các chiến lược tái huấn luyện mô hình: định kỳ (scheduled), theo sự kiện (event-triggered), liên tục (continuous).

  • Tìm hiểu về cách tự động hóa quy trình tái huấn luyện mô hình.

  • Bài tập:

    • Thiết lập một quy trình tái huấn luyện mô hình định kỳ cho mô hình đã triển khai ở ngày 62.

    • Thử nghiệm các chiến lược tái huấn luyện khác nhau và đánh giá hiệu quả.

Ngày 65: MLOps - Quản lý đường ống (Pipeline Management)

  • Tìm hiểu về các công cụ quản lý đường ống (pipeline) như Kubeflow Pipelines, Apache Airflow.

  • Tìm hiểu về cách xây dựng và quản lý các đường ống MLOps phức tạp.

  • Bài tập:

    • Xây dựng một đường ống MLOps đơn giản sử dụng Kubeflow Pipelines hoặc Apache Airflow.

    • Đường ống này nên bao gồm các bước: đọc dữ liệu, tiền xử lý dữ liệu, huấn luyện mô hình, đánh giá mô hình, triển khai mô hình.

Dự án MLOps: Xây dựng hệ thống dự đoán giá nhà

Ngày 66: Thu thập và tiền xử lý dữ liệu

  • Mục tiêu: Thu thập dữ liệu về giá nhà từ các nguồn công khai (ví dụ: Zillow, Redfin) hoặc sử dụng một bộ dữ liệu có sẵn (ví dụ: California Housing dataset).

  • Công việc:

    • Xác định các nguồn dữ liệu phù hợp.

    • Thu thập dữ liệu bằng cách sử dụng các công cụ như web scraping, API, hoặc tải xuống trực tiếp.

    • Tiền xử lý dữ liệu: làm sạch dữ liệu (xử lý giá trị thiếu, outliers), chuyển đổi dữ liệu (one-hot encoding, scaling), và tạo các đặc trưng mới.

    • Lưu trữ dữ liệu đã xử lý vào một định dạng phù hợp (ví dụ: CSV, Parquet).

Ngày 67: Huấn luyện mô hình

  • Mục tiêu: Huấn luyện một mô hình machine learning để dự đoán giá nhà dựa trên các đặc trưng đã được xử lý.

  • Công việc:

    • Lựa chọn một thuật toán machine learning phù hợp (ví dụ: linear regression, random forest, gradient boosting).

    • Chia dữ liệu thành tập huấn luyện (training set) và tập kiểm tra (test set).

    • Huấn luyện mô hình trên tập huấn luyện và đánh giá hiệu suất trên tập kiểm tra.

    • Điều chỉnh siêu tham số (hyperparameter tuning) để cải thiện hiệu suất mô hình.

    • Lưu trữ mô hình đã huấn luyện.

Ngày 68: Đóng gói và triển khai mô hình

  • Mục tiêu: Đóng gói mô hình đã huấn luyện thành một định dạng có thể triển khai (ví dụ: Docker image, SavedModel) và triển khai lên một môi trường production (ví dụ: Kubernetes, cloud service).

  • Công việc:

    • Sử dụng MLflow hoặc một công cụ tương tự để đóng gói mô hình.

    • Triển khai mô hình lên môi trường production đã chọn.

    • Tạo một API RESTful để phục vụ các yêu cầu dự đoán từ mô hình đã triển khai.

Ngày 69: Giám sát và tái huấn luyện mô hình

  • Mục tiêu: Thiết lập một hệ thống giám sát để theo dõi hiệu suất của mô hình trong môi trường production và tự động kích hoạt quá trình tái huấn luyện khi cần thiết.

  • Công việc:

    • Thu thập và ghi lại các số liệu thống kê về hiệu suất của mô hình (ví dụ: độ chính xác, độ trôi dạt).

    • Thiết lập các ngưỡng cảnh báo để phát hiện các vấn đề về hiệu suất.

    • Tự động kích hoạt quá trình tái huấn luyện mô hình khi hiệu suất giảm xuống dưới ngưỡng cho phép.

Ngày 70: Tối ưu hóa và cải tiến hệ thống

  • Mục tiêu: Tối ưu hóa hiệu suất, độ tin cậy và khả năng mở rộng của hệ thống.

  • Công việc:

    • Tối ưu hóa quy trình thu thập và xử lý dữ liệu.

    • Tối ưu hóa hiệu suất của mô hình machine learning.

    • Tối ưu hóa quy trình triển khai và giám sát mô hình.

    • Xây dựng các tính năng mới để cải thiện trải nghiệm người dùng.

Ngày 71: Apache Samza

  • Tìm hiểu về kiến trúc của Apache Samza, các thành phần chính (StreamProcessor, StreamTask, JobCoordinator), cách thức hoạt động, và các ưu nhược điểm so với các framework xử lý stream khác.

  • Tìm hiểu cách triển khai một ứng dụng Samza đơn giản trên một cụm Kafka. Thực hành viết một ứng dụng Samza để xử lý dữ liệu từ một topic Kafka, thực hiện các phép biến đổi đơn giản (ví dụ: lọc, đếm), và ghi kết quả vào một topic khác.

  • Bài tập:

    • Nghiên cứu về các trường hợp sử dụng Samza trong thực tế.

    • Tìm hiểu về cách Samza xử lý lỗi và đảm bảo tính nhất quán của dữ liệu (exactly-once semantics).

Ngày 72: Apache Storm

  • Tìm hiểu về kiến trúc của Apache Storm, các thành phần chính (spout, bolt, topology), cách thức hoạt động, và các ưu nhược điểm so với Samza.

  • Tìm hiểu về Trident, một API cấp cao của Storm giúp đơn giản hóa việc xử lý dữ liệu stateful. Thực hành viết một ứng dụng Storm sử dụng Trident để tính toán các giá trị tổng hợp (ví dụ: số lượt xem trang web theo thời gian thực).

  • Bài tập:

    • Tìm hiểu về các trường hợp sử dụng Storm trong thực tế.

    • Tìm hiểu về cách Storm đảm bảo tính chịu lỗi và khả năng mở rộng.

Ngày 73: Apache Heron

  • Tìm hiểu về Heron, một framework xử lý stream được phát triển bởi Twitter, là sự kế thừa của Storm. So sánh Heron với Storm về kiến trúc, hiệu suất, khả năng mở rộng, và các tính năng khác.

  • Tìm hiểu về cách triển khai và quản lý một ứng dụng Heron trên một cụm production. Tìm hiểu về các công cụ giám sát và gỡ lỗi (debugging) cho Heron.

  • Bài tập:

    • Chuyển đổi một ứng dụng Storm sang Heron và so sánh hiệu suất.

    • Tìm hiểu về các trường hợp sử dụng Heron trong thực tế.

Ngày 74: Apache Cassandra

  • Tìm hiểu về kiến trúc của Apache Cassandra, các khái niệm cơ bản (node, cluster, keyspace, table, column family, row, column), mô hình dữ liệu, và các ưu nhược điểm so với các hệ thống lưu trữ khác.

  • Tìm hiểu về cách thiết kế mô hình dữ liệu cho Cassandra. Thực hành tạo một keyspace và một table trong Cassandra, sau đó chèn, cập nhật, xóa và truy vấn dữ liệu.

  • Bài tập:

    • Thiết kế một mô hình dữ liệu cho một ứng dụng mạng xã hội sử dụng Cassandra.

    • Tìm hiểu về các trường hợp sử dụng Cassandra trong thực tế.

Ngày 75: Cassandra Nâng Cao

  • Tìm hiểu về CQL (Cassandra Query Language), ngôn ngữ truy vấn của Cassandra. Thực hành viết các truy vấn CQL phức tạp để truy vấn dữ liệu trong Cassandra (ví dụ: sử dụng các toán tử IN, CONTAINS, LIKE, các hàm aggregate).

  • Tìm hiểu về các tính năng nâng cao của Cassandra như Lightweight Transactions (LWT), materialized views, secondary index, counters. Tìm hiểu về cách Cassandra đảm bảo tính nhất quán của dữ liệu (tunable consistency).

  • Bài tập:

    • Sử dụng LWT để thực hiện các thao tác cập nhật dữ liệu an toàn trong Cassandra.

    • Tạo một materialized view để tăng tốc độ truy vấn.

    • Tìm hiểu về các kỹ thuật tuning Cassandra để tối ưu hóa hiệu suất.

Ngày 76: Apache HBase

  • Tìm hiểu về kiến trúc của Apache HBase, các thành phần chính (HMaster, HRegionServer, ZooKeeper), cách thức hoạt động, và các ưu nhược điểm so với Cassandra.

  • Tìm hiểu về mô hình dữ liệu của HBase và cách nó khác với các cơ sở dữ liệu quan hệ và document-oriented.

  • Thực hành tạo một table trong HBase, sau đó chèn, cập nhật, xóa và truy vấn dữ liệu bằng HBase Shell hoặc API Java.

  • Bài tập:

    • Thiết kế một mô hình dữ liệu cho một ứng dụng IoT sử dụng HBase.

    • Tìm hiểu về các trường hợp sử dụng HBase trong thực tế.

    • Tìm hiểu về các kỹ thuật tuning HBase để tối ưu hóa hiệu suất.

Ngày 77: Amazon DynamoDB

  • Tìm hiểu về Amazon DynamoDB, một cơ sở dữ liệu NoSQL được quản lý hoàn toàn, cung cấp hiệu suất ở mức mili giây cho mọi quy mô.

  • Tìm hiểu về các khái niệm cơ bản của DynamoDB: table, item, attribute, primary key, secondary index.

  • Tìm hiểu về các tính năng của DynamoDB như on-demand capacity, auto scaling, global tables.

  • Bài tập:

    • Tạo một table trong DynamoDB sử dụng AWS Management Console hoặc AWS CLI.

    • Thực hiện các thao tác CRUD với dữ liệu trong DynamoDB.

    • Tìm hiểu về các trường hợp sử dụng DynamoDB trong thực tế.

Ngày 78: So sánh các hệ thống lưu trữ Big Data

  • So sánh các hệ thống lưu trữ Big Data đã học (Cassandra, HBase, DynamoDB) về các khía cạnh như mô hình dữ liệu, khả năng mở rộng, hiệu suất, tính nhất quán, tính sẵn sàng, chi phí.

  • Tìm hiểu về các yếu tố cần xem xét khi lựa chọn một hệ thống lưu trữ Big Data cho một ứng dụng cụ thể.

  • Bài tập:

    • Đọc các bài viết và tài liệu so sánh các hệ thống lưu trữ Big Data khác nhau.

    • Thực hiện một bài đánh giá nhỏ để so sánh hiệu suất của Cassandra, HBase, và DynamoDB trong một trường hợp sử dụng cụ thể.

    • Nghiên cứu về các hệ thống lưu trữ Big Data khác như Apache Kudu, Google Bigtable.

Ngày 79: Data Warehouse

  • Tìm hiểu về khái niệm data warehouse, các đặc điểm, lợi ích và ứng dụng của nó trong việc hỗ trợ ra quyết định và phân tích kinh doanh.

  • Tìm hiểu về các kiến trúc data warehouse phổ biến: star schema, snowflake schema, galaxy schema.

  • Tìm hiểu về các thành phần của một data warehouse: staging area, data mart, data warehouse, metadata repository.

  • Bài tập:

    • Thiết kế một star schema đơn giản cho một doanh nghiệp bán lẻ.

    • Nghiên cứu về các data warehouse phổ biến như Amazon Redshift, Google BigQuery, Snowflake.

Ngày 80: ETL (Extract, Transform, Load)

  • Tìm hiểu về quy trình ETL (Extract, Transform, Load), một quy trình quan trọng trong việc xây dựng và duy trì một data warehouse.

  • Tìm hiểu về các công cụ ETL phổ biến: Apache NiFi, Talend, Pentaho.

  • Bài tập:

    • Sử dụng Apache NiFi để xây dựng một pipeline ETL đơn giản để trích xuất dữ liệu từ một tệp CSV, chuyển đổi dữ liệu và tải vào một bảng trong PostgreSQL.

    • Nghiên cứu và so sánh các công cụ ETL khác nhau.

Ngày 81: Apache NiFi

  • Tìm hiểu sâu về Apache NiFi, một công cụ tích hợp dữ liệu mạnh mẽ, cho phép bạn tự động hóa việc di chuyển và chuyển đổi dữ liệu giữa các hệ thống khác nhau.

  • Tìm hiểu về các khái niệm cơ bản của NiFi: processor, connection, flowfile, queue, repository.

  • Thực hành xây dựng một pipeline NiFi phức tạp hơn, sử dụng các processor khác nhau để thực hiện các tác vụ như đọc dữ liệu từ nhiều nguồn, lọc dữ liệu, chuyển đổi dữ liệu, định tuyến dữ liệu, và ghi dữ liệu vào nhiều đích.

  • Bài tập:

    • Xây dựng một pipeline NiFi để thu thập dữ liệu từ Twitter, làm sạch dữ liệu, phân tích sentiment, và lưu trữ kết quả vào Elasticsearch.

Ngày 82: Talend

  • Tìm hiểu về Talend, một nền tảng tích hợp dữ liệu mã nguồn mở và thương mại, cung cấp một bộ công cụ đồ họa để xây dựng các pipeline ETL/ELT.

  • Tìm hiểu về các thành phần chính của Talend: Talend Open Studio, Talend Data Fabric, Talend Cloud.

  • Thực hành xây dựng một pipeline ETL/ELT đơn giản sử dụng Talend Open Studio.

  • Bài tập:

    • Sử dụng Talend Open Studio để trích xuất dữ liệu từ một cơ sở dữ liệu MySQL, chuyển đổi dữ liệu và tải vào một cơ sở dữ liệu khác (ví dụ: PostgreSQL).

Ngày 83: Pentaho

  • Tìm hiểu về Pentaho, một nền tảng tích hợp dữ liệu mã nguồn mở và thương mại, cung cấp một bộ công cụ đồ họa để xây dựng các pipeline ETL/ELT và báo cáo.

  • Tìm hiểu về các thành phần chính của Pentaho: Pentaho Data Integration (PDI), Pentaho Business Analytics (PBA).

  • Thực hành xây dựng một pipeline ETL/ELT đơn giản sử dụng PDI.

  • Bài tập:

    • Sử dụng PDI để trích xuất dữ liệu từ một tệp CSV, chuyển đổi dữ liệu và tải vào một cơ sở dữ liệu.

    • Sử dụng PBA để tạo một báo cáo đơn giản từ dữ liệu đã được tải vào cơ sở dữ liệu.

Ngày 84: So sánh các công cụ ETL

  • So sánh các công cụ ETL đã học (NiFi, Talend, Pentaho) về các khía cạnh như giao diện người dùng, tính năng, hiệu suất, chi phí.

  • Tìm hiểu về các yếu tố cần xem xét khi lựa chọn một công cụ ETL cho một dự án cụ thể.

  • Bài tập:

    • Đọc các bài viết và tài liệu so sánh các công cụ ETL khác nhau.

    • Thực hiện một bài đánh giá nhỏ để so sánh hiệu suất của NiFi, Talend, và Pentaho trong một trường hợp sử dụng cụ thể.

Ngày 85: Thiết kế Data Warehouse

  • Ôn tập kiến thức về data warehouse và các mô hình thiết kế (star schema, snowflake schema).

  • Tìm hiểu về các bước trong quá trình thiết kế data warehouse: thu thập yêu cầu, phân tích nguồn dữ liệu, thiết kế mô hình dữ liệu, thiết kế ETL, triển khai và kiểm thử.

  • Bài tập:

    • Thiết kế một data warehouse cho một doanh nghiệp thương mại điện tử, bao gồm các thông tin về sản phẩm, khách hàng, đơn hàng, và doanh số.

Ngày 86: Xây dựng Data Warehouse

  • Tìm hiểu về các công cụ và kỹ thuật để xây dựng một data warehouse: sử dụng các công cụ ETL, xây dựng các bảng fact và dimension, tạo các chỉ mục, tối ưu hóa truy vấn.

  • Thực hành xây dựng một data warehouse đơn giản sử dụng các công cụ và kỹ thuật đã học.

  • Bài tập:

    • Xây dựng một data warehouse cho doanh nghiệp thương mại điện tử đã thiết kế ở ngày 85.

    • Tải dữ liệu từ các nguồn khác nhau vào data warehouse.

    • Tạo các bảng fact và dimension, và các chỉ mục cần thiết.

Ngày 87: OLAP (Online Analytical Processing)

  • Tìm hiểu về OLAP, một kỹ thuật phân tích dữ liệu đa chiều, cho phép người dùng phân tích dữ liệu từ nhiều góc độ khác nhau.

  • Tìm hiểu về các khái niệm cơ bản của OLAP: cube, dimension, measure, hierarchy, drill down, roll up, slice and dice.

  • Tìm hiểu về các công cụ OLAP phổ biến: Microsoft Analysis Services, Oracle Essbase, SAP BW.

  • Bài tập:

    • Sử dụng một công cụ OLAP để phân tích dữ liệu trong data warehouse đã xây dựng ở ngày 86.

    • Tạo các báo cáo và dashboard để trực quan hóa dữ liệu.

Ngày 88-90: Dự án Data Warehouse và ETL

  • Áp dụng các kiến thức đã học để xây dựng một dự án data warehouse và ETL hoàn chỉnh.

  • Dự án có thể bao gồm các bước: thu thập yêu cầu, phân tích nguồn dữ liệu, thiết kế mô hình dữ liệu, thiết kế và triển khai ETL, xây dựng data warehouse, tạo báo cáo và dashboard.

  • Bài tập:

    • Chọn một lĩnh vực kinh doanh mà bạn quan tâm (ví dụ: bán lẻ, tài chính, giáo dục).

    • Thu thập dữ liệu từ các nguồn khác nhau liên quan đến lĩnh vực đó.

    • Xây dựng một data warehouse và các pipeline ETL để xử lý dữ liệu.

    • Tạo các báo cáo và dashboard để phân tích dữ liệu và hỗ trợ ra quyết định.

Ngày 88-90: Dự án Data Warehouse và ETL: Xây dựng hệ thống phân tích dữ liệu bệnh nhân cho một bệnh viện

Ngày 88: Thu thập và chuẩn hóa dữ liệu

  • Mục tiêu: Thu thập dữ liệu bệnh nhân từ các nguồn khác nhau (hồ sơ bệnh án điện tử, hệ thống xét nghiệm, hệ thống kê đơn thuốc,...) và chuyển đổi chúng về một định dạng chuẩn.

  • Công việc:

    • Xác định các nguồn dữ liệu cần thiết và các trường dữ liệu quan trọng (ví dụ: mã bệnh nhân, ngày nhập viện, chẩn đoán, kết quả xét nghiệm, thuốc được kê đơn).

    • Trích xuất dữ liệu từ các nguồn sử dụng các công cụ ETL như Apache NiFi hoặc Talend.

    • Làm sạch và chuẩn hóa dữ liệu: xử lý giá trị thiếu, loại bỏ các bản ghi trùng lặp, chuyển đổi định dạng dữ liệu (ví dụ: ngày tháng, mã bệnh), mã hóa dữ liệu nhạy cảm (ví dụ: thông tin cá nhân).

    • Tạo một mô hình dữ liệu chuẩn hóa để lưu trữ dữ liệu đã được làm sạch.

Ngày 89: Xây dựng Data Warehouse

  • Mục tiêu: Xây dựng một data warehouse để lưu trữ dữ liệu bệnh nhân đã được chuẩn hóa.

  • Công việc:

    • Thiết kế mô hình dữ liệu cho data warehouse, bao gồm các bảng fact (ví dụ: bảng sự kiện khám bệnh, bảng sự kiện kê đơn thuốc) và các bảng dimension (ví dụ: bảng bệnh nhân, bảng bác sĩ, bảng thuốc).

    • Sử dụng một công cụ ETL để tải dữ liệu đã chuẩn hóa từ ngày 88 vào data warehouse.

    • Tạo các chỉ mục (index) và các view (materialized view) để tối ưu hóa hiệu suất truy vấn.

Ngày 90: Phân tích và trực quan hóa dữ liệu

  • Mục tiêu: Sử dụng các công cụ BI để phân tích dữ liệu bệnh nhân và tạo ra các báo cáo và dashboard trực quan.

  • Công việc:

    • Kết nối công cụ BI với data warehouse.

    • Xây dựng các truy vấn để phân tích dữ liệu (ví dụ: số lượng bệnh nhân theo độ tuổi, giới tính, bệnh lý; thời gian nằm viện trung bình theo bệnh lý; hiệu quả của các loại thuốc).

    • Tạo các báo cáo và dashboard trực quan để hiển thị kết quả phân tích.

    • Chia sẻ báo cáo và dashboard với các bên liên quan (ví dụ: bác sĩ, quản lý bệnh viện).

Ngày 91: Giới thiệu về Dữ liệu lớn (Big Data)

  • Khái niệm và đặc điểm: Tìm hiểu sâu về định nghĩa Big Data, đặc trưng 5V (Volume, Velocity, Variety, Veracity, Value) và sự khác biệt so với dữ liệu truyền thống.

  • Thách thức và cơ hội: Phân tích các thách thức trong việc lưu trữ, xử lý, phân tích và bảo mật Big Data. Khám phá các cơ hội mà Big Data mang lại cho doanh nghiệp và xã hội.

  • Công nghệ và công cụ: Giới thiệu tổng quan về các công nghệ và công cụ phổ biến trong hệ sinh thái Big Data như Hadoop, Spark, NoSQL (Cassandra, MongoDB, HBase), stream processing (Kafka, Flink, Storm), data warehouse (Hive, Impala), và các công cụ BI (Tableau, Power BI).

  • Bài tập:

    • Nghiên cứu một trường hợp sử dụng Big Data thành công trong một ngành cụ thể (ví dụ: tài chính, y tế, bán lẻ).

    • So sánh và đối chiếu các công nghệ Big Data khác nhau dựa trên các tiêu chí như khả năng mở rộng, hiệu suất, chi phí và tính phù hợp với các trường hợp sử dụng khác nhau.

Ngày 92: Kiến trúc Big Data

  • Lambda Architecture: Tìm hiểu chi tiết về kiến trúc Lambda, bao gồm các thành phần (batch layer, speed layer, serving layer), cách thức hoạt động, ưu nhược điểm và các trường hợp sử dụng phù hợp.

  • Kappa Architecture: Tìm hiểu về kiến trúc Kappa, một kiến trúc đơn giản hơn so với Lambda, tập trung vào stream processing. So sánh ưu nhược điểm của Lambda và Kappa.

  • Data Lake: Tìm hiểu về khái niệm Data Lake, cách thức tổ chức và lưu trữ dữ liệu trong Data Lake, các công cụ hỗ trợ (ví dụ: Apache Hudi, Delta Lake).

  • Data Mesh: Tìm hiểu về kiến trúc Data Mesh, một kiến trúc phân tán mới nổi, tập trung vào việc phân cấp quyền sở hữu và quản lý dữ liệu.

  • Bài tập:

    • Thiết kế một kiến trúc Lambda hoặc Kappa cho một ứng dụng cụ thể (ví dụ: hệ thống đề xuất sản phẩm, hệ thống phát hiện gian lận).

    • Đọc các tài liệu và nghiên cứu về các kiến trúc Big Data khác như Data Fabric, Data Vault.

Ngày 93: Quản trị Dữ liệu lớn (Big Data Governance)

  • Chính sách dữ liệu: Tìm hiểu về tầm quan trọng của việc xây dựng và thực thi các chính sách dữ liệu trong một tổ chức. Các chính sách này bao gồm các quy định về quyền truy cập, sử dụng, chia sẻ và bảo mật dữ liệu.

  • Quản lý metadata: Tìm hiểu về metadata (dữ liệu về dữ liệu) và tầm quan trọng của việc quản lý metadata trong Big Data. Tìm hiểu về các công cụ quản lý metadata như Apache Atlas.

  • Quản lý chất lượng dữ liệu: Tìm hiểu về các kỹ thuật và công cụ để đảm bảo chất lượng dữ liệu trong Big Data, bao gồm profiling dữ liệu, cleansing dữ liệu, và validation dữ liệu.

  • Quản lý bảo mật dữ liệu: Tìm hiểu về các mối đe dọa bảo mật trong Big Data và các biện pháp bảo vệ dữ liệu như mã hóa, kiểm soát truy cập, và giám sát.

  • Bài tập:

    • Xây dựng một kế hoạch quản trị dữ liệu cho một dự án Big Data cụ thể.

    • Nghiên cứu về các tiêu chuẩn và quy định về bảo mật dữ liệu (ví dụ: GDPR, HIPAA).

Ngày 94-100: Dự án Data Engineering: Xây dựng hệ thống phân tích dữ liệu bán hàng cho một doanh nghiệp bán lẻ

  • Ngày 94:

    • Thu thập dữ liệu từ các nguồn khác nhau (hệ thống POS, trang web thương mại điện tử, dữ liệu khách hàng) sử dụng các công cụ ETL như Apache NiFi hoặc Talend.

    • Làm sạch và chuẩn hóa dữ liệu: xử lý giá trị thiếu, loại bỏ các bản ghi trùng lặp, chuẩn hóa định dạng dữ liệu.

    • Lưu trữ dữ liệu đã làm sạch vào một kho dữ liệu (data lake) sử dụng HDFS hoặc S3.

  • Ngày 95:

    • Xây dựng các pipeline dữ liệu sử dụng Spark để chuyển đổi và tổng hợp dữ liệu bán hàng (ví dụ: tính toán doanh thu theo ngày, tháng, năm, sản phẩm, khu vực, khách hàng).

    • Tạo các bảng tổng hợp (aggregate tables) và lưu trữ chúng vào một data warehouse (ví dụ: Hive, Redshift).

    • Tối ưu hóa hiệu suất của các pipeline dữ liệu bằng cách sử dụng các kỹ thuật như caching, partitioning, và bucketing.

  • Ngày 96:

    • Sử dụng các công cụ BI như Tableau, Power BI, hoặc Superset để tạo báo cáo và dashboard trực quan từ dữ liệu đã được xử lý và tổng hợp.

    • Trực quan hóa các chỉ số bán hàng quan trọng theo thời gian, sản phẩm, khu vực, khách hàng.

    • Tạo các dashboard tương tác cho phép người dùng khám phá dữ liệu theo nhiều cách khác nhau.

  • Ngày 97:

    • Triển khai hệ thống vào môi trường production (ví dụ: AWS, GCP, Azure).

    • Cấu hình và quản lý các tài nguyên cần thiết (ví dụ: cluster Spark, cluster Hadoop, cơ sở dữ liệu).

  • Ngày 98:

    • Thiết lập các quy trình CI/CD (Continuous Integration/Continuous Deployment) để tự động hóa việc xây dựng, kiểm tra và triển khai các pipeline dữ liệu.

    • Thiết lập các cơ chế giám sát và cảnh báo để đảm bảo tính ổn định và hiệu suất của hệ thống.

  • Ngày 99-100:

    • Tiếp tục tối ưu hóa và cải tiến hệ thống dựa trên phản hồi của người dùng và các yêu cầu mới.

    • Thêm các tính năng mới vào hệ thống (ví dụ: phân tích dự đoán, đề xuất sản phẩm).

    • Nghiên cứu và áp dụng các công nghệ mới để cải thiện hiệu suất và khả năng mở rộng của hệ thống.