Dataproc trên Google Compute Engine

1. Giới thiệu – Google Dataproc

Dataproc là một dịch vụ được quản lý hoàn toàn và có khả năng mở rộng cao để chạy Apache Spark, Apache Flink, Presto cũng như nhiều công cụ và khung nguồn mở khác. Sử dụng Dataproc để hiện đại hoá hồ dữ liệu, ETL / ELT và khoa học dữ liệu bảo mật trên quy mô hành tinh. Dataproc cũng được tích hợp đầy đủ với một số dịch vụ của Google Cloud, trong đó có BigQuery, Cloud Storage, Vertex AIDataplex.

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à phương thức tự động cấp tài nguyên bổ sung. Dataproc Serverless hỗ trợ các tải công việc theo lô và các phiên / sổ tay 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, bên cạnh các công cụ nguồn mở như Flink và Presto. Bạn có thể điều chỉnh các cụm trên đám mây với tỷ lệ tuỳ ý theo chiều dọc hoặc chiều ngang, bao gồm cả tính năng tự động cấp tài nguyên bổ sung.
  • 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 của bạn để 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 VPC của Google Cloud

Ở 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.

Bước đầu tiên, 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 Create Cluster (Tạo cụm).

Chọn Cluster trên Compute Engine để sử dụng máy ảo Google Compute Engine(GCE) làm cơ sở hạ tầng cơ bản để chạy các cụm Dataproc.

a961b2e8895e88da.jpeg

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

9583c91204a09c12.jpeg

Trên trang này:

  • Cung cấp tên duy nhất cho cụm.
  • Chọn khu vực cụ thể. Bạn cũng có thể chọn một Vùng, tuy nhiên, Dataproc cung cấp khả năng 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 chế độ cài đặt "Chuẩn" cụm. Điều này đảm bảo rằng chỉ 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 worker được tạo sẽ là hai.
  • Trong phần Tuỳ chỉnh cụm, hãy chọn hộp bên cạnh Bật cổng thành phần. Việ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, sổ tay Yarn Node Manager và sổ tay Jupyter.
  • Trong Thành phần không bắt buộc, chọn Sổ tay Jupyter. Thao tác này sẽ định cấu hình cụm đó với một máy chủ sổ tay Jupyter.
  • Giữ nguyên mọi thứ khác rồi nhấp vào Create Cluster (Tạo cụm).

Thao tác này sẽ xoay vòng một cụm Dataproc.

3. Khởi chạy cụm và SSH vào đó

Sau khi trạng thái của cụm chuyển thành Running (Đang chạy), hãy nhấp vào tên cụm trong bảng điều khiển Dataproc.

7332f1c2cb25807d.jpeg

Nhấp vào thẻ VM Instance (Phiên bản máy ảo) để xem nút chính và 2 nút worker của cụm.

25be1578e00f669f.jpeg

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

2810ffd97f315bdb.jpeg

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ủa cụm của bạn, rồi nhấp vào thẻ Giao tiếp với WEB.

6398f71d6293d6ff.jpeg

Cột này cho biết các giao diện web có sẵn, bao gồm cả Jupyter. Nhấp vào Jupyter để mở một 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 của mình trên Google Cloud Storage và mở một 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ông việc Spark

Khi cụm Dataproc được thiết lập và chạy, hãy tạo một công việc theo lô PySpark rồi 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. Hãy nhớ tạo bộ chứa trong cùng một khu vực với cụm Dataproc.

679fd2f76806f4e2.jpeg

Bây giờ, bộ chứa GCS đã được tạo, hãy sao chép tệp sau đây 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 sẽ tạo một Spark DataFrame mẫu và ghi nó 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 một công việc theo lô Spark trong Dataproc. Nhấp vào Việc làm trong trình đơn điều hướng bên trái, sau đó nhấp vào Gửi công việc

5767fc7c50b706d3.jpeg

Nhập Mã công việckhu 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 theo lô Spark trên Dataproc.

Trong mục 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 Dataproc chứ không phải trong nút worker. Nhấp vào Gửi để gửi công việc theo lô đến Dataproc.

a7ca90f5132faa31.jpeg

Tập lệnh Spark sẽ tạo một Dataframe và ghi vào bảng Hive test_table_1.

Sau khi lệnh in chạy thành công, bạn có thể xem các câu lệnh in trên bảng điều khiển trong thẻ Giám sát.

bdec2f3ae1055f9.jpeg

Bây giờ, 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 bằng các thuộc tính sau:

c16f02d1b3afaa27.jpeg

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, có 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ữ các tham số còn lại làm mặc định.

e242e50bc2519bf4.jpeg

Hãy lưu ý cách HiveQL chọn tất cả bản ghi và chế độ 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 worker cụm cho một khối lượng công việc.

Dataproc AutoscalingPolicies API cung cấp một cơ chế tự động hoá việc quản lý tài nguyên cụm đồng thời cho phép tự động cấp tài nguyên bổ sung cho máy ảo VM worker theo 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ể sử dụng lại, mô tả cách các worker 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ô. Thông tin này xác định việc mở rộng ranh giới, tần suất và mức độ linh hoạt để cung cấp khả năng kiểm soát chi tiết đối với 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 Dataproc được viết bằng các tệp YAML và các tệp YAML này được chuyể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ừ 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 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ẽ xoay vòng một cụm Dataproc.

Khi bạn tạo một cụm Dataproc, các thành phần hệ sinh thái Apache Hadoop tiêu chuẩn sẽ được tự động 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.

e39cc34245af3f01.jpeg

Trong khi tạo cụm Dataproc qua 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 Stop (Dừng) sau khi chọn cụm từ bảng điều khiển Dataproc. Sau khi cụm đó dừng hoạt động, hãy nhấp vào Xoá để xoá cụm đó.

Sau khi xoá cụm Dataproc, hãy xoá các bộ chứa GCS đã sao chép mã.

Để dọn dẹp tài nguyên và ngăn chặn mọi khoản thanh toán không mong muốn, trước tiên, bạn cần dừng cụm Dataproc rồi xoá các cụm này.

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ữ bền vững.

Để dừng cụm, hãy nhấp vào Dừng.

52065de928ab52e7.jpeg

Sau khi cụm đó dừng hoạt độ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 đó.

52065de928ab52e7.jpeg