1. Giới thiệu – Dịch vụ được quản lý cho Apache Spark
Dịch vụ được quản lý cho Apache Spark là một dịch vụ được quản lý toàn diện và có khả năng mở rộng cao để chạy Apache Spark, Apache Flink, Presto và nhiều công cụ cũng như khung nguồn mở khác. Hãy sử dụng Dịch vụ được quản lý cho Apache Spark để hiện đại hoá hồ dữ liệu, ETL / ELT và khoa học dữ liệu an toàn ở quy mô toàn cầu. Dịch vụ được quản lý cho Apache Spark cũng được tích hợp đầy đủ với một số dịch vụ của Google Cloud, bao gồm BigQuery, Cloud Storage, Gemini Enterprise Agent Engine và Knowledge Catalog.
Dịch vụ được quản lý cho Apache Spark có 2 chế độ triển khai:
- Dịch vụ được quản lý cho Apache Spark không máy chủ cho phép bạn chạy các công việc PySpark mà không cần định cấu hình cơ sở hạ tầng và tính năng tự động cấp tài nguyên bổ sung. Dịch vụ được quản lý cho Apache Spark hỗ trợ các phiên / sổ tay và khối lượng công việc hàng loạt PySpark.
- Cụm Dịch vụ được quản lý cho Apache Spark cho phép bạn quản lý một cụm Hadoop YARN cho các khối lượng công việc Spark dựa trên YARN, ngoài các công cụ nguồn mở như Flink và Presto. Bạn có thể điều chỉnh các cụm dựa trên đám mây theo ý muốn, bao gồm cả tính năng tự động cấp tài nguyên bổ sung.
2. Tạo cụm Dịch vụ được quản lý cho Apache Spark trên VPC của Google Cloud
Trong bước này, bạn sẽ tạo một cụm Dịch vụ được quản lý cho Apache Spark trên Google Cloud bằng bảng điều khiển Google Cloud.
Bước đầu tiên là bật API dịch vụ Dịch vụ được quản lý cho Apache Spark trên bảng điều khiển. Sau khi bật, hãy tìm "Dịch vụ được quản lý cho Apache Spark" trong thanh tìm kiếm rồi nhấp vào Tạo cụm.
Chọn Cụm trên Compute Engine để sử dụng các VM của Google Compute Engine(GCE) làm cơ sở hạ tầng cơ bản để chạy các cụm Dịch vụ được quản lý cho Apache Spark.

Giờ thì bạn đã ở trên trang Tạo cụm.

Trên trang này:
- Đặt một tên riêng biệt cho cụm.
- Chọn vùng cụ thể . Bạn cũng có thể chọn một Khu vực, tuy nhiên, Dịch vụ được quản lý cho Apache Spark có thể tự động chọn một khu vực cho bạn. Đối với lớp học lập trình này, hãy chọn "us-central1" và "us-central1-c"..
- Chọn loại cụm "Tiêu chuẩn". Điều này đảm bảo rằng có một nút chính.
- Trong thẻ Định cấu hình nút, hãy xác nhận rằng số lượng trình thực thi được tạo sẽ là 2.
- Trong phần Tuỳ chỉnh cụm, hãy đánh dấu vào hộp bên cạnh Bật cổng thành phần. Thao tác này cho phép truy cập vào các giao diện web trên cụm, bao gồm cả giao diện người dùng Spark, Trình quản lý nút Yarn và sổ tay Jupyter.
- Trong Thành phần không bắt buộc, hãy chọn Sổ tay Jupyter. Thao tác này sẽ định cấu hình cụm bằng một máy chủ sổ tay Jupyter.
- Giữ nguyên mọi thứ khác rồi nhấp vào Tạo cụm.
Thao tác này sẽ khởi động một cụm Dịch vụ được quản lý cho Apache Spark.
3. Khởi chạy cụm và SSH vào cụm
Sau khi trạng thái cụm chuyển thành Đang chạy, hãy nhấp vào tên cụm trong bảng điều khiển Dịch vụ được quản lý cho Apache Spark.

Nhấp vào thẻ Phiên bản VM để xem nút chính và 2 nút trình thực thi của cụm.

Nhấp vào SSH bên cạnh nút chính để đăng nhập vào nút chính.

Chạy các lệnh hdfs để xem cấu trúc thư mục.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
4. Giao diện web và cổng thành phần
Trong bảng điều khiển cụm Dịch vụ được quản lý cho Apache Spark, hãy nhấp vào tên cụm của bạn, sau đó nhấp vào thẻ GIAO DIỆN WEB.

Thao tác này sẽ cho thấy các giao diện web có sẵn, bao gồm cả Jupyter. Nhấp vào Jupyter để mở sổ tay Jupyter. Bạn có thể dùng sổ tay này để tạo sổ tay trong PySpark được lưu trữ trên GCS. để lưu trữ sổ tay của bạn trên Google Cloud Storage và mở sổ tay PySpark để sử dụng trong lớp học lập trình này.
5. Giám sát và quan sát các công việc của Spark
Khi cụm Dịch vụ được quản lý cho Apache Spark đã hoạt động, hãy tạo một công việc hàng loạt PySpark và gửi công việc đó đến cụm Dịch vụ được quản lý cho Apache Spark.
Tạo một nhóm Google Cloud Storage (GCS) để lưu trữ tập lệnh PySpark. Đảm bảo tạo nhóm trong cùng khu vực với cụm Dịch vụ được quản lý cho Apache Spark.

Sau khi tạo nhóm GCS, hãy sao chép tệp sau vào nhóm này.
https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py
Tập lệnh này tạo một DataFrame Spark mẫu và ghi tập lệnh đó dưới dạng bảng Hive.
hive_job.py
from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row
spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()
df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
(2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")
Gửi tập lệnh này dưới dạng công việc hàng loạt Spark trong Dịch vụ được quản lý cho Apache Spark. Nhấp vào Công việc trong trình đơn điều hướng bên trái, sau đó nhấp vào Gửi công việc

Cung cấpID công việc và khu vực. Chọn cụm của bạn và cung cấp vị trí GCS của tập lệnh Spark mà bạn đã sao chép. Công việc này sẽ chạy dưới dạng công việc hàng loạt Spark trên Dịch vụ được quản lý cho Apache Spark.
Trong phần Thuộc tính , hãy thêm khoá spark.submit.deployMode và giá trị client để đảm bảo rằng trình điều khiển chạy trong nút chính của Dịch vụ được quản lý cho Apache Spark chứ không phải trong các nút trình thực thi. Nhấp vào Gửi để gửi công việc hàng loạt đến Dịch vụ được quản lý cho Apache Spark.

Tập lệnh Spark sẽ tạo một DataFrame và ghi vào bảng Hive test_table_1.
Sau khi công việc chạy thành công, bạn có thể thấy các câu lệnh in bảng điều khiển trong thẻ Giám sát.

Sau khi tạo bảng Hive, hãy gửi một công việc truy vấn Hive khác để chọn nội dung của bảng và hiển thị trên bảng điều khiển.
Tạo một công việc khác có các thuộc tính sau:

Lưu ý rằng Loại công việc được đặt thành Hive và loại nguồn truy vấn là Văn bản truy vấn, nghĩa là chúng ta sẽ viết toàn bộ câu lệnh HiveQL trong hộp văn bản Văn bản truy vấn.
Gửi công việc, giữ nguyên các tham số còn lại theo mặc định.

Hãy lưu ý cách HiveQL chọn tất cả bản ghi và hiển thị trên bảng điều khiển.
6. Tự động cấp tài nguyên bổ sung
Tự động cấp tài nguyên bổ sung là nhiệm vụ ước tính số lượng nút trình thực thi cụm "phù hợp" cho một khối lượng công việc.
API AutoscalingPolicies của Dịch vụ được quản lý cho Apache Spark cung cấp một cơ chế để tự động hoá việc quản lý tài nguyên cụm và cho phép tự động cấp tài nguyên bổ sung cho VM trình thực thi cụm. Chính sách tự động cấp tài nguyên bổ sung là một cấu hình có thể dùng lại, mô tả cách các trình thực thi cụm sử dụng chính sách tự động cấp tài nguyên bổ sung sẽ mở rộng quy mô. Chính sách này xác định các ranh giới, tần suất và mức độ tích cực của việc mở rộng quy mô để kiểm soát chi tiết các tài nguyên cụm trong suốt thời gian hoạt động của cụm.
Các chính sách tự động cấp tài nguyên bổ sung của Dịch vụ được quản lý cho Apache Spark được viết bằng cách sử dụng các tệp YAML và các tệp YAML này được truyền trong lệnh CLI để tạo cụm hoặc được chọn từ một nhóm GCS khi một cụm được tạo từ Cloud Console.
Dưới đây là ví dụ về chính sách tự động cấp tài nguyên bổ sung của Dịch vụ được quản lý cho Apache Spark :
policy.yaml
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
maxInstances: 50
basicAlgorithm:
cooldownPeriod: 4m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
gracefulDecommissionTimeout: 1h
7. Định cấu hình các thành phần không bắt buộc của Dịch vụ được quản lý cho Apache Spark
Thao tác này sẽ khởi động một cụm Dịch vụ được quản lý cho Apache Spark.
Khi bạn tạo một cụm Dịch vụ được quản lý cho Apache Spark, các thành phần tiêu chuẩn của hệ sinh thái Apache Hadoop sẽ tự động được cài đặt trên cụm (xem Danh sách phiên bản Dịch vụ được quản lý cho Apache Spark). Bạn có thể cài đặt các thành phần bổ sung, được gọi là Thành phần không bắt buộc trên cụm khi tạo cụm.

Trong khi tạo cụm Dịch vụ được quản lý cho Apache Spark từ bảng điều khiển, chúng tôi đã bật các thành phần không bắt buộc và chọn Sổ tay Jupyter làm thành phần không bắt buộc.
8. Dọn dẹp tài nguyên
Để dọn dẹp cụm, hãy nhấp vào Dừng sau khi chọn cụm trong bảng điều khiển Dịch vụ được quản lý cho Apache Spark. Sau khi cụm dừng, hãy nhấp vào Xoá để xoá cụm.
Sau khi xoá cụm Dịch vụ được quản lý cho Apache Spark, hãy xoá các nhóm GCS nơi mã đã được sao chép.
Để dọn dẹp tài nguyên và ngừng mọi hoạt động tính phí không mong muốn, trước tiên, bạn cần dừng cụm Dịch vụ được quản lý cho Apache Spark rồi xoá cụm đó.
Trước khi dừng và xoá cụm, hãy đảm bảo rằng tất cả dữ liệu được ghi vào bộ nhớ HDFS đều được sao chép sang GCS để lưu trữ lâu dài.
Để dừng cụm, hãy nhấp vào Dừng.

Sau khi cụm dừng, hãy nhấp vào Xoá để xoá cụm.
Trên hộp thoại xác nhận, hãy nhấp vào Xoá để xoá cụm.
