Tuy nhiên trong kỷ nguyên số, khi mà sự bùng nổ công nghệ truyền thông đã dẫn tới sự bùng nổ dữ liệu người dùng, lượng dữ ệu được tạo ra vô cùng lớn và đa dạng, đòi hỏi một hệ ống đủ mạn
Trang 1Nguyễn Quốc Nhật Minh 20200408
Trang 2Mục lục
LỜI NÓI ĐẦU 3
I Khái quát công nghệ sử dụng 4
1.1 Apache Kafka 4
1.2 Apache Spark 5
a) Giới thiệu 5
b) Những ưu điểm nổi bậ ủa Sparkt c 6
1.3 Elasticsearch 7
a) Giới thiệu 7
b) Ưu điểm của Elasticsearch 8
1.4 Kibana 8
1.5 MongoDB Cluster 9
a) Sơ lược về MongoDB 9
b) MongoDB Shard Cluster? 11
1.6 Docker 12
a) Docker là gì ? 12
b) Ưu điểm của Docker? 12
II Xây dựng chương trình và hệ thống 14
2.1 Luồng dữ ệu của hệ li thống 14
2.2 Quá trình thực hiện 14
2.2.1 Khở ộng Docker-i đ compose 14
2.2.2 Crawl dữ liệu 16
2.2.3 Tạo topic kafka 16
2.2.4 Thiết lập MongoDB cluster 16
2.2.5 Triển khai hệ ống với sparkth 20
2.2.5 Biểu diễn dữ ệu bằng Kibanali 25
III Nhận xét , đánh giá và hướng phát triển 28
Tài liệu tham khảo 29
Trang 3L I NÓI ĐẦU Trước đây, khi mạng Internet còn chưa phát triển, lượng dữ ệu con người sinh li
ra khá nhỏ giọt và thưa thớt, nhìn chung, lượng dữ ệu này vẫn nằm trong khả năng li
xử lý của con người dù bằng tay hay bằng máy tính Tuy nhiên trong kỷ nguyên số, khi mà sự bùng nổ công nghệ truyền thông đã dẫn tới sự bùng nổ dữ liệu người dùng,
lượng dữ ệu được tạo ra vô cùng lớn và đa dạng, đòi hỏi một hệ ống đủ mạnh để li thphân tích và xử lý những dữ ệu đó.li
Khái niệm Big Data đề cập tớ ữ ệu lớn theo 3 khía canh khác nhau, thứ nhấi d li t
là tốc độ sinh d liệu (velocity), thứ hai là lượng dữ liệu (volumn) và thứ ba là độ đa ữ dạng (variety) Lượng dữ ệu này có thể đến từ nhiều nguồn khác nhau như các nềli n tảng truyền thông Google, Facebook, Twitter, … hay thông số thu thập từ các cảm biến, thiết bị IoT trong đời sống, … Và một sự ật rằng doanh nghiệp nào có thể thkiểm soát và tạo ra tri thức từ những dữ liệu này sẽ tạo ra một tiềm lực rất lớn để cạnh tranh với những doanh nghiệp khác
Trong phạm vi của Bài tập lớn này, nhóm chúng em thực hiện tạo mộ ệ t h thống thu thập dữ ệu về các bộ phim từ trang web The Movie Database, sau đó vận dụng licác kiến thức về lưu trữ và dữ ệu lớn để khai thác li
Bài tập lớn của nhóm chúng em bao gồm 3 nội dung chính:
- Tổng quan xây dựng hệ thống
- Xây dựng chương trình và hệ thống
- Nhận xét, đánh giá và hướng phát triển
Mặc dù đã cố gắng hoàn thiện sản phẩm nhưng không thể tránh khỏi những thiếu hụt về kiến thức và sai sót trong kiểm thử Chúng em rất mong nhận được những nhận xét thẳng thắn, chi tiết đến từ ầy để ếp tục hoàn thiện hơn nữa Cuối cùng, th tinhóm chúng em xin được gửi lời cảm ơn đến thầy TS Trần Việt Trung dẫn chúng em trong suốt quá trình hoàn thiệ bài tập lớn Nhóm chúng em xin chân thành cảm ơn n thầy
Trang 4I Kh i qu t công nghệ sử dụng
1.1 Apache Kafka
Apache Kafka là một kho dữ ệu phân tán được tối ưu hóa để thu nạp và xử lý li
dữ ệu truyền phát theo thời gian thực Dữ li liệu truyền phát là dữ ệu được tạo ra liên litục từ hàng nghìn nguồn dữ liệu khác nhau, các nguồn này thường gửi các bản ghi dữ
liệu đồng thời Nền tảng truyền phát cần phải xử lý luồng dữ ệu liên tục này và xử li
lý dữ liệu theo trình tự và tăng dần
Kafka cung cấp ba chức năng chính cho người dùng:
• Xuất bản và đăng ký các luồng bản ghi
• Lưu trữ hiệu quả các luồng bản ghi theo thứ tự tạo bản ghi
• Xử lý các luồng bản ghi trong thời gian thực
Kafka chủ yếu được dùng để xây dựng các quy trình dữ ệu truyền phát trong li
thời gian thực và các ứng dụng thích ứng với luồng dữ ệu đó Kafka kết hợp nhắn litin, lưu trữ và xử lý luồng nhằm hỗ ợ hoạt động lưu trữ, phân tích cả dữ ệu lịtr li ch sử lẫn dữ ệu trong thời gian thựli c
Trang 5Cấu trúc của kafka bao gồm các thành phần chính sau:
• Producer: Mộ producer có thể là bất kì ứng dụng nào có chức năng publish t message vào một topic
• Messages: Messages đơn thuần là byte array và developer có thể sử dụng chúng để lưu bất kì object với bất kì format nào - thông thường là String, JSON
và Avro
• Topic: Một topic là một category hoặc feed name nơi mà record được publish
• Partitions: Các topic được chia nhỏ vào các đoạn khác nhau, các đoạn này được g i là partition ọ
• Consumer: Một consumer có thể là bất kì ứng dụng nào có chức năng subscribe vào một topic và tiêu th các tin nhắn ụ
• Broker: Kafka cluster là một set các server, mỗi một set này được gọi là 1 broker
• Zookeeper: được dùng để quản lý và bố trí các broker
1.2 Apache Spark
a) Giới thiệu
Apache Spark là một framework mã nguồn mở được sử dụng để xử lý dữ liệu trên quy mô lớn Nó cung cấp một giao diện cho việc lập trình tính toán đồng thời trên các cụm máy tính với khả năng chịu lỗ i Khả năng tính toán phân tán của Apache Spark làm cho nó trở thành một công cụ phù hợp cho việc làm việc với dữ ệu lớn li
và Machine Learning Spark giúp giải quyết những vấn đề liên quan đến việc tính toán trên các tập dữ ệu khổng lồ bằng cách loại bỏ một số khó khăn lập trình thông liqua một API dễ sử dụng Điều này giúp cho các nhà phát triển tập trung vào các công việc quan trọng hơn trong việc xử lý và tính toán trên dữ ệu phân tán li
Trang 6Apache Spark bao gồm 5 thành phần chính: Spark Core, Spark Streaming, Spark SQL, MLlib và GraphX
1 Spark Core là thành phần cốt lõi của Spark, thực hiện tính toán và xử lý dữ
liệu trong bộ nhớ, đồng thời tham chiếu đến dữ ệu lưu trữ bên ngoài li
2 Spark SQL tập trung vào xử lý dữ ệu có cấu trúc và cung cấp giao diện SQL li
để truy vấn dữ ệu li
3 Spark Streaming cho phép xử lý dữ ệu theo thời gian thực hoặc gần thời gian li
thực, bằng cách chia nhỏ dữ ệu thành các microbatch và sử dụng API Spark li
4 MLlib là nền tảng học máy phân tán trên Spark, với kiến trúc dựa trên bộ nhớ
và tốc độ nhanh hơn so với thư viện tương đương trên Hadoop
5 GraphX cung cấp thuật toán xử lý đồ ị phân tán, sử dụng RDD của Spark thCore và hỗ ợ xử lý đồ ị trên khung dữ ệu thông qua gói GraphFrames.tr th li b) Những ưu điểm nổi bật của Spark
Được thiế ế từ dưới lên để tăng hiệu suất, Spark có thể nhanh hơn 100 lần so t kvới Hadoop khi xử lý dữ ệu quy mô lớn bằng cách khai thác tính toán trên bộ nhớ li
và các tối ưu hóa khác Spark cũng nhanh khi dữ ệu được lưu trữ trên đĩa và hiệli n đang giữ kỷ lục thế giớ ề phân loại v i trên đĩa quy mô lớn
Spark có các API dễ sử dụng để làm việc trên các tập dữ ệu lớn, bao gồm hơn li
100 toán tử để chuyển đổi dữ ệu và các API dataframe quen thuộc để xử lý dữ li liệu bán cấu trúc
Trang 7Spark được đóng gói với các thư viện cấp cao, bao gồm hỗ ợ truy vấn SQL, trtruyền dữ ệu trực tuyến, học máy và xử lý đồ ị Các thư viện tiêu chuẩn này làm li thtăng năng su t cấ ủa nhà phát triển và có thể được kết hợp liền mạch để tạo ra các quy trình làm việc ph c tạứ p
1.3 Elasticsearch
a) Giới thiệu
Elasticsearch là một hệ thống tìm kiếm và phân tích dữ liệu phân tán mã nguồn
mở, được xây dựng trên nền tảng Apache Lucene Nó cung cấp một cách mạnh mẽ
và linh hoạt để lưu trữ, tìm kiếm và phân tích dữ ệu trong quy mô lớn và thời gian lithực
Elasticsearch hoạt động bằng cách lưu trữ dữ ệu vào các "nút" phân tán, tạli o thành mộ ụm Elasticsearch Mỗi nút chứa một phần củt c a d liữ ệu và có khả năng xử
lý và tìm kiếm dữ ệu độc lập Khi dữ ệu được thêm hoặc cập nhật, Elasticsearch tự li liđộng phân bổ và phân tán dữ liệu trên các nút, đảm bảo hiệu suất cao và khả năng mở rộng
Một trong những điểm mạnh chính của Elasticsearch là khả năng tìm kiếm nhanh chóng và chính xác Nó sử dụng cơ chế tìm kiếm ngược (inverted index) dựa trên Apache Lucene, cho phép tìm kiếm dựa trên từ khóa, văn bản, phạm vi thời gian
và nhiều tiêu chí khác Elasticsearch cung cấp một API RESTful dễ sử dụng để truy vấn dữ ệu và trả về kếli t quả trong thời gian thực
Trang 8Ngoài tìm kiếm, Elasticsearch còn cung cấp các tính năng phân tích và khám phá dữ liệu mạnh mẽ Với Elasticsearch, ta có thể thực hiện các tác vụ như tạo đồ thị, tạo bảng điều khiển, thống kê, phân loại, và phân tích các xu hướng dữ ệu Nó hỗ litrợ các công cụ và thư viện phổ biến như Kibana và Logstash, để tạo ra một giải pháp đầy đủ cho việc thu thập, xử lý và trực quan hóa dữ ệu li
b) Ưu điểm của Elasticsearch
- Hiệu suất tìm kiếm và truy vấn nhanh chóng: Elasticsearch sử dụng cơ chế tìm kiếm ngược và phân tán dữ ệu để đảm bảo tìm kiếm và truy vấn dữ li liệu nhanh chóng, kể cả vớ ữ ệu lớn i d li
- Khả năng mở rộng: Elasticsearch có thể mở rộng dễ dàng bằng cách thêm nút vào cụm, giúp xử lý tải cao và mở rộng dữ ệu theo nhu cầu li
- Phân tích và khám phá dữ ệu linh hoạt: Elasticsearch cung cấp các tính năng liphân tích mạnh mẽ để tìm hiểu và khám phá dữ ệu, từ việc tạo biểu đồ đếli n phân loại và phân tích xu hướng
- Dễ dàng tích hợp: Elasticsearch có giao diện API RESTful dễ sử dụng, cho phép tích hợp dễ dàng với các ứng dụng và công cụ khác
- Cộng đồng rộng lớn: Elasticsearch là một dự án mã nguồn mở phát triển bởi một cộng đồng đông đảo, điều này đảm bảo có sự hỗ ợ, cải thiện và phát triểtr n liên tục từ cộng đồng người dùng
Tóm lại, Elasticsearch là một hệ ống tìm kiếm và phân tích dữ ệu phân tán th limạnh mẽ, cung cấp tốc độ tìm kiếm nhanh chóng, khả năng mở rộng, tính linh hoạt trong phân tích dữ liệu và tích hợp dễ dàng Điều này làm cho Elasticsearch trở thành một công cụ quan trọng trong việc xử lý và tìm kiếm dữ ệu trong các ứng dụng từ liviệc giám sát hệ ống, phân tích log, tìm kiếm sản phẩm đến khám phá dữ ệu và th linhiều ứng dụng khác
1.4 Kibana
Kibana là một công cụ ực quan hóa và phân tích dữ ệu mã nguồn mở, đượtr li c thiết kế để làm việc cùng vớ Elasticsearch Nó cung cấp một giao diện người dùng i đơn giản và mạnh mẽ để khám phá, trực quan hóa và chia sẻ thông tin từ dữ liệuđược lưu trữ trong Elasticsearch Nó cho phép ta tạo các biểu đồ, đồ ị, bảng điều khiểth n
và báo cáo tùy chỉnh để hiểu rõ hơn về dữ liệu của mình Bằng cách tương tác với dữ
liệu trong Elasticsearch, ta có thể ực hiện các truy vấn, lọc dữ ệu, phân tích xu th li
Trang 9hướng và tìm ra thông tin quan trọng từ dữ ệu của mình Ta có thể coi Kibana như li
là màn hình hiển thị dữ liệu từ Elasticsearch
Kibana là một công cụ ực quan hóa và phân tích dữ ệu mạnh mẽ, làm việtr li c cùng với Elasticsearch để cung cấp khả năng truy xuất thông tin và phân tích dữ li u ệmột cách dễ dàng và hiệu quả
1.5 MongoDB Cluster
a) Sơ lược v MongoDB
MongoDB là một database hướng tài liệu (document), một dạng NoSQL database Vì thế, MongoDB sẽ tránh cấu trúc table-based của relational database để thích ứng với các tài liệu như JSON có một schema rất linh hoạt gọi là BSON MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một collection
sẽ các các kích cỡ và các document khác nhau Các dữ ệu được lưu trữ li trong document kiểu JSON nên truy vấn sẽ rất nhanh
Trang 10MongoDB lần đầu ra đờ ởi MongoDB Inc., tại b i thời điểm đó là thế hệ 10, vào tháng Mười năm 2007, nó là một phần của sản phẩm PaaS (Platform as a Service) tương tự như Windows Azure và Google App Engine Sau đó nó đã được chuyển thành nguồn mở từ năm 2009
MongoDB đã trở thành một trong những NoSQL database nổi trội nhất bấy giờ, được dùng làm backend cho rất nhiều website như eBay, SourceForge và The New York Times
Các feature củ MongoDB gồm có:a
- Query: hỗ ợ search bằng field, các phép search thông thường, regular trexpression searches, và range queries
- Indexing: bất kì field nào trong BSON document cũng có thể được index
- Replication: có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản đang tồn tại, đang sử dụng Với cơ sở dữ ệu, nhu cầu lưu trữ lớn, đòi lihỏi cơ sở dữ ệu toàn vẹn, không bị mất mát trước những sự cố ngoài dự liđoán là rất cao Vì vậy, người ta nghĩ ra khái niệm “nhân bản”, tạo một phiên bản cơ sở dữ ệu giống hệt cơ sở dữ ệu đang tồn tại, và lưu trữ ở một nơi li likhác, đề phòng có sự cố
- Aggregation: Các Aggregation operation xử lý các bản ghi dữ ệu và trả về likết quả đã được tính toán Các phép toán tập hợp nhóm các giá trị từ nhiều Document lại với nhau, và có thể ực hiện nhiều phép toán đa dạng trên dữ th
liệu đã được nhóm đó để ả về một kết quả duy nhất Trong SQL, count(*) tr
và GROUP BY là tương đương với Aggregation trong MongoDB
- Lưu trữ file: MongoDB được dùng như một hệ ống file tận dụng những thfunction trên và hoạt động như một cách phân phối qua sharding
Trang 11b) MongoDB Shard Cluster?
MongoDB Shard Cluster là một kiểu triển khai MongoDB được thiế ế để mở t krộng khả năng chịu tả ủa hệ ống cơ sở dữ ệu MongoDB bằng cách phân chia dữ i c th li
liệu và phân phối chúng trên nhiều máy chủ (shard) Cụ ể, mục tiêu của MongoDB thShard Cluster là tăng cường khả năng mở rộng ngang của hệ ống, cho phép xử lý th
lượng dữ ệu lớn và cung cấp hiệu suất cao li
Dưới đây là m t số thành phần củ MongoDB Shard Cluster:ộ a
- Mongos: Đây thực ra là một query router, cung cấp một giao diện tương tác giữa ứng dụng và các sharded cluster
- Mongod: Nó xử lý các yêu cầu dữ ệu, quản lý quyền truy cập dữ ệu và li lithực hiện các hoạ ộng quản lý nềnt đ
- Shard: Mỗi shard chứa đựng một tập nhỏ các data đã sharded, từ phiên bản 3.6 trở lên, shards phải được cấu hình chạy replicaset nếu muốn trở thành một phần của cluster
- Config server: Config server chứa đựng metadata và cấu hình cho cluster,
từ phiên bản 3.4 trở lên config server phải deploy dướ ạng replicaset.i d
- Replicaset (Primary, secondary): Một replica set trong MongoDB là một nhóm các tiến trình của mongodb duy trì cùng một bộ dữ liệu Các replica
Trang 12set cung cấp tính dự phòng và tính sẵn sàng cao và là cơ sở để ển khai trinhập xuấ ữ ệu khi cần thiết d li t
1.6 Docker
a) Docker l gì ?
Docker là nền tảng phần mềm cho phép bạn dựng, kiểm thử và triển khai ứng dụng một cách nhanh chóng Docker đóng gói phần mềm vào các đơn vị tiêu chuẩn hóa được gọi là container có mọi thứ mà phần mềm cần để ạy, trong đó có thư chviện, công cụ hệ ống, mã và thời gian chạy Bằng cách sử dụng Docker, bạn có thể thnhanh chóng triển khai và thay đổi quy mô ứng dụng vào bất kỳ môi trường nào và biết chắc rằng mã của bạn sẽ chạy được
Docker hoạt động bằng cách cung cấp phương thức tiêu chuẩn để ạy mã củch a bạn Docker là hệ điều hành dành cho container Cũng tương tự như cách máy ảo ảo hóa (loại bỏ nhu cầu quản lý trực tiếp) phần cứng máy chủ, các container sẽ ảo hóa
hệ điều hành của máy chủ Docker được cài đặt trên từng máy chủ và cung cấp các lệnh đơn giản mà bạn có thể sử dụng để dựng, khở ộng hoặi đ c dừng container
b) Ưu điểm của Docker?
- Tính dễ ứng dụng: Docker rất dễ cho mọi người sử dụng từ lập trình viên, sys admin… nó tận dụng lợi thế của container để build, test nhanh chóng Có thể đóng gói ứng dụng trên laptop của họ và chạy trên public cloud, private cloud…
- T c độ: Docker container rất nhẹ và nhanh, bạn có thể tạo và chạy docker container trong vài giây
Trang 13- Môi trường chạy v khả năng mở rộng: Bạn có thể chia nhỏ ững chứnh c năng củ ứng dụng thành các container riêng lẻ Ví dụng Database chạy trên a một container và Redis cache có thể ạy trên một container khác trong khi chứng dụng Node.js lại chạy trên một cái khác nữa Với Docker, rất dễ để liên kết các container với nhau để tạo thành mộ ứng dụng, làm cho nó dễ dàng t scale, update các thành phần độ ập với nhau.c l
Trang 14II Xây dựng chương trình v hệ th ng
2.1 Luồng dữ ệu của hệ li th ng
Luồng dữ ệu củli a h thệ ống chúng em xây dựng gồm 4 quá trình:
- Thu thập dữ ệu trên website The Movie Database.li
- Lưu dữ ệu vào Kafka.li
- Lọc, làm sạch dữ ệu trên li Kafka bằng Spark Sau đó lưu thành 2 bản: 1 bản lưu trên MongoDB, 1 bản lưu gửi vào Elasticsearch
- Biểu diễn dữ liệu trên Elasticsearch dưới dạng biểu đồ, đồ thị, danh sách bảng
Mã nguồn chương trình được mount vào bên trong spark-master để submit do lỗi gặp phải khi submit job
từ local machine
2 spark-worker-1 bitnami/spark:3.2.3 8081:8081
3 spark-worker-2 bitnami/spark:3.2.3 8082:8081