1. Giới thiệu – Google Dataproc
Dataproc 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. Sử dụng Dataproc để hiện đại hoá hồ dữ liệu, ETL / ELT và bảo mật khoa học dữ liệu trên quy mô toàn cầu. Dataproc 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, Vertex AI và Dataplex.
Dataproc có 3 phiên bản:
- Dataproc Serverless 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 mở rộng quy mô. Dataproc không máy chủ hỗ trợ các phiên / sổ tay và khối lượng công việc hàng loạt PySpark.
- Dataproc trên Google Compute Engine cho phép bạn quản lý một cụm Hadoop YARN cho các tải 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 hoạt động trên nền tảng đám mây theo ý muốn, bao gồm cả tính năng tự động mở rộng quy mô theo chiều dọc hoặc chiều ngang.
- Dataproc trên Google Kubernetes Engine cho phép bạn định cấu hình các cụm ảo Dataproc trong cơ sở hạ tầng GKE để gửi các công việc Spark, PySpark, SparkR hoặc Spark SQL.
2. Tạo một Cụm Dataproc trên một VPC của Google Cloud
Trong bước này, bạn sẽ tạo một cụm Dataproc trên Google Cloud bằng bảng điều khiển Google Cloud.
Trước tiên, hãy bật API dịch vụ Dataproc trên bảng điều khiển. Sau khi bật, hãy tìm "Dataproc" 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 Google Compute Engine(GCE) làm cơ sở hạ tầng cơ bản để chạy các cụm Dataproc.

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 Vùng, tuy nhiên, Dataproc có thể tự động chọn một vùng 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 "Chuẩn". Điều này đảm bảo rằng có một nút chính.
- Trong thẻ Configure nodes (Định cấu hình các nút), hãy xác nhận rằng số lượng worker đượ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, Yarn Node Manager và sổ tay Jupyter.
- Trong Optional Components (Thành phần không bắt buộc), hãy chọn Jupyter Notebook. Thao tác này sẽ định cấu hình cụm bằng một máy chủ sổ tay Jupyter.
- Để mọi thứ khác như cũ rồi nhấp vào Tạo cụm.
Thao tác này sẽ tạo một cụm Dataproc.
3. Khởi chạy cụm và SSH vào cụm đó
Sau khi trạng thái của cụm thay đổi thành Đang chạy, hãy nhấp vào tên cụm trong bảng điều khiển Dataproc.

Nhấp vào thẻ VM Instance (Phiên bản VM) để xem nút chính và 2 nút worker 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 Dataproc, hãy nhấp vào tên cụm của bạn, rồi nhấp vào thẻ GIAO DIỆN WEB.

Thao tác này 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 công cụ này để tạo sổ tay trong PySpark được lưu trữ trên GCS, lưu trữ sổ tay trên Google Cloud Storage và mở sổ tay PySpark để dùng trong lớp học lập trình này.
5. Giám sát và theo dõi các công việc Spark
Khi cụm Dataproc đã 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 Dataproc.
Tạo một bộ chứa Google Cloud Storage (GCS) để lưu trữ tập lệnh PySpark. Đảm bảo bạn tạo bộ chứa ở cùng vùng với cụm Dataproc.

Sau khi tạo bộ chứa GCS, hãy sao chép tệp sau vào bộ chứa 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 Khung dữ liệu Spark mẫu và ghi dữ liệu đó dưới dạng một 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 một công việc hàng loạt Spark trong Dataproc. Nhấp vào Jobs (Công việc) trong trình đơn điều hướng bên trái, rồi nhấp vào Submit Job (Gửi công việc)

Cung cấp ID 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 một công việc hàng loạt Spark trên Dataproc.
Trong phần Properties (Thuộc tính), hãy thêm khoá spark.submit.deployMode và giá trị client để đảm bảo trình điều khiển chạy trong nút chính Dataproc chứ không phải trong các nút worker. Nhấp vào Gửi để gửi lô công việc đến Dataproc.

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

Giờ đây, khi bảng Hive đã được tạo, 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, tức 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.

Lưu ý cách HiveQL chọn tất cả cá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 mở rộng quy mô là nhiệm vụ ước tính số lượng "phù hợp" của các nút tính toán trong cụm cho một khối lượng công việc.
API AutoscalingPolicies của Dataproc 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 mở rộng quy mô VM của worker trong cụm. Chính sách Tự động mở rộng quy mô là một cấu hình có thể dùng lại, mô tả cách các worker của cụm sử dụng chính sách tự động mở rộng quy mô nên mở rộng quy mô. Nó xác định ranh giới, tần suất và mức độ tích cực của việc điều chỉnh quy mô để cung cấp khả năng kiểm soát chi tiết đối với các tài nguyên của cụm trong suốt vòng đời của cụm.
Các chính sách điều chỉnh quy mô tự động của Dataproc được viết bằng tệp YAML và các tệp YAML này được truyền vào lệnh CLI để tạo cụm hoặc được chọn từ một bộ chứa GCS khi một cụm được tạo từ bảng điều khiển Cloud.
Sau đây là ví dụ về chính sách điều chỉnh quy mô tự động của Dataproc :
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 Dataproc
Thao tác này sẽ tạo một cụm Dataproc.
Khi bạn tạo một cụm Dataproc, 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 Dataproc). Bạn có thể cài đặt các thành phần bổ sung (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 Dataproc từ bảng điều khiển, chúng ta đã bật các thành phần không bắt buộc và chọn Jupyter Notebook 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 Dataproc. Sau khi cụm dừng, hãy nhấp vào Xoá để xoá cụm.
Sau khi xoá cụm Dataproc, hãy xoá các vùng chứa GCS nơi mã được sao chép.
Để dọn dẹp các tài nguyên và ngừng mọi hoạt động thanh toán không mong muốn, trước tiên, bạn cần dừng rồi xoá cụm Dataproc.
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.
