You are on page 1of 3

Một Apache Spark sẽ có 5 thành phần:

• Spark Core
Spark Core là trái tim của khung Apache Spark. Spark Core cung cấp bộ máy
thực thi cho nền tảng Spark và được sử dụng theo yêu cầu bởi các thành phần khác
được xây dựng trên Spark Core. Spark Core cung cấp tính toán bộ nhớ tích hợp và
tham chiếu các tập dữ liệu được lưu trữ trong các hệ thống lưu trữ ngoài. Nó là trách
nhiệm chính của Spark để thực hiện tất cả các chức năng I/O cơ bản, lập lịch, giám
sát, v.v. Ngoài ra, khắc phục lỗi và quản lý bộ nhớ hiệu quả là các chức năng quan
trọng khác của Spark Core.

Spark Core sử dụng một cấu trúc dữ liệu rất đặc biệt được gọi là RDD. Chia sẻ
dữ liệu trong các hệ thống xử lý phân tán như MapReduce yêu cầu dữ liệu ở các bước
trung gian được lưu trữ và sau đó được lấy từ lưu trữ vĩnh viễn như HDFS hoặc S3,
điều này làm cho nó rất chậm do việc tuần tự hóa và giải tuần tự hóa các bước I/O.
RDDs vượt qua điều này vì các cấu trúc dữ liệu này được lưu trong bộ nhớ, có khả
năng chịu lỗi và có thể được chia sẻ qua các nhiệm vụ khác nhau trong cùng một tiến
trình của Spark.

• Spark SQL
Spark SQL được xây dựng trên Shark, là SQL tương tác đầu tiên trên hệ thống Hadoop.
Spark SQL được xây dựng với kiến thức về Shark trên động cơ Spark Core để tận dụng sức
mạnh của Spark.
Spark SQL được đặt tên như vậy vì nó hoạt động với dữ liệu theo cách tương tự như SQL. Trong
thực tế, nó có đề cập rằng mục tiêu của Spark SQL là đáp ứng tiêu chuẩn SQL 92. Nhưng điểm
chính là nó cho phép các nhà phát triển viết mã khai báo để cho phép sử dụng nhiều dữ liệu và
cấu trúc lưu trữ (RDDs) nhất có thể để tối ưu hóa truy vấn phân tán kết quả phía sau. Mục tiêu là
cho phép người dùng không phải lo lắng quá nhiều về tính phân tán và tập trung vào các trường
hợp sử dụng kinh doanh. Người dùng có thể thực hiện các chức năng trích xuất, chuyển đổi và
tải dữ liệu từ nhiều nguồn khác nhau trong các định dạng khác nhau như JSON, Parquet hoặc
Hive và sau đó thực hiện các truy vấn ad-hoc bằng cách sử dụng Spark SQL.

• Spark Streaming
Thư viện Spark Streaming dành cho dữ liệu phát trực tuyến. Đây là một thư
viện Spark rất phổ biến vì nó sử dụng sức mạnh xử lý dữ liệu lớn của Spark và tăng
tốc độ xử lý. Spark Streaming có khả năng phát trực tuyến hàng gigabyte mỗi giây.
Khả năng xử lý dữ liệu lớn và nhanh này có rất nhiều tiềm năng. Spark Streaming
được sử dụng để phân tích một luồng dữ liệu liên tục. Một ví dụ phổ biến là xử lý dữ
liệu nhật ký từ một trang web hoặc máy chủ.
Spark streaming không phải là tính năng trực tiếp. Điều thực sự xảy ra là nó
chia nhỏ dữ liệu thành các phần riêng lẻ mà nó xử lý cùng nhau như các RDD nhỏ. Vì
vậy, nó không xử lý dữ liệu theo byte khi nó đến, mà nó xử lý dữ liệu mỗi giây hoặc
hai giây hoặc một khoảng thời gian cố định. Vì vậy, chính xác thì Spark streaming
không phải là thời gian thực nhưng gần như thời gian thực hoặc micro batching,
nhưng đó là đủ cho đa số các ứng dụng.

Spark streaming có thể được cấu hình để kết nối với nhiều nguồn dữ liệu khác
nhau. Vì vậy, chúng ta có thể chỉ cần thông qua một cổng có rất nhiều dữ liệu được
đưa vào, hoặc chúng ta có thể kết nối với các nguồn dữ liệu như Amazon Kinesis,
Kafka, Flume, vv. Có các kết nối có sẵn để kết nối Spark với các nguồn này. Ngoài ra
Spark streaming còn có khái niệm gọi là “checkpointing” để lưu trạng thái vào đĩa
định kỳ và tùy thuộc vào loại nguồn dữ liệu hoặc bộ thu mà chúng ta đang sử dụng, nó
có thể nhận dữ liệu từ điểm thất bại. Đây là một cơ chế rất mạnh mẽ để xử lý tất cả
các loại lỗi như lỗi đĩa hay lỗi văn bản vv.

Tương tự như Spark SQL có khái niệm Dataframe/Dataset được xây dựng trên RDD,
Spark streaming có cái gọi là Dstream. Đây là một bộ sưu tập các RDDs mà bao gồm toàn bộ dữ
liệu luồng. Dstream có thể áp dụng hầu hết các hàm tích hợp trên RDDs như flatMap, map, vv.
Ngoài ra, Dstream có thể được chia thành các RDDs riêng lẻ và có thể được xử lý từng phần
một. Nhà phát triển Spark có thể tái sử dụng cùng một mã cho xử lý luồng và lô và cũng có thể
tích hợp dữ liệu luồng với dữ liệu trước đó.

• Spark MLlib
Hiện nay, nhiều công ty tập trung vào việc xây dựng các sản phẩm và dịch vụ
dữ liệu tập trung vào khách hàng cần sử dụng học máy để xây dựng các thông tin dự
đoán, đề xuất và kết quả cá nhân hóa. Các nhà khoa học dữ liệu có thể giải quyết các
vấn đề này bằng các ngôn ngữ phổ biến như Python và R, nhưng họ mất rất nhiều thời
gian để xây dựng và hỗ trợ cơ sở hạ tầng cho các ngôn ngữ này. Spark có hỗ trợ tích
hợp sẵn cho việc thực hiện học máy và khoa học dữ liệu trên quy mô lớn bằng cách sử
dụng các cụm. Nó được gọi là MLLib, viết tắt của Machine Learning Library.

MLlib là một thư viện học máy cấp thấp. Nó có thể được sử dụng từ các ngôn ngữ
lập trình Java, Scala và Python. Nó đơn giản để sử dụng, có khả năng mở rộng và có
thể được tích hợp dễ dàng với các công cụ và khung công việc khác. MLlib giúp giảm
thiểu việc triển khai và phát triển các đường ống học máy có khả năng mở rộng. Học
máy là một chủ đề và có thể không thể đi vào chi tiết ở đây. Nhưng đây là một số tính
năng và khả năng quan trọng mà Spark MLLib cung cấp:

 Hồi quy tuyến tính, hồi quy logistic


 Máy vector hỗ trợ
 Bộ phân loại Naive Bayes
 Phân cụm K-Means
 Cây quyết định
 Đề xuất sử dụng Alternating Least Squares
 Thống kê cơ bản
 Kiểm tra chi bình phương, tương quan Pearsons hoặc Spearman, min, max,
mean, phương sai
 Trích xuất tính năng
 Tần suất thuật ngữ / Tần suất tài liệu nghịch đảo hữu ích cho tìm kiếm.

• GraphX
Đối với đồ thị và xử lý đồ thị song song, Apache Spark cung cấp một API khác
được gọi là GraphX. Đồ thị ở đây không có nghĩa là biểu đồ, đường thẳng hoặc biểu
đồ cột, mà đó là các đồ thị trong khoa học máy tính như các mạng xã hội bao gồm các
đỉnh trong đó mỗi đỉnh bao gồm một người dùng cá nhân trong mạng xã hội và có
nhiều người dùng kết nối với nhau bằng các cạnh. Những cạnh này đại diện cho mối
quan hệ giữa người dùng trong mạng.

GraphX hữu ích trong việc cung cấp thông tin tổng quan về mạng đồ thị như nó có thể
cho biết có bao nhiêu tam giác xuất hiện trong đồ thị và áp dụng thuật toán PageRank
cho nó. Nó có thể đo lường các yếu tố như “kết nối”, phân phối bậc, chiều dài đường
đi trung bình và các yếu tố cao cấp khác của một đồ thị. Nó cũng có thể kết hợp các
đồ thị với nhau và biến đổi các đồ thị nhanh chóng. Nó cũng hỗ trợ Pregel API để
duyệt qua một đồ thị. Spark GraphX cung cấp Resilient Distributed Graph (RDG -
một trừu tượng của Spark RDD). API của RDG được sử dụng bởi các nhà khoa học
dữ liệu để thực hiện một số hoạt động đồ thị thông qua các nguyên tố tính toán khác
nhau. Tương tự như RDDs, các hoạt động cơ bản như map, filter, property graphs
cũng bao gồm các toán tử cơ bản. Những toán tử này lấy UDFs (hàm được xác định
bởi người dùng) và tạo ra các đồ thị mới. Hơn nữa, chúng được sản xuất với các thuộc
tính và cấu trúc đã được biến đổi.

You might also like