You are on page 1of 44

Nội dung

 Giới thiệu
 Các thành phần Spark
 Một số khái niệm
 Mô hình thực thi ứng dụng
 Vòng đời ứng dụng
 Lập trình trên Spark
Giới thiệu
• Spark do đại học Berkeley xây dựng 2009.
• Đến năm 2013 tặng cho Apache
(spark.apache.org).
• 2014: Spark 1.0, 2016: Spark 2.0, 2022: Spark3.2.x
• Chức năng: tính toán phân tán trên bộ nhớ
trong.
• Hỗ trợ các NNLT: Java, Scala, Python
MapReduce của Hadoop đọc và ghi đĩa nhiều nên chậm.

Spark khắc phục bằng cách thao tác tính toán trên bộ nhớ trong.
Các thành phần Spark
Thư viện thao Thư viện xử lý
Thư viện Thư viện xử lý
tác với dữ liệu dữ liệu thời
học máy dữ liệu đồ thị
có cấu trúc gian thực

Engine thực
thi chung Java, Scala
làm nền tảng và Python
cho Spark.

Nền tảng triển khai Spark


Một số khái niệm
 Job (công việc): là một đoạn mã đọc dữ liệu từ một
đầu vào, xử lý, tính toán rồi ghi kết quả ra đầu ra.
 Stages (giai đoạn): công việc chia thành các giai đoạn.
 Tasks (nhiệm vụ): mỗi giai đoạn có một số nhiệm vụ
trên một phân vùng của dữ liệu.
 DAG (Directed Acyclic Graph): đồ thị có hướng không
chu trình dùng để biểu diễn luồng các công việc.
Minh họa DAG
Mô hình thực thi ứng dụng
Điều phối
code/logic
xử lý
Thực hiện
các tính
toán các
logic nhận
từ Driver

Quản lý tài nguyên


Mô hình thực thi ứng dụng
 Spark Driver:
 Chứa Spark Session dùng để tương tác với các Spark
Executor
 Thực hiện những tính toán không phân tán
 Một hệ thống tính toán chỉ có 1 Spark Driver
 Spark Executor:
 Thực hiện các công việc do Spark Driver giao
 Cluster Manager:
 Máy quản lý cụm máy tính để thực thi chương trình
Spark
Spark Driver
 Spark Driver chứa nhiều thành phần
 Chuyển code thành các jobs thực thi được trên cụm
máy tính
Spark Driver
 DAGScheduler
 Xây dựng DAG từ job
 Tách thành các Stages
 Tìm lịch trình tối ưu thực hiện các tasks
 Chuyển các tasks cho TaskScheduler
 TaskScheduler
 Gửi các tasks đến Excutor thông qua Cluster Manager
 Thực hiện lại các tasks lỗi
 SchedulerBackend
 Hỗ trợ thao tác lập lịch công việc theo các triển khai trên các hệ thống khác
nhau
 BlockManager
 Giao diện để đọc, ghi các khối dữ liệu theo các cách lưu trữ khác nhau
Spark Session
 Được bổ sung từ Spark 2.0 dùng làm đầu vào cho các
người dùng.
 Các Spark Session chia sẻ chung Spark Context để giao
tiếp với Executor
Spark Context
 Kết nối với Cluster Manager để cấp phát tài nguyên
 Gửi task đến các Executors
 Nhận báo cáo từ các Executors
Mô hình thực thi ứng dụng
 Spark đang hỗ trợ các loại cluster manager như sau:
 Hadoop YARN
 Apache Mesos
 Kubernetes
 Spark Standalone
Mô hình thực thi ứng dụng
 Spark hỗ trợ 3 mô hình thực thi ứng dụng:
 Cluster mode
 Client mode
 Local mode
Local mode
 Chạy Spark Driver và Executor trên máy cục bộ
Cluster mode
 Spark Driver và Spark Executor do Cluster Manager
quản lý
 Driver và Executor xem như các container trong
cluster
YARN-Cluster mode
Client mode
 Spark Driver độc lập
với Cluster Manager
 Cluster Manager
quản lý các Executor
YARN-Client mode
Vòng đời ứng dụng Spark
1. Client Request 2. Launch

3. Execution 4. Completion
Vòng đời ứng dụng Spark
 Client request:
 Client submit ứng dụng cần thực thi trên cụm máy tính
 Spark submit sẽ kết nối với master của Cluster Manager
yêu cầu tạo Spark Driver
 Cluster Manager tạo Container cho Spark Driver
 Launch:
 Spark Driver yêu cầu cấp phát tài nguyên để chạy Spark
Executor
Vòng đời ứng dụng Spark
 Execution:
 Thực thi các công việc theo logic của ứng dụng trên tài
nguyên được cấp phát
 Driver thường xuyên trao đổi với Executor để giao công
việc hoặc cập nhật trạng thái
 Các Executor cũng trao đổi với nhau khi cần
 Completion:
 Khi thực hiện các công việc đã xong hoặc Spark Driver
bị lỗi
 Cluster Manager thu hồi các tài nguyên đã cấp phát cho
các Executors
Nội dung
 Môi trường làm việc
 Chế độ làm việc Spark
 Lập trình Spark bằng Python (PySpark)
 SparkContext
 SparkSession
 Hướng dẫn sử dụng Colab
Môi trường làm việc
 Spark có thể cài đặt trên Linux, MacOS và Windows
 Spark có thể chạy trên máy đơn, cụm máy tính và Cloud
 Yêu cầu phần mềm:
 Java
 Apache Spark
 Trình biên dịch Scala/Python (Pyspark)
PySpark
 Apache Spark được viết bằng Scala
 Để hỗ trợ lập trình bằng Python, Spark cung cấp công cụ
PySpark
 PySpark hỗ trợ lập trình API và Shell
Chế độ làm việc
 Chế độ tương tác: pyspark
 Submit từ dòng lệnh

 Lệnh:
Spark Context
 Là điểm vào cho ứng dụng
trên Spark
 Khi một ứng dụng Spark
chạy trên Driver thì
SparkContext được khởi
tạo
 SparkContext sử dụng thư
viện Py4J để sinh ra một
JVM và tạo
JavaSparkContext
 Ngầm định PySpark có sẵn
một SparkContext sc trong
chế độ tương tác.
Spark Context
class pyspark.SparkContext (
master = None,
appName = None,
sparkHome = None,
pyFiles = None,
environment = None,
batchSize = 0,
serializer = PickleSerializer(),
conf = None,
gateway = None,
jsc = None,
profiler_cls = <class 'pyspark.profiler.BasicProfiler'>
)
Spark Context
 master − URL kết nối đến cụm máy tính.
 appName − Tên ứng dụng.
 sparkHome − Thư mục cài đặt Spark.
 pyFiles − file .zip hoặc .py gửi cho cluster.
 environment − Các biến môi trường của Worker nodes.
 batchSize − Quy định số đối tượng Python trong một đối
tượng Java, đặt 0 là tự động chọn.
 serializer − Cách tuần tự hoác các RDD.
 conf − đối tượng cấu hình cho các thuộc tính Spark.
 gateway − Chỉ định một JVM, ngầm định JVM mới.
 jsc − Chỉ định JavaSparkContext, ngầm định là đối tượng mới.
 profiler_cls − Một lớp cho hồ sơ người dùng (ngầm định
pyspark.profiler.BasicProfiler).
 Ví dụ: đếm số dòng chứa ký tự ‘a’, ‘b’ trong một file

from pyspark import SparkContext


logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md"
sc = SparkContext("local", "first app")
logData = sc.textFile(logFile).cache()
numAs = logData.filter(lambda s: 'a' in s).count()
numBs = logData.filter(lambda s: 'b' in s).count()
print ("Lines with a: %i, lines with b: %i" % (numAs, numBs))
SparkSession
class pyspark.sql.SparkSession(sparkContext,
jsparkSession=None)
 Dùng để tạo một phiên làm việc cho một người dùng.
 Thường tạo SparkSession:
spark = SparkSession.builder \
.master("local") \
.appName(“My App") \
.getOrCreate()
 Để lấy SparkContext của SparkSession dùng phương
thức sparkContext
 Thường dùng SparkSession để thao tác với DataFrame
Hướng dẫn sử dụng Colab
 Colab là dịch vụ của Google hỗ trợ người dùng sử dụng
tài nguyên tính toán miễn phí/có phí.
 Colab hỗ trợ một máy ảo Linux
 Có thể sử dụng để cài đặt và thực hành Spark
Thao tác
 Đăng nhập tài khoản
gmail của Google
 Vào ứng dụng Drive
 Thêm mới tài nguyên
Cài đặt
 !sudo apt update
 !apt-get install openjdk-8-jdk-headless -qq > /dev/null
 !wget -q https://archive.apache.org/dist/spark/spark-
3.0.1/spark-3.0.1-bin-hadoop2.7.tgz
 !tar xf spark-3.0.1-bin-hadoop2.7.tgz

Mount Drive:
 from google.colab import drive
 drive.mount('/content/drive')
Thiết lập môi trường
 import os
 os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-
openjdk-amd64"
 os.environ["SPARK_HOME"] = "/content/spark-3.0.1-
bin-hadoop2.7“
Tổng kết
 Spark là môi trường tính toán phân tán dựa trên bộ nhớ.
 Spark có thể tính toán dựa trên tài nguyên của cụm máy
tính tương thích.
 Spark có thể lấy dữ liệu từ HDFS, S3, HBase,...
 SparkContext dùng để giao tiếp với Cluster Manager
 SparkSession dùng để quản lý các phiên làm việc của
người dùng

You might also like