Chương 1, Giới thiệu: giới thiệu tổng quan về đề tài, mục tiêu nghiên cứu và giới hạn của đề tài, ý nghĩa của đề tài. Chương 2, Kiến thức nền tảng: trình bày tổng quan các khái niệm cơ bản về Big data, bộ công cụ (framework) Hadoop và mô hình Map-Reduce, Streaming data, bộ công cụ (framework) Spark. Chương 3, Một số công trình liên quan: Giới thiệu và đánh giá các công trình nghiên cứu, các sản phẩm liên quan đã và đang được thực hiện trong thực tế. Chương 4, Phương pháp giải quyết vấn đề: trình bày bộ thông số được đề xuất, đồ hình cấp nước và đề xuất sự bố trí các thiết bị đo, định dạng dữ liệu và tổ chức lưu trữ dữ liệu, xây dựng ứng dụng phân tích dữ liệu bằng Spark.
Chương 5, Thử nghiệm: trình bày việc thực thi cụ thể ứng dụng phân tích dữ liệu bằng Spark trên máy tính cá nhân như: cấu hình máy, các bước cài đặt, chạy ứng dụng. Trình bày các kết quả thử nghiệm, đánh giá kết quả thu được. Chương 6, Kết luận: Tổng hợp những điều đạt được của đề tài, những điểm hạn chế của đề tài, và đề xuất một số hướng phát triển đề tài. 3 CHƯƠNG 2: KIẾN THỨC NỀN TẢNG Chương này trình bày tổng quan các kiến thức và công nghệ nền tảng được vận dụng để tiến tới xây dựng đề tài này, bao gồm: Big data, Apache Hadoop, Streaming data, Apache Spark.
Tổng quan về big data 2. Khái niệm về big data Thuật ngữ “Big data” (tạm dịch là “dữ liệu lớn”; sau đây, tôi xin được sử dụng cụm từ “Big data” để diễn đạt trong toàn bộ nội dung tiếp theo) xuất hiện vào khoảng những năm 1990, và gần đây, nó đã trở thành một thuật ngữ phổ biến. Big data là thuật ngữ dùng để nói đến các tập dữ liệu rất lớn và phức tạp. Những tập dữ liệu này rất khó hoặc không thể xử lý được bằng những phần mềm ứng dụng truyền thống về quản trị dữ liệu như các hệ quản trị cơ sở dữ liệu quan hệ, các phần mềm trực quan hóa dữ liệu, v.
mà phải được tổ chức lưu trữ và xử lý trên các hệ thống máy tính phân tán cùng với các bộ công cụ phù hợp. Một số khía cạnh liên quan đến việc xuất hiện các tập dữ liệu rất lớn có thể kể đến như sau: - Các ngồn phát sinh dữ liệu: Dữ liệu được phát sinh từ sự lao động sản xuất ở tất cả các ngành nghề trong đời sống hàng ngày. Sự đa dạng của các loại hình lao động nảy sinh ra rất nhiều các nhu cầu khác nhau về việc khai thác các thông tin trong các nguồn dữ liệu được sinh ra. - Các thiết bị và phương thức cho việc thu nhận và lưu trữ dữ liệu: Các thiết bị sinh dữ liệu ngày càng đa dạng, kết hợp với sự phát triển ngày càng mạnh mẽ của mạng máy tính cùng với giá thành ngày càng giảm của các thiết bị lưu trữ giúp cho việc thu thập và lưu trữ dữ liệu ngày càng dễ dàng và nhanh chóng.
Trong những năm gần đây, IoT (Internet vạn vật) đang phát triển mạnh mẽ giúp cho việc thu nhận và lưu trữ dữ liệu càng thuận lợi hơn. - Các loại định dạng dữ liệu: Dữ liệu phát sinh từ lao động sản xuất tồn tại ở nhiều định dạng khác nhau và thường được phân nhóm thành ba loại: có cấu trúc, bán cấu trúc và không có cấu trúc. Điều này cũng đặt ra nhiều thách thức cho việc xử lý các dữ liệu được thu thập với dung lượng lớn. 4 Các bài toán mà hiện nay, big data thường được áp dụng để xử lý là: giám sát, dự báo các thay đổi bất thường của các đối tượng đang diễn tiến nào đó trong thực tế như thời tiết, hành vi của một nhóm người, giá cả sản phẩm, v.
Với các đặc trưng của mình, big data luôn phải đối mặt với các thách thức như: tìm kiếm, chia sẻ, trực quan hóa, bảo mật thông tin, v. Các đặc trưng của big data Big data có các đặc trưng được viết tắt thành các chữ V (theo các từ tiếng Anh). Cũng có nhiều khi, chúng ta gặp ở đâu đó, các đặc trưng này là 3V, 4V hoặc thậm chí là 5V. Ban đầu, các đặc trưng của big data được mô tả trong 3V là Volume, Velocity và Variety.
Dần dần, các khái niệm và phát biểu về big data được diễn giải chi tiết hơn và các đặc trưng này có thêm Veracity (trở thành 4V), rồi đến Value (trở thành 5V). Các đặc trưng này như sau: - Volume: Dung lượng của dữ liệu được tạo ra từ các nguồn phát sinh. Dung lượng này là rất lớn nên cần phải được lưu trữ bằng các hệ thống phù hợp. - Velocity: Tốc độ phát sinh dữ liệu và tốc độ lan truyền dữ liệu.
Big data thường có tốc độ sinh dữ liệu theo thời gian thực (real-time). - Variety: Sự đa dạng về các loại dữ liệu được phát sinh từ nhiều nguồn khác nhau. Các hệ quản trị cơ sở dữ liệu quan hệ truyền thống tổ chức dữ liệu có cấu trúc thành các bảng, nhưng trên thực tế, hơn 80% lượng dữ liệu sinh ra là không có cấu trúc và ở nhiều định dạng khác nhau. - Veracity: Sự đáng tin cậy về chất lượng của dữ liệu.
Chất lượng của dữ liệu sẽ ảnh hưởng rất lớn đến kết quả của các phương pháp phân tích dữ liệu. - Value: Sự đáng giá của dữ liệu. Dữ liệu được phát sinh từ nhiều nguồn; do đó, việc lựa chọn nguồn dữ liệu nào để thu nhận và phân tích sao cho có thể đáp ứng được càng nhiều yêu cầu phân tích thì sẽ càng đáng giá. Ứng dụng hiện tại của big data Hiện nay, big data đang phát triển một cách mạnh mẽ bởi rất nhiều tổ chức và tập đoàn lớn trên Thế giới.
Sự phát triển này đã kích thích sự ra đời của các công nghệ có thể kể đến như sau: 5 - Công nghệ lưu trữ: DAS (Công nghệ lưu trữ song song trên các ổ đĩa tốc độ cao), các công nghệ lưu trữ chia sẻ như SAN, NAS. - Công nghệ phần mềm: Xuất hiện các giải pháp triển khai và phát triển hệ thống lưu trữ và xử lý phân tán mạnh mẽ như GFS, HDFS, NoSQL, IoT, v. - Dịch vụ công nghệ thông tin điển hình: Amazon, Facebook, Twitter, Google Drive, v. Các lĩnh vực đời sống hiện đang ứng dụng big data gồm có: Quản lý chính phủ, tài chính, sản xuất, giáo dục, y học, v.
Giới thiệu về Apache Hadoop Apache Hadoop (sau đây, tôi xin được gọi ngắn gọn là “Hadoop”) là một framework (tức là bộ công cụ phát triển phần mềm; sau đây, tôi xin được sử dụng từ “framework” cho các diễn đạt trong toàn bộ nội dung tiếp theo) hỗ trợ việc xử lý các tập dữ liệu lớn được lưu trữ phân tán trong các cụm (cluster) máy tính. Hadoop được phát triển bằng ngôn ngữ Java. Kiến trúc của Hadoop: Hadoop có 4 thành phần như sau: - Hadoop Common: Là thư viện và các tiện ích về Java để các thành phần khác triệu gọi nhằm khởi động Hadoop. - Hadoop YARN (Yet Another Resource Negotiator): Là framework dành cho việc lập lịch các tác vụ và quản lý tài nguyên trong cụm máy tính.
- HDFS (Hadoop Distributed File System): Là hệ thống lưu trữ dữ liệu phân tán. Hệ thống này có giá thành tương đối rẻ nhưng rất đáng tin cậy. - Bộ xử lý Map-Reduce: Là các chương trình thực thi các giải thuật Map và Reduce một cách song song trên hệ thống máy tính phân tán để đưa ra kết quả nhanh chóng đối với tập dữ liệu lớn. 6 Sơ đồ khối các thành phần của Hadoop như Hình 1 [5] dưới đây: Hình 1: Các thành phần của Hadoop.
Kiến trúc lưu trữ và xử lý dữ liệu của Hadoop được tổ chức theo dạng Master- Slave như Hình 2 dưới đây, trong đó: - Master có vai trò: Tiếp nhận các yêu cầu về metadata (tức là các dữ liệu dùng cho việc điều khiển) từ bên ngoài, xử lý các yêu cầu đó rồi phát ra các yêu cầu để điều phối hoạt động của các Slave. - Slave có vai trò: Tiếp nhận các yêu cầu điều phối từ Master và thực hiện theo. Hình 2: Kiến trúc Master-Slave của Hadoop. Kiến trúc của HDFS Kiến trúc của HDFS khớp với kiến trúc của Hadoop.
Hình 3 [28] dưới đây là kiến trúc của HDFS. Hình 3: Kiến trúc của HDFS. Giải thích: - Kiến trúc của HDFS gồm có hai đối tượng chính là: NameNode và DataNode. + NameNode đóng vai trò Master: tiếp nhận các yêu cầu xử lý từ chương trình khách (client) bên ngoài.
Sau khi nhận biết các thông tin trong metadata, NameNode sẽ xác định được khối dữ liệu (block) nào trên DataNode nào cần được thao tác và gửi yêu cầu xuống DataNode đó. + DataNode đóng vai trò Slave: tiếp nhận yêu cầu về thao tác nhận được từ NameNode. Từ yêu cầu đó, DataNode xác định được khối dữ liệu cần thao tác để cho phép chương trình khách bên ngoài thao tác đến khối dữ liệu đó. - Các mối liên hệ giữa các cặp đối tượng như sau: + Client – NameNode: Yêu cầu (request) và hồi đáp (response) đối với metadata.
8 + NameNode – DataNode: Chuyển các yêu cầu từ Client đến DataNode và điều phối DataNode. + Client – DataNode: Trực tiếp đọc, ghi các khối dữ liệu. - HDFS được thiết kế để có thể chạy được trên các phần cứng phổ thông. - HDFS có khả năng không bị sai lệch (resilient) nhờ có cơ chế Replication.
Cơ chế này sẽ tạo ra các bản sao của mỗi khối dữ liệu và lưu trữ ở các DataNode khác trong cùng cụm máy tính. Sơ đồ xử lý của Map-Reduce Sơ đồ xử lý của Map-Reduce phù hợp với kiến trúc của Hadoop. Trong đó thể hiện các bước xử lý của một cặp thao tác Map-Reduce. Sơ đồ xử lý của Map-Reduce như trong Hình 4 được giải thích như sau: - Map-Reduce thực hiện 3 giai đoạn có tên là: Map, Shuffle và Reduce.
+ Giai đoạn Map: xử lý dữ liệu ban đầu và cho ra danh sách các cặp <Key, Value>. + Giai đoạn Reduce: là sự kết hợp của giai đoạn Shuffle và Reduce để rút gọn danh sách các cặp <Key, Value> - NameNode có vai trò là Master, còn các DataNode có vai trò là các Slave. - Các bước xử lý từ giai đoạn Map đến Reduce: + Ứng dụng của người dùng (User hay Client) gửi một yêu cầu vào cụm máy tính. Ví dụ: “Đếm số lượng từ”.
Yêu cầu này sẽ đến NameNode. + Sau khi nhận biết các thông tin, NameNode chuyển yêu cầu này đến các DataNode chứa các khối dữ liệu tương ứng.