Tải bản đầy đủ (.docx) (23 trang)

Báo cáo giữa kì chủ đề tìm hiểu về spark môn học cơ sở dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (469.88 KB, 23 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>BỘ GIÁO DỤC VÀ ĐÀO TẠO</b>

<b>TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊNKHOA TOÁN- CƠ-TIN HỌC</b>

<b>BÁO CÁO GIỮA KÌ</b>

<b>CHỦ ĐỀ : TÌM HIỂU VỀ SPARKMƠN HỌC : CƠ SỞ DỮ LIỆU</b>

<b>GIẢNG VIÊN HƯỚNG DẪN : VŨ TIẾN DŨNGNHÓM THỰC HIỆN : NHÓM 11</b>

<b>LỚP : K67A3 KHMT&TT</b>

<b>NĂM HỌC 2023 - 2024</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>DANH SÁCH SINH VIÊN THAM GIA BÁO CÁO</b>

3. Apache Spark (cornell.edu)

4. Spark SQL & DataFrames | Apache Spark

5. Querying database data using Apache Spark™ SQL in Java :: DataStax Enterprise 5.1 Documentation

6. class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

II.Ưu Điểm và Ứng Dụng Của Apache Spark...3

A.Hiệu suất cao...3

B. Sự linh hoạt trong xử lý dữ liệu...3

III. Sử Dụng Apache Spark Trong Cơ Sở Dữ Liệu...3

A. Tích hợp với ngơn ngữ SQL...3

B. Xử lý và phân tích dữ liệu lớn...3

IV. Thực Hành và Triển Khai Apache Spark...4

A. Xây dựng ứng dụng đơn giản...4

B. Triển khai ứng dụng trên môi trường thực tế...4

V. Kết Luận và Hướng Phát Triển...4

A. Tóm tắt kiến thức học được về Apache Spark trong môn cơ sở dữ liệu...4

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

I.Tổng quan

A.Tổng quan về BigData và MySQL 1.Big Data:

 Big Data là một thuật ngữ được sử dụng để mô tả lượng dữ liệu lớn, phức tạp và đa dạng mà không thể được xử lý bằng các công cụ và phương pháp truyền thống.

 Đặc điểm chính của Big Data là khả năng xử lý và lưu trữ các tập dữ liệu rất lớn, thậm chí hàng terabytes hoặc petabytes, cũng như dữ liệu có cấu trúc, bán cấu trúc và khơng cấu trúc.

 Big Data có 3 yếu tố quan trọng được gọi là "3V": Velocity (Tốc độ), Volume (Lượng), và Variety (Đa dạng).

1. MySQL:

 MySQL là hệ thống quản lý cơ sở dữ liệu (DBMS) mã nguồn mở, rất phổ biến và được sử dụng rộng rãi trên tồn thế giới.

 MySQL dựa trên mơ hình cơ sở dữ liệu quan hệ (Relational Database Management System - RDBMS), và nó sử dụng ngơn ngữ truy vấn SQL (Structured Query Language) để tương tác với dữ liệu.

 MySQL được sử dụng chủ yếu cho các ứng dụng có cấu trúc, như các hệ thống quản lý thơng tin, trang web, ứng dụng di động, và các ứng dụng doanh nghiệp.

Tóm lại, Big Data liên quan đến xử lý và lưu trữ các tập dữ liệu lớn và đa dạng, trong khi MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ thường được sử dụng cho dữ liệu có cấu trúc. Mặc dù chúng có các ứng dụng riêng biệt, nhưng cũng có thể kết hợp để xử lý dữ liệu lớn trong môi trường cụ thể, sử dụng các công nghệ Big Data như Hadoop hoặc Spark kết hợp với MySQL để lưu trữ và truy xuất dữ liệu.

B.Tổng quan về Apache Spark

1.Định nghĩa và mục tiêu sử dụng

 Apache Spark™ là một hệ thống xử lý dữ liệu phân tán mã nguồn mở. Đây là một công cụ đa ngôn ngữ cho việc thực hiện kỹ thuật dữ liệu, khoa học dữ liệu và học máy trên các máy đơn nút hoặc cụm.

 Apache Spark có khả năng xử lý dữ liệu theo lô và dữ liệu luồng thời gian thực, sử dụng nhiều ngôn ngữ như: Python, SQL, Scala, Java hoặc R.

 Apache Spark cung cấp một giao diện cho việc lập trình cụm với song song dữ liệu ngầm và khả năng chịu lỗi.

 Ban đầu được phát triển tại AMPLab của Đại học California, Berkeley, mã nguồn Spark sau đó đã được tặng cho Tổ chức Phần mềm Apache, tổ chức đã duy trì nó từ đó

 (Tóm tắt: Apache Spark là một hệ thống xử lý dữ liệu phân tán mã nguồn mở, hỗ trợ nhiều ngôn ngữ và có khả năng xử lý dữ liệu theo lơ và dữ liệu luồng thời gian thực. Nó cung cấp một giao diện cho việc lập trình cụm với song song dữ liệu ngầm và khả năng chịu lỗi.)

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

 Ví dụ về Spark trong Java:

 Tính đơn giản: Apache Spark cung cấp các API phong phú cho Scala, Java và Python giúp người dùng dễ sử dụng hơn.

 Tính tổng quát: Cung cấp các API cho các loại khối lượng công việc khác nhau, bao gồm xử lý theo lô, luồng, học máy và xử lý đồ thị.

 Độ trễ thấp: Apache Spark đạt độ trễ thấp thông qua xử lý trong bộ nhớ và lưu trữ cache.  Khả năng chịu lỗi: Trong Apache Spark, các lỗi không được coi là trường hợp đặc biệt.

Điều này có nghĩa là hệ thống được thiết kế để xử lý lỗi và tiếp tục xử lý.

Những mục tiêu này giúp Apache Spark trở thành một công cụ xử lý dữ liệu lớn một cách nhanh chóng và linh hoạt.

<b>2. Tính năng chính:</b>

 Xử lý dữ liệu theo lơ/Truyền tải dữ liệu: Hợp nhất việc xử lý dữ liệu theo lô và truyền tải dữ liệu theo thời gian thực, sử dụng theo ngôn ngữ của người dùng: Python, SQL, Scala, Java hoặc R.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

 Phân tích SQL: Thực thi các truy vấn ANSI SQL một cách nhanh chóng, phân tán để tạo bảng thơng tin và báo cáo linh hoạt. Apache Spark có thể thực hiện điều này nhanh hơn hầu hết các kho dữ liệu truyền thống.

 Khoa học dữ liệu ở quy mô lớn: Exploratory Data Analysis (EDA) (tạm dịch là phân tích khám phá dữ liệu) trên dữ liệu quy mô petabyte mà không cần thu nhỏ dữ liệu.

 Học máy: Huấn luyện thuật toán học toán trên laptop và sử dụng cùng đoạn code để mở rộng các cụm máy chịu lỗi lên đến hàng nghìn máy.

<b>3. Cơ sở hạ tầng và kiến trúc</b>

<b>3.1.Resilient Distributed Datasets (RDDs):</b>

Spark xoay quanh khái niệm về resilient distributed dataset (RDD) (tạm dịch là bộ dữ liệu phân tán kiên định), là một tập hợp các phần tử chịu lỗi có thể vận hành song song với nhau. Có hai cách để tạo RDD: song song hóa một tập hợp trong chương trình điều khiển của người dùng, hoặc tham chiếu đến một tập dữ liệu trong một hệ thơng lưu trữ bên ngồi, như một hệ thống tệp chia sẻ, HDFS, HBase, hoặc bất kỳ nguồn nào cung cấp HadoopInputFormat.

<b>3.2.Kiến trúc:a. Spark Core:</b>

Là nền tảng của dự án. Spark Core cung cấp các chức năng phân phối nhiệm vụ, lập lịch và các chức năng I/O cơ bản.

<b>b. Spark SQL:</b>

 Spark SQL là mô-đun của Spark giúp xử lý dữ liệu có cấu trúc thơng qua SQL và API Dataset. Nó sử dụng thơng tin về cấu trúc dữ liệu và phép toán để tối ưu hóa q trình xử lý. Điểm mạnh của Spark SQL là khả năng thống nhất, cho phép các nhà phát triển linh hoạt chuyển đổi giữa các API để biểu đạt phép biến đổi một cách tự nhiên nhất.

 Tính năng:

 Tích hợp với truy vấn SQL: Spark SQL điều chỉnh kế hoạch thực thi trong thời gian chạy.

 Hỗ trợ ANSI SQL

 Hỗ trợ dữ liệu có cấu trúc và dữ liệu phi cấu trúc: Spark SQL hoạt động trên các dữ liệu có cấu trúc và dữ liệu phi cấu trúc như JSON hoặc hình ảnh.

 Hiệu năng và khả năng mở rộng: Spark SQL bao gồm một trình tối ưu hóa dựa trên chi phí, lưu trữ theo cột và tạo mã để làm cho các truy vấn nhanh hơn. Đồng thời, nó có thể mở rộng lên hàng nghìn nút và thực hiện các truy vấn kéo dài nhiều giờ bằng cách sử dụng công cụ Spark, đảm bảo khả năng chịu lỗi giữa truy vấn.

<b>c. Spark Streaming: </b>

Spark Streaming là một phần mở rộng của API Spark Core, cho phép xử lý luồng dữ liệu trực tiếp mạnh mẽ, có khả năng mở rộng, chịu lỗi. Dữ liệu có thể được thu

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

thập từ nhiều nguồn như Kafka, Kinesis, hoặc các socket TCP, và có thể được xử lý bằng các thuật toán phức tạp được biểu diễn bằng các hàm cấp cao như map, reduce, join và window.

<b>d. MBlib:</b>

MLlib là thư viện học máy (ML) của Spark. Mục tiêu của nó là làm cho học máy thực tế có thể mở rộng và dễ dàng. Ở mức độ cao, nó cung cấp các cơng cụ như:

 Các thuật toán ML: các thuật toán học phổ biến như phân loại, hồi quy, phân cụm và lọc cộng tác

 Featurization: trích xuất đặc trưng, biến đổi, giảm chiều và lựa chọn  Pipelines: công cụ để xây dựng, đánh giá và tinh chỉnh Pipelines ML  Persistence: lưu và tải thuật tốn, mơ hình và Pipelines

 Utilities: đại số tuyến tính, thống kê, xử lý dữ liệu, v.v.

<b>e. GraphX:</b>

GraphX là một thành phần mới trong Spark dành cho đồ thị và tính tốn song song trên đồ thị. Ở mức độ cao, GraphX mở rộng RDD của Spark bằng cách giới thiệu một trừu tượng mới về đồ thị: một đa đồ thị có hướng với các thuộc tính được gắn vào mỗi đỉnh và cạnh. Để hỗ trợ tính tốn đồ thị, GraphX tiết lộ một tập hợp các tốn tử cơ bản (ví dụ: subgraph, joinVertices và aggregateMessages) cũng như một biến thể tối ưu hóa của API Pregel. Ngồi ra, GraphX bao gồm một bộ sưu tập ngày càng phát triển của các thuật tốn đồ thị và trình xây dựng để đơn giản hóa các nhiệm vụ phân tích đồ thị.

II.Ưu Điểm và Ứng Dụng Của Apache Spark A.Hiệu suất cao

1. So sánh với Hadoop MapReduce.

Spark là sự nâng cấp so với Hadoop Map Reduce. The điểm khác biệt lớn nhất giữa Spark và MapReduce chính là Spark xử lý và ghi nhớ dữ liệu cho các tiến trình sau, trong khi MapReduce xử lý dữ liệu trong bộ nhớ. Vì vậy, dữ liệu được Spark xử lý nhanh hơn 100 lần so với MapReduce.

2. Xử lý dữ liệu in-memory giúp tăng tốc độ xử lý

Trong tính tốn in-memory, dữ liệu được lưu trữ trong bộ nhớ tạm thời (RAM) thay vì các ổ cứng chậm chạp và được xử lý song song .Vì vậy chúng ta có thể xác định được kiểu mẫu, phân tích những dữ liệu lớn. Phương pháp này càng ngày càng phổ biến do tiết kiệm giá thành nên được rất nhiều công ty ưa chuộng. Hai phương thức chính của tính tốn in-memory gồm :

 Dung lượng bộ nhớ RAM  Xử lý song song phân phối.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>3. Tổng quan về tính tốn in-memory trong Spark </b>

Lưu dữ liệu trong bộ nhớ cải thiện hiệu suất đáng kể. Trong Apache Spark, khái niệm chính là Resilient Distributed Datasets (RDDs). Và RDDs được lưu trữ trong bộ nhớ 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ả các RDD được lưu trữ trong bộ nhớ. Khi RDD lưu trữ giá trị trong bộ nhớ, dữ liệu không thể vừa với bộ nhớ sẽ được tính tốn lại hoặc dữ liệu thặc là lưu trữ trên đĩa. Khi cần RDD, chúng ta có thể trích xuất nó mà khơng cần truy cập đĩa. Điều này giúp giảm bớt độ phức tạp về không gian và thời gian cũng như chi phí của việc lưu trữ trên đĩa.

Khả năng lưu trữ trong bộ nhớ của Spark thích hợp cho machine learning và xử lý theo mẻ nhỏ (micro-batch processing). Nó cung cấp thực thi nhanh hơn cho các công việc lặp đi lặp lại. Khi chúng ta sử dụng phương thức persist(), các RDD cũng có thể được lưu trữ trong bộ nhớ và được sử dụng trong các hoạt động song song. Sự khác biệt giữa cache() và persist() là khi sử dụng cache(), mức lưu trữ mặc định là MEMORY_ONLY, trong khi khi sử dụng persist(), chúng

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>3.1. MEMORY_ONLY(chỉ lưu trữ trong bộ nhớ )</b>

<i>Spark storage level – memory only</i>

Trong mức lưu trữ này của Spark, RDD được lưu trữ dưới dạng đối tượng JAVA được giải mã trong JVM. Nếu RDD không vừa với bộ nhớ, thì các phần cịn lại sẽ được tính tốn lại mỗi khi cần sử dụng

<b>3.2. MEMORY_AND_DISK( lưu trữ trong bộ nhớ và ổ đĩa)</b>

<i>Spark storage level-memory and disk</i>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Ở mức lưu trữ này, RDD được lưu trữ dưới dạng đối tượng JAVA được giải mã trong JVM. Nếu tồn bộ RDD khơng vừa với bộ nhớ, thì các phần cịn lại sẽ được lưu trữ trên đĩa, thay vì tính tốn lại chúng mỗi khi cần sử dụng.

<b>3.3 MEMORY_ONLY_SER(chỉ lưu trữ trong bộ nhớ dưới dạng đã được tuần tự hóa)</b>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

Mức lưu trữ này lưu trữ RDD dưới dạng đối tượng JAVA đã được serialize. Nó lưu trữ mảng một byte cho mỗi phân vùng. Nó tương tự MEMORY_ONLY nhưng hiệu quả về không gian, đặc biệt khi chúng ta sử dụng serializer nhanh.

<b>3.4. MEMORY_AND_DISK_SER(lưu trữ trong bộ nhớ và đĩa dưới dạng đã</b>

được tuần tự hóa)

<i>Spark storage level – memory and disk serialized</i>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Mức lưu trữ này lưu trữ RDD dưới dạng đối tượng JAVA đã được serialize. Nếu tồn bộ RDD khơng vừa với bộ nhớ, thì các phần cịn lại sẽ được lưu trữ trên đĩa, thay vì tính tốn lại chúng mỗi khi cần sử dụng.

<b>3.5. DISK_ONLY</b>

<i>Spark storage level-disk-only</i>

Mức lưu trữ này chỉ lưu trữ các phân vùng của RDD trên đĩa.

B. Sự linh hoạt trong xử lý dữ liệu:

1. Hỗ trợ nhiều ngôn ngữ lập trình như Scala, Java, Python.

Lập trình viên có thể viết các ứng dụng Spark bằng nhiều ngôn ngữ khác nhau. Năm 2014, 84% người dùng sử dụng Scala, trong khi Java và Python cùng là 38% (Người dùng có thể sử dụng nhiều hơn 1 ngơn ngữ trong các ứng dụng của mình). Đến năm 2015, Spark hỗ trợ thêm ngơn ngữ R, rất nhanh chóng có tới 18% người dùng R, Python cũng tăng lên 58%

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

2. Xử lý dữ liệu đa dạng từ batch đến stream.

Apache Spark có khả năng xử lý nhiều loại dữ liệu khác nhau. Nó là một hệ thống tính tốn phân tán mạnh mẽ, được thiết kế để xử lý các tác vụ phức tạp trên dữ liệu lớn. Dưới đây là một số loại dữ liệu mà Apache Spark có thể xử lý:

 Dữ liệu cấu trúc (Structured Data): Spark hỗ trợ xử lý dữ liệu bảng, dữ liệu có cấu trúc như CSV, Parquet, Avro, JSON và thậm chí cả dữ liệu từ các cơ sở dữ liệu quan hệ.  Dữ liệu văn bản (Text Data): Spark có các API cho xử lý văn bản, cho phép bạn thực

hiện các tác vụ như tìm kiếm, phân loại và phân tích nội dung văn bản.

 Dữ liệu đồ thị (Graph Data): Spark hỗ trợ xử lý dữ liệu đồ thị thông qua thư viện GraphX, cho phép tính tốn đồ thị và các phân tích liên quan đến mạng lưới dữ liệu.  Dữ liệu luồng (Streaming Data): Spark Streaming cho phép xử lý dữ liệu luồng thời gian

thực, như dữ liệu từ các nguồn như Apache Kafka, Flume, và hệ thống luồng dữ liệu khác.

 Dữ liệu hình ảnh và âm thanh (Image and Audio Data): Mặc dù Spark chủ yếu được sử dụng cho dữ liệu cấu trúc và văn bản, nhưng bạn có thể sử dụng các thư viện mở rộng để xử lý dữ liệu hình ảnh và âm thanh.

 Dữ liệu đa phương tiện (Multimedia Data): Bạn có thể sử dụng Spark để xử lý dữ liệu đa phương tiện như video, dữ liệu 3D, và nhiều định dạng khác.

 Dữ liệu địa lý (Geospatial Data): Spark có thư viện hỗ trợ xử lý dữ liệu địa lý, giúp bạn thực hiện các phân tích liên quan đến vị trí địa lý.

 Dữ liệu thời tiết (Weather Data): Spark có thể được sử dụng để xử lý dữ liệu thời tiết và thực hiện các phân tích liên quan đến dự báo thời tiết và biến đổi khí hậu.

Bên cạnh đó, Spark là công cụ hợp nhất để nhập dữ liệu từ nhiều nguồn khác nhau bằng các kỹ thuật khác nhau; xử lý dữ liệu thành nhiều định dạng dữ liệu như Parquet, ORC, Avro hoặc bus tin nhắn Kafka; và lưu trữ nó trong một trong nhiều mục tiêu khác nhau

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

III. Sử Dụng Apache Spark Trong Cơ Sở Dữ Liệu

A. Tích hợp với ngơn ngữ SQL:

1. Sử dụng Spark SQL để thực hiện truy vấn dữ liệu. Bước 1: Tạo một đối tượng SparkSession sử dụng builder interface

Bước 2: Sau khi đã tạo đối tượng SparkSession, ta có thể sử dụng nó để tạo đối tượng DataFrame từ truy vấn. Truy vấn được thực hiện bằng cách gọi hàm SparkSession.sql

<small>SparkSession spark = SparkSession .builder()</small>

<small> .appName("My application name") .config("option name", "option value")</small>

<small> .master("dse://1.1.1.1?connection.host=1.1.2.2,1.1.3.3") .getOrCreate();</small>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Bước 3: Đối tượng DataFrame sau khi được trả lại sẽ hỗ trợ các thao tác cơ bản của Spark

2. Kết hợp cả cơ sở dữ liệu phân tán và cơ sở dữ liệu phổ biến khác.

Spark SQL cũng bao gồm một nguồn dữ liệu có thể đọc dữ liệu từ các cơ sở dữ liệu khác sử dụng JDBC. Chức năng này nên được ưu tiên hơn việc sử dụng JdbcRDD. Điều này là bởi vì kết quả được trả về dưới dạng DataFrame và chúng có thể dễ dàng được xử lý trong Spark SQL hoặc được kết hợp với các nguồn dữ liệu khác. Nguồn dữ liệu JDBC cũng dễ sử dụng hơn từ Java hoặc Python vì nó khơng yêu cầu người dùng cung cấp ClassTag.

Các bước thực hiên:

+ Bước 1: Thêm JDBC driver cho cơ sở dữ liệu cụ thể của người dùng vào đường dẫn đến các lớp của Spark. Ví dụ, câu lệnh để kết nối đến postgres từ Spark Shell là:

+ Bước 2: Tải dữ liệu từ cơ sở dữ liệu: Sau khi đã thêm JDBC, ta có thể tải bảng trong một cơ sở dữ liệu từ xa như là DataFrame, hoặc xem tạm thời bằng cách sử dụng API Data Sources. Ví dụ về một đoạn code:

Đoạn code trên tải bảng ‘people’ từ cơ sở dữ liệu postgres

+ Bước 3: Thực hiện truy vấn SQL: Sau khi đã tải dữ liệu, ta có thể thực hiện truy vấn SQL trên DataFrame. Ví dụ:

<small>DataFrame employees = spark.sql("SELECT * FROM company.employees");</small>

<small>DataFrame managers = spark.sql("SELECT name FROM employees WHERE role = 'Manager' ");</small>

</div>

×