1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Báo cáo cuối kì môn học hệ phân bố (1)

21 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo cuối kì môn học hệ phân bố (1)
Tác giả Trần Nguyên Thái Bảo, Hồng Tiến Hào, Lê Tuấn Hiệp, Đinh Quốc Hùng
Người hướng dẫn TS. Nguyễn Thiên Bảo
Trường học University of Information Technology - Hồ Chí Minh
Chuyên ngành Hệ Phân Bố
Thể loại Báo cáo cuối kỳ
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 21
Dung lượng 1,5 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Apache Spark là một framework xử lý dữ liệu có thể thực hiện các tác vụ xử lý trên các tập dữ liệu rất lớn, được thiết kế để tính toán nhanh chóng.. Spark được thiết kế để bao gồm một lo

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN MÔN: HỆ PHÂN BỐ

ĐỀ TÀI: RECOMMEND SYSTEM

GVHD: TS Nguyễn Thiên Bảo

SVTH:

Trần nguyên Thái Bảo 1913310

Hồng Tiến Hào 19133022

Lê Tuấn Hiệp 19133023

Đinh Quốc Hùng 19133025

TP Hồ Chí Minh, ngày 05 tháng 05 năm 2022

Trang 2

MỤC LỤC

Trang 4

PHẦN 1: CƠ SỞ LÝ THUYẾT APACHE SPARK

1 Apache Spark Là Gì?

Apache Spark là một framework xử lý dữ liệu có thể thực hiện các tác vụ xử

lý trên các tập dữ liệu rất lớn, được thiết kế để tính toán nhanh chóng Nó dựa trên Hadoop MapReduce và nó mở rộng mô hình MapReduce để sử dụng hiệu quả nó cho nhiều loại tính toán hơn, bao gồm các truy vấn tương tác và xử lý luồng Tính năng chính của Spark là tính toán cụm trong bộ nhớ giúp tăng tốc

độ xử lý của ứng dụng

Spark được thiết kế để bao gồm một loạt các khối lượng công việc như ứng dụng hàng loạt, thuật toán lặp lại, truy vấn tương tác và phát trực tuyến Ngoàiviệc hỗ trợ tất cả khối lượng công việc này trong một hệ thống tương ứng, nó làm giảm gánh nặng quản lý trong việc duy trì các công cụ riêng biệt

2 Sự phát triển của Apache Spark

Spark là một trong những dự án con của Hadoop được phát triển vào năm

2009 trong AMPLab của UC Berkeley bởi Matei Zaharia Nó được Open

Sourced vào năm 2010 theo giấy phép BSD Nó đã được quyên góp cho nền tảng phần mềm Apache vào năm 2013 và bây giờ Apache Spark đã trở thành một dự án Apache cấp cao nhất từ tháng 2 năm 2014

3 Các tính năng của Apache Spark

Tốc độ: Spark giúp chạy ứng dụng trong cụm Hadoop, nhanh hơn tới 100

lần trong bộ nhớ và nhanh hơn 10 lần khi chạy trên đĩa Điều này có thể thực

Trang 5

hiện được bằng cách giảm số lượng các thao tác đọc / ghi vào đĩa Nó lưu trữ

dữ liệu xử lý trung gian trong bộ nhớ

In-memory Computing: Dữ liệu trong bộ nhớ sẽ cải thiện hiệu suất theo thứ

tự cường độ Phần trừu tượng chính của Spark là các RDD của nó Và các RDD được lưu vào bộ đệm bằng cách sử dụng phương thức cache() hoặc persist() Khi chúng ta sử dụng phương thức cache(), tất cả RDD sẽ lưu trữ trong bộ nhớ.Khi RDD lưu trữ giá trị trong bộ nhớ, dữ liệu không phù hợp với bộ nhớ sẽ được tính toán lại hoặc dữ liệu thừa được gửi đến đĩa Bất cứ khi nào chúng ta muốn RDD, nó có thể được giải nén mà không cần đến đĩa Điều này làm giảm

sự phức tạp về không gian-thời gian và chi phí lưu trữ trên đĩa Khả năng trong

bộ nhớ của Spark rất tốt cho việc học máy và xử lý hàng loạt vi mô Nó cung cấp khả năng thực thi nhanh hơn cho các công việc lặp đi lặp lại

Hỗ trợ nhiều ngôn ngữ: Spark cung cấp các API tích hợp sẵn bằng Java, Scala hoặc Python Do đó, bạn có thể viết ứng dụng bằng các ngôn ngữ khác nhau Spark đưa ra 80 toán tử cấp cao để truy vấn tương tác

Khả năng chịu lỗi: Vì Apache Spark RDD là một tập dữ liệu bất biến, mỗi

Spark RDD nhớ dòng dõi của hoạt động xác định đã được sử dụng trên tập dữliệu đầu vào có khả năng chịu lỗi để tạo ra nó Nếu do lỗi worker node mà bất

kỳ phân vùng nào của RDD bị mất, thì phân vùng đó có thể được tính toán lại

từ tập dữ liệu chịu lỗi ban đầu bằng cách sử dụng dòng hoạt động

Phân tích nâng cao - Spark không chỉ hỗ trợ 'Map' và 'reduce' Nó cũng hỗ trợ các truy vấn SQL, Dữ liệu truyền trực tuyến, Máy học (ML) và các thuật toán Đồ thị

Trang 6

4 Spark được xây dựng trên hadoop

Sơ đồ sau đây cho thấy ba cách về cách Spark có thể được tạo bằng các thành phần Hadoop

- Standalone : Spark Triển khai độc lập có nghĩa là Spark chiếm vị trí trên đầu HDFS (Hệ thống tệp phân tán Hadoop) và không gian được phân bổ cho HDFS một cách rõ ràng Ở đây, Spark và MapReduce sẽ chạy song song với nhau để bao gồm tất cả các công việc spark trên cụm

- Hadoop Yarn : Việc triển khai Hadoop Yarn có nghĩa là đơn giản, spark chạy trên Yarn mà không cần cài đặt trước hoặc truy cập root Nó giúp tích hợp Spark vào hệ sinh thái Hadoop hoặc ngăn xếp Hadoop Nó cho phép các thành phần khác chạy trên đầu ngăn xếp

- Spark in MapReduce (SIMR): Spark trong MapReduce được sử dụng để khởi chạy công việc spark ngoài việc triển khai độc lập Với SIMR, người dùng có thểkhởi động Spark và sử dụng trình bao của nó mà không cần bất kỳ quyền truy cập quản trị nào

Trang 7

5 Thành phần của Spark

Hình minh họa sau đây mô tả các thành phần khác nhau của Spark

- Apache Spark gồm có 5 thành phần chính: Spark Core, Spark Streaming, Spark

SQL, MLlib và GraphX, trong đó:

o Spark Core là nền tảng cho các thành phần còn lại và các thành phần nàymuốn khởi chạy được thì đều phải thông qua Spark Core do Spark Core đảm nhận vai trò thực hiện công việc tính toán và xử lý trong bộ nhớ (In-memory computing) đồng thời nó cũng tham chiếu các dữ liệu được lưu trữ tại các hệ thống lưu trữ bên ngoài

o Spark SQL cung cấp một kiểu data abstraction mới (SchemaRDD) nhằm

hỗ trợ cho cả kiểu dữ liệu có cấu trúc (structured data) và dữ liệu nửa cấu trúc (semi-structured data – thường là dữ liệu dữ liệu có cấu trúc nhưng không đồng nhất và cấu trúc của dữ liệu phụ thuộc vào chính nội dung của dữ liệu ấy) Spark SQL hỗ trợ DSL (Domain-specific language)

để thực hiện các thao tác trên DataFrames bằng ngôn ngữ Scala, Java hoặc Python và nó cũng hỗ trợ cả ngôn ngữ SQL với giao diện command-line và ODBC/JDBC server

o Spark Streaming được sử dụng để thực hiện việc phân tích stream bằng

Trang 8

việc coi stream là các mini-batches và thực hiện kỹ thuật RDD

transformation đối với các dữ liệu mini-batches này Qua đó cho phép các đoạn code được viết cho xử lý batch có thể được tận dụng lại vào trong việc xử lý stream, làm cho việc phát triển lambda architecture được dễ dàng hơn Tuy nhiên điều này lại tạo ra độ trễ trong xử lý dữ liệu (độ trễ chính bằng mini-batch duration) và do đó nhiều chuyên gia cho rằng Spark Streaming không thực sự là công cụ xử lý streaming giống như Storm hoặc Flink

o MLlib (Machine Learning Library): MLlib là một nền tảng học máy phân tán bên trên Spark do kiến trúc phân tán dựa trên bộ nhớ Theo các so sánh benchmark Spark MLlib nhanh hơn 9 lần so với phiên bản chạy trênHadoop (Apache Mahout)

o GrapX: Grapx là nền tảng xử lý đồ thị dựa trên Spark Nó cung cấp các Api để diễn tả các tính toán trong đồ thị bằng cách sử dụng Pregel Api

6 RDD

6.1 Resilient Distributed Datasets

Resilient Distributed Datasets Là dữ liệu phân tán có khả năng phục hồi

Là một cấu trúc dữ liệu cơ bản của Spark, là một tập hợp phân tán bất biến củacác đối tượng Mỗi tập dữ liệu trong RDD được chia thành các phân vùng logic,

có thể được tính toán trên các nodes khác nhau của cụm RDD có thể chứa bất

kỳ loại đối tượng Python, Java hoặc Scala nào, bao gồm cả các lớp do người dùng định nghĩa

Về mặt hình thức, RDD là một tập hợp các bản ghi được phân vùng, chỉ

Trang 9

đọc RDD có thể được tạo thông qua các hoạt động xác định trên dữ liệu trên

bộ lưu trữ ổn định hoặc các RDD khác RDD là một tập hợp các phần tử chịu được lỗi có thể hoạt động song song Spark sử dụng khái niệm RDD để đạt được các hoạt động MapReduce nhanh hơn và hiệu quả hơn

6.2 Chia Sẻ Dữ Liệu Chậm Trong Mapreduce

o Khi sử dụng lại dữ liệu giữa các lần tính toán (Ví dụ: giữa 2 công việc MapReduce) thì phải bắt buộc ghi dữ liệu vào đĩa

o Chia sẻ dữ liệu chậm trong MapReduce do replication, serialization và disk IO

o Hầu hết các ứng dụng Hadoop dành 90% thời gian để đọc và ghi dữ liệu

6.3 Các Hoạt Động Lặp Lại Trên Mapreduce

Sử dụng lại kết quả của các lần tính toán trung gian à phát sinh chi phí đáng kể do sao chép, I/O disk và tuần tự hóa, khiến hệ thống chậm

Trang 10

6.4 Hoạt Động Tương Tác Trên Mapreduce

Mỗi truy vấn khi được thực thi sẽ I/O disk à điều này chi phối thời gian thực thi của ứng dụng

6.5 Chia sẻ dữ liệu bằng Spak RDD

● Hầu hết các ứng dụng Hadoop, chúng dành hơn 90% thời gian để thực hiện các thao tác đọc-ghi HDFS

● Nhận thức được vấn đề này thì các nhà nguyên cứu đã phát triển một

framework chuyên biệt có tên là Apache Spark

Ý tưởng chính của Spark là Resilient Distributed Datasets (RDD), nó hỗ trợ

tính toán xử lý trong bộ nhớ

● Điều này có nghĩa là, nó lưu trữ trạng thái bộ nhớ như một đối tượng trên các công việc và đối tượng có thể chia sẻ giữa các công việc đó Chia sẻ dữ liệu trong bộ nhớ nhanh hơn mạng và đĩa từ 10 đến 100 lần

6.6 Hoạt Động Lặp Lại Trên Spark RDD

Hình minh họa dưới đây cho thấy các hoạt động lặp lại trên Spark RDD

Nó sẽ lưu trữ các kết quả trung gian trong một bộ nhớ phân tán thay vì Ổ lưu trữ ổn định (Đĩa) và làm cho hệ thống nhanh hơn Nếu bộ nhớ phân tán

Trang 11

(RAM) không đủ để lưu trữ các kết quả trung gian (Trạng thái công việc), thì nó

sẽ lưu các kết quả đó trên đĩa

6.7 Hoạt Động Tương Tác Trên Spark RDD

Nếu các truy vấn khác nhau được chạy lặp lại trên cùng một tập dữ liệu, thì dữ liệu cụ thể này có thể được lưu trong bộ nhớ để có thời gian thực thi tốthơn

Theo mặc định, mỗi RDD đã chuyển đổi có thể được tính toán lại mỗi khibạn chạy một hành động trên nó Tuy nhiên, bạn cũng có thể duy trì một RDD trong bộ nhớ, trong trường hợp đó Spark sẽ giữ các phần tử xung quanh trên cụm để truy cập nhanh hơn nhiều, vào lần tiếp theo bạn truy vấn nó Ngoài ra còn có hỗ trợ cho các RDD lâu dài trên đĩa hoặc được sao chép qua nhiều nút

Trang 12

7. Kiến Trúc Apache Spark

7.1 Kiến trúc Apache Spark

Driver program trong kiến trúc Apache Spark gọi chương trình chính của một ứng dụng và tạo SparkContext Một SparkContext bao gồm tất cả các chức năng cơ bản Spark Driver chứa nhiều thành phần khác như DAG Scheduler, Task Scheduler, Backend Scheduler và Block Manager, chịu trách nhiệm dịch mã do người dùng viết thành các công việc thực sự được thực thi trên cụm.d Datasets

Spark Driver và SparkContext cùng giám sát việc thực hiện công việc trong cụm Spark Driver làm việc với Trình quản lý cụm để quản lý nhiều công việc khác Người quản lý cụm thực hiện công việc phân bổ tài nguyên Và sau đó, công việc được chia thành nhiều nhiệm vụ nhỏ hơn được phân phối tiếp đến các nút

Trang 13

đưa nó trở lại Bối cảnh Spark.

Người thi hành có trách nhiệm thực hiện các nhiệm vụ này Thời gian tồn tại của các trình thực thi giống như thời gian tồn tại của Ứng dụng Spark Nếu chúng ta muốn tăng hiệu suất của hệ thống, chúng ta có thể tăng số lượng các nútworker để các công việc có thể được chia thành nhiều phần hợp lý hơn

7.2 Quy Trình Làm Việc Của Spark

Bước 1 Client gửi spark user application code Khi application code được gửi,driver sẽ chuyển đổi hoàn toàn user code có chứa các transformations và actions thành DAG (directed acyclic graph) Ở giai đoạn này, nó cũng thực hiện các tối ưu hóa như biến đổi pipelining

Bước 2 Sau đó, nó chuyển đổi đồ thị logic được gọi là DAG thành kế hoạch thực thi vật lý với nhiều giai đoạn Sau khi chuyển đổi thành một kế hoạch thực thi vật lý, nó tạo ra các đơn vị thực thi vật lý được gọi là các nhiệm vụ theo từng giai đoạn Sau đó, các nhiệm vụ được nhóm lại và gửi đến cụm

Trang 14

Bước 3 Bây giờ driver nói chuyện với cluster manager và thương lượng các tài nguyên Driver khởi chạy các trình thực thi trong các worker node thay mặt cho driver Tại thời điểm này, driver sẽ gửi các nhiệm vụ cho những người thực thi dựa trên vị trí dữ liệu Khi người thực thi bắt (executors) đầu,

họ tự đăng ký với driver Vì vậy, driver sẽ có một cái nhìn đầy đủ về những người thực thi đang thực thi tác vụ

Bước 4 Trong quá trình thực thi các tasks, driver program sẽ giám sát tập hợp các trình thực thi đang chạy driver node cũng lên lịch các tasks trong tương lai dựa trên vị trí dữ liệu

Trang 15

PHẦN 2: XÂY DỰNG MỘT HỆ THỐNG ĐỀ XUẤT

1 Mục Đích Ứng Dụng

Trong khi làm việc trong các nhóm tìm kiếm của các công ty sản phẩm khác nhau, luôn có nhu cầu liên tục xây dựng một hệ thống khuyến nghị cho người dùng

Nhóm đã tìm hiểu xây dựng với các công cụ tìm kiếm phổ biến như

Elaticsearch, SOLR và đã thử hoàn thiện mức độ liên quan tìm kiếm Nhưng luôn có một giới hạn khi thực hiện liên quan đến tìm kiếm và tạo hệ thống đề xuất chỉ với các công cụ tìm kiếm Chúng ta luôn ngạc nhiên bởi các công ty như Amazon và Netflix cung cấp các khuyến nghị dựa trên sự quan tâm của mình Vì vậy, bằng cách sử dụng các khả năng học tập của Apache Spark cùng với Elaticsearch, nhóm sẽ xây dựng một hệ thống khuyến nghị

2 Ý Tưởng

Như trong hình trên, nếu người dùng 1 thích Mục A, Mục B và Mục C và Người dùng 2 Thích Mục B và Mục C, có khả năng cao là Người dùng 2 cũng thích Mục A và có thể giới thiệu Mục A cho Người dùng 2

Trong lĩnh vực hệ thống khuyến nghị, chủ yếu có ba kỹ thuật được sử dụng

để cung cấp các khuyến nghị

o Collaborative filtering

Trang 16

Tính toán sự tương tự giữa n item và n item ta có độ phức tạp O(N

rất nhanh đến các hoạt động xáo trộn quá tốn kém chi phí và thời gian máy tính không khả thi Để tính toán độ tương tự mục của item – item, chúng ta xây dựng một mô hình item bằng cách sử dụng sự giống nhau của các yếu tố vật phẩm từ

mô hình ALS bằng Spark và Elaticsearch

Thuật toán ALS về cơ bản là yếu tố hai ma trận - một là userFeatures và cái còn lại là ma trận itemFeatures Chúng tôi đang thực hiện sự tương đồng cosine trên Ma trận xếp hạng ItemFeatures để tìm sự tương đồng của mục vật phẩm

3 Thuật Toán

3.1 Collaborative Filtering

Ở phương pháp này ta sẽ cần xây dựng ma trận hệ số tương quan của véc tơ rating của các users để tìm ra nhóm users có cùng sở thích Hệ số tương quan giữa các users càng lớn thì sở thích của họ càng giống nhau và trái lại thì

họ càng có sở thích khác biệt Thuật toán sẽ dự đoán giá trị rating tại một cặp (user, item) chưa được rate bằng cách tính tổng có trọng số các giá trị rating của users tương quan nhất với user đó mà đã rate item trên Trọng số thông thường sẽ bẳng chính hệ số tương quan

Để xây dựng một thuật toán Neighborhood-based collaborative Filteringchúng ta cần trải qua các bước cơ bản bên dưới

Trang 17

a) Lấy trung bình các cột

b) Chuẩn hóa ma trận bằng cách trừ đi trung bình

c) Tính hệ số tương quan của ma trận chuẩn hóa

d) Dự đoán trên ma trận chuẩn hóa các vị trí chưa được rate

e) Diễn giải công thức dự báo rating

f) Chuyển đổi sang giá trị rating thực tế

Chuẩn hóa dữ liệu ở ma trận tiện ích bằng cách trừ đi ở mỗi cột (là các rating của cùng 1 user) trung bình giá trị rating của cột Việc này là để loại bỏ sự khác biệt về mức độ cho điểm của các user Vì ví dụ: Có một số user khó tính có thể cho điểm cao nhất là 3 nhưng user dễ tính thì điểm thấp nhất là 3 Khi đó nếu nhận định user khó tính không thích item (nếu ta coi 3 là điểm thấp) hoặc user dễ tính yêu thích item (nếu ta coi 3 là điểm cao) là không chuẩn xác Chuẩn hóa giá trịrating nhằm mục đích đưa trung bình rating của các user sau khi chuẩn hóa về 0 Gía trị rating dương thể hiện user ưa thích item và trái lại âm sẽ là không thích, bằng 0 là trung lập

Tính ma trận hệ số tương quan giữa các véc tơ cột Ma trận tương quan thểhiện sự tương đồng trong hành vi mua sắm giữa các user Từ ma trận tương quan

ta có thể xác định ra các users có sở thích tương đồng nhất với một user xác định

Trang 18

Hệ số tương quan dương và càng gần 1 chứng tỏ 2 users có sở thích giống nhau

Hệ số tương quan âm là 2 users có hành vi trái ngược

Dự báo rating của một user cho một item bằng cách xác định trên ma trận

hệ số tương quan một tập gồm users có giá trị tương quan lớn nhất đối với user

mà đã rate item Gía trị dự báo rating của user sẽ được tính bằng tổng có trọng sốcủa các rating trong tập users tương quan nêu trên theo công thức bên dưới:

Chuyển giá trị dự báo ở ma trận chuẩn hóa sang giá trị dự báo rating bằng cách cộng các giá trị ở ma trận chuẩn hóa với giá trị trung bình của mỗi cột

Một số hạn chês của User-user CF:

o Trên thực tế, số lượng users luôn lớn hơn số lượng items rất nhiều Kéo theo đó là Similarity matrix là rất lớn với số phần tử phải lưu giữ là hơn 1nửa của bình phương số lượng users (chú ý rằng ma trận này là đối

xứng) Việc này, như đã đề cập ở trên, khiến cho việc lưu trữ ma trận nàytrong nhiều trường hợp là không khả thi

o Ma trận Utility Y thường là rất sparse Với số lượng users rất lớn so với

số lượng items, rất nhiều cột của ma trận này sẽ rất sparse, tức chỉ có mộtvài phần tử khác 0 Lý do là users thường lười rating Cũng chính vì việc này, một khi user đó thay đổi rating hoặc rate thêm items, trung bình cộng các ratings cũng như vector chuẩn hoá tương ứng với user này thay đổi nhiều Kéo theo đó, việc tính toán ma trận Similarity, vốn tốn nhiều

bộ nhớ và thời gian, cũng cần được thực hiện lại

🡺 Vì vậy về mặt tính toán, Item-item CF có thể nhận được từ User-user CF

bằng cách chuyển vị (transpose) ma trận utility, và coi như items đang rate users Sau khi tính ra kết quả cuối cùng, ta lại chuyển vị một lần nữa để thu được kết quả.

3.2 Cosine Similarity

Đây là hàm được sử dụng nhiều nhất công thức tính cos của góc giữa hai

vector (u1, u2)

Ngày đăng: 10/06/2022, 09:37

HÌNH ẢNH LIÊN QUAN

Hình minh họa sau đây mô tả các thành phần khác nhau của Spark - Báo cáo cuối kì môn học hệ phân bố (1)
Hình minh họa sau đây mô tả các thành phần khác nhau của Spark (Trang 6)
5. Thành phần của Spark - Báo cáo cuối kì môn học hệ phân bố (1)
5. Thành phần của Spark (Trang 6)
Hình minh họa dưới đây cho thấy các hoạt động lặp lại trên Spark RDD. Nó sẽ lưu trữ các kết quả trung gian trong một bộ nhớ phân tán thay vì Ổ lưu  trữ ổn định (Đĩa) và làm cho hệ thống nhanh hơn.Nếu bộ nhớ phân tán  (RAM) không đủ để lưu trữ các kết quả  - Báo cáo cuối kì môn học hệ phân bố (1)
Hình minh họa dưới đây cho thấy các hoạt động lặp lại trên Spark RDD. Nó sẽ lưu trữ các kết quả trung gian trong một bộ nhớ phân tán thay vì Ổ lưu trữ ổn định (Đĩa) và làm cho hệ thống nhanh hơn.Nếu bộ nhớ phân tán (RAM) không đủ để lưu trữ các kết quả (Trang 10)
Như trong hình trên, nếu người dùng 1 thích Mục A, Mục B và Mục C và Người dùng 2 Thích Mục B và Mục C, có khả năng cao là Người dùng 2 cũng  thích Mục A và có thể giới thiệu Mục A cho Người dùng 2. - Báo cáo cuối kì môn học hệ phân bố (1)
h ư trong hình trên, nếu người dùng 1 thích Mục A, Mục B và Mục C và Người dùng 2 Thích Mục B và Mục C, có khả năng cao là Người dùng 2 cũng thích Mục A và có thể giới thiệu Mục A cho Người dùng 2 (Trang 15)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w