Dataproc บน Google Compute Engine

1. ข้อมูลเบื้องต้น - Google Dataproc

Dataproc เป็นบริการที่มีการจัดการครบวงจรและรองรับการปรับขนาดได้สูงสำหรับการเรียกใช้ Apache Spark, Apache Flink, Presto รวมถึงเครื่องมือและเฟรมเวิร์กโอเพนซอร์สอื่นๆ อีกมากมาย ใช้ Dataproc สำหรับการปรับที่เก็บข้อมูลขนาดใหญ่ให้ทันสมัย, ETL / ELT และวิทยาศาสตร์ข้อมูลที่ปลอดภัยในสเกลระดับโลก นอกจากนี้ Dataproc ยังผสานรวมกับบริการ Google Cloud มากมายอย่างเต็มรูปแบบ ซึ่งรวมถึง BigQuery, Cloud Storage, Vertex AI และ Dataplex

Dataproc มี 3 รสชาติ ได้แก่

  • Dataproc Serverless ช่วยให้คุณเรียกใช้งาน PySpark ได้โดยไม่ต้องกำหนดค่าโครงสร้างพื้นฐานและการปรับขนาดอัตโนมัติ Dataproc Serverless รองรับภาระงานแบบกลุ่มและเซสชัน / สมุดบันทึกของ PySpark
  • Dataproc บน Google Compute Engine ช่วยให้คุณจัดการคลัสเตอร์ Hadoop YARN สำหรับภาระงาน Spark ที่ใช้ YARN นอกเหนือจากเครื่องมือโอเพนซอร์ส เช่น Flink และ Presto คุณปรับแต่งคลัสเตอร์ในระบบคลาวด์ด้วยการปรับขนาดแนวตั้งหรือแนวนอนได้มากเท่าที่ต้องการ รวมถึงการปรับขนาดอัตโนมัติ
  • Dataproc บน Google Kubernetes Engine ช่วยให้คุณกำหนดค่าคลัสเตอร์เสมือนของ Dataproc ในโครงสร้างพื้นฐาน GKE เพื่อส่งงาน Spark, PySpark, SparkR หรือ Spark SQL

2. สร้างคลัสเตอร์ Dataproc บน Google Cloud VPC

ในขั้นตอนนี้ คุณจะต้องสร้างคลัสเตอร์ Dataproc บน Google Cloud โดยใช้คอนโซล Google Cloud

ในขั้นแรก ให้เปิดใช้ Dataproc Service API บนคอนโซล เมื่อเปิดใช้แล้ว ให้ค้นหา "Dataproc" ในแถบค้นหา แล้วคลิกสร้างคลัสเตอร์

เลือกคลัสเตอร์บน Compute Engine เพื่อใช้ VM ของ Google Compute Engine(GCE) เป็นโครงสร้างพื้นฐานสำคัญเพื่อเรียกใช้คลัสเตอร์ Dataproc

a961b2e8895e88da.jpeg

ตอนนี้คุณอยู่ในหน้าการสร้างคลัสเตอร์แล้ว

9583c91204a09c12.jpeg

ในหน้านี้:

  • ระบุชื่อที่ไม่ซ้ำกันสำหรับคลัสเตอร์
  • เลือกภูมิภาคที่เฉพาะเจาะจง คุณอาจเลือกโซนก็ได้ แต่ Dataproc ก็มีความสามารถในการเลือกโซนให้คุณโดยอัตโนมัติ สำหรับ Codelab นี้ ให้เลือก "us-central1" และ "us-central1-c"
  • เลือกช่องทำเครื่องหมาย "มาตรฐาน" ประเภทคลัสเตอร์ ซึ่งช่วยให้มั่นใจว่ามีโหนดหลัก 1 โหนด
  • ในแท็บกำหนดค่าโหนด ให้ยืนยันว่าจำนวนผู้ปฏิบัติงานที่สร้างขึ้นจะเท่ากับ 2
  • ในส่วนปรับแต่งคลัสเตอร์ ให้เลือกช่องข้างเปิดใช้เกตเวย์คอมโพเนนต์ การดำเนินการนี้จะช่วยให้เข้าถึงอินเทอร์เฟซเว็บบนคลัสเตอร์ได้ ซึ่งรวมถึง Spark UI, Yarn Node Manager และสมุดบันทึก Jupyter
  • ในคอมโพเนนต์ที่ไม่บังคับ ให้เลือก Jupyter Notebook ซึ่งจะเป็นการกำหนดค่าคลัสเตอร์ด้วยเซิร์ฟเวอร์สมุดบันทึก Jupyter
  • ปล่อยทุกอย่างไว้ตามเดิม แล้วคลิกสร้างคลัสเตอร์

การดำเนินการนี้จะสร้างคลัสเตอร์ Dataproc

3. เปิดคลัสเตอร์และ SSH ลงในคลัสเตอร์

เมื่อสถานะคลัสเตอร์เปลี่ยนเป็นกำลังทำงาน ให้คลิกชื่อคลัสเตอร์จากคอนโซล Dataproc

7332f1c2cb25807d.jpeg

คลิกแท็บอินสแตนซ์ VM เพื่อดูโหนดหลักและโหนดผู้ปฏิบัติงาน 2 โหนดของคลัสเตอร์

25be1578e00f669f.jpeg

คลิกที่ SSH ข้างโหนดหลักเพื่อเข้าสู่ระบบโหนดหลัก

2810ffd97f315bdb.jpeg

เรียกใช้คำสั่ง hdfs เพื่อดูโครงสร้างไดเรกทอรี

hadoop_commands_example

sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51 
sudo hadoop fs -ls /

4. เว็บอินเทอร์เฟซและเกตเวย์คอมโพเนนต์

คลิกชื่อคลัสเตอร์จากคอนโซลคลัสเตอร์ Dataproc แล้วคลิกแท็บอินเทอร์เฟซบนเว็บ

6398f71d6293d6ff.jpeg

ซึ่งจะแสดงอินเทอร์เฟซเว็บที่พร้อมใช้งาน รวมถึง Jupyter คลิก Jupyter เพื่อเปิดสมุดบันทึก Jupyter คุณใช้ตัวเลือกนี้เพื่อสร้างสมุดบันทึกใน PySpark ที่จัดเก็บใน GCS ได้ เพื่อจัดเก็บสมุดบันทึกบน Google Cloud Storage และเปิดสมุดบันทึก PySpark เพื่อใช้ใน Codelab นี้

5. ตรวจสอบและติดตามงาน Spark

เมื่อคลัสเตอร์ Dataproc เริ่มทำงานแล้ว ให้สร้างงานกลุ่ม PySpark และส่งงานไปยังคลัสเตอร์ Dataproc

สร้างที่เก็บข้อมูล Google Cloud Storage (GCS) เพื่อจัดเก็บสคริปต์ PySpark โปรดสร้างที่เก็บข้อมูลในภูมิภาคเดียวกับคลัสเตอร์ Dataproc

679fd2f76806f4e2.jpeg

เมื่อสร้างที่เก็บข้อมูล GCS แล้ว ให้คัดลอกไฟล์ต่อไปนี้ลงในที่เก็บข้อมูลนี้

https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py

สคริปต์นี้สร้างตัวอย่าง Spark DataFrame และเขียนเป็นตาราง 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 .....")

ส่งสคริปต์นี้เป็นงานแบบกลุ่ม Spark ใน Dataproc คลิกงานในเมนูการนำทางด้านซ้าย แล้วคลิกส่งงาน

5767fc7c50b706d3.jpeg

ระบุรหัสงานและภูมิภาค เลือกคลัสเตอร์และระบุตำแหน่ง GCS ของสคริปต์ Spark ที่คุณคัดลอกไว้ งานนี้จะเรียกใช้เป็นงานแบบกลุ่ม Spark บน Dataproc

ในส่วนพร็อพเพอร์ตี้ ให้เพิ่มคีย์ spark.submit.deployMode และค่า client เพื่อให้มั่นใจว่าไดรเวอร์จะทำงานในโหนดหลักของ Dataproc ไม่ใช่ในโหนดของผู้ปฏิบัติงาน คลิกส่งเพื่อส่งงานแบบกลุ่มไปยัง Dataproc

a7ca90f5132faa31.jpeg

สคริปต์ Spark จะสร้าง Dataframe และเขียนไปยังตาราง Hive test_table_1

เมื่องานทำงานเสร็จสมบูรณ์แล้ว คุณสามารถดูคำสั่งการพิมพ์ของคอนโซลใต้แท็บการตรวจสอบ

bdec2f3ae1055f9.jpeg

ตอนนี้เมื่อสร้างตาราง Hive แล้ว ให้ส่งงานการค้นหาของ Hive อีกงานเพื่อเลือกเนื้อหาของตารางและจะแสดงในคอนโซล

สร้างงานอื่นด้วยพร็อพเพอร์ตี้ต่อไปนี้

c16f02d1b3afaa27.jpeg

โปรดสังเกตว่าประเภทงานได้รับการตั้งค่าเป็น Hive และประเภทของแหล่งที่มาของคำค้นหาคือข้อความค้นหา ซึ่งหมายความว่าเราจะเขียนคำสั่ง HiveQL ทั้งหมดภายในช่องข้อความข้อความค้นหา

ส่งงานโดยเก็บพารามิเตอร์ที่เหลือไว้เป็นค่าเริ่มต้น

e242e50bc2519bf4.jpeg

สังเกตวิธีที่ HiveQL เลือกระเบียนทั้งหมดและแสดงในคอนโซล

6. การปรับขนาดอัตโนมัติ

การปรับขนาดอัตโนมัติเป็นงานเกี่ยวกับการประมาณ "ที่เหมาะสม" จำนวนโหนดของผู้ปฏิบัติงานคลัสเตอร์สำหรับภาระงาน

Dataproc AutoscalingPolicies API มีกลไกสำหรับการทำให้การจัดการทรัพยากรคลัสเตอร์เป็นแบบอัตโนมัติและเปิดใช้การปรับขนาด VM ของผู้ปฏิบัติงานคลัสเตอร์อัตโนมัติ นโยบายการปรับขนาดอัตโนมัติเป็นการกำหนดค่าที่นำมาใช้ใหม่ได้ ซึ่งจะอธิบายว่าผู้ปฏิบัติงานของคลัสเตอร์ที่ใช้นโยบายการปรับขนาดอัตโนมัติควรปรับขนาดอย่างไร นโยบายดังกล่าวจะเป็นตัวกำหนดขอบเขตการปรับขนาด ความถี่ และความเข้มงวดเพื่อระบุการควบคุมทรัพยากรของคลัสเตอร์แบบละเอียดตลอดอายุการใช้งานของคลัสเตอร์

นโยบายการปรับขนาดอัตโนมัติของ Dataproc ถูกเขียนโดยใช้ไฟล์ YAML และส่งไฟล์ YAML เหล่านี้ด้วยคำสั่ง CLI สำหรับการสร้างคลัสเตอร์หรือเลือกจากที่เก็บข้อมูล GCS เมื่อมีการสร้างคลัสเตอร์จาก Cloud Console

ต่อไปนี้คือตัวอย่างของนโยบายการปรับขนาดอัตโนมัติสำหรับ Dataproc

policy.yaml

workerConfig:
  minInstances: 10
  maxInstances: 10
secondaryWorkerConfig:
  maxInstances: 50
basicAlgorithm:
  cooldownPeriod: 4m
  yarnConfig:
    scaleUpFactor: 0.05
    scaleDownFactor: 1.0
    gracefulDecommissionTimeout: 1h

7. กำหนดค่าคอมโพเนนต์ที่ไม่บังคับของ Dataproc

การดำเนินการนี้จะสร้างคลัสเตอร์ Dataproc

เมื่อสร้างคลัสเตอร์ Dataproc ระบบจะติดตั้งคอมโพเนนต์ระบบนิเวศ Apache Hadoop มาตรฐานบนคลัสเตอร์โดยอัตโนมัติ (ดูรายการเวอร์ชันของ Dataproc) คุณติดตั้งคอมโพเนนต์เพิ่มเติมที่เรียกว่าคอมโพเนนต์ที่ไม่บังคับบนคลัสเตอร์ได้เมื่อสร้างคลัสเตอร์

e39cc34245af3f01.jpeg

ขณะสร้างคลัสเตอร์ Dataproc จากคอนโซล เราได้เปิดใช้คอมโพเนนต์ที่ไม่บังคับและเลือก Jupyter Notebook เป็นคอมโพเนนต์ที่ไม่บังคับ

8. ล้างทรัพยากร

หากต้องการล้างคลัสเตอร์ ให้คลิกหยุดหลังจากเลือกคลัสเตอร์จากคอนโซล Dataproc เมื่อคลัสเตอร์หยุดแล้ว ให้คลิกลบเพื่อลบคลัสเตอร์

หลังจากลบคลัสเตอร์ Dataproc แล้ว ให้ลบที่เก็บข้อมูล GCS ที่มีการคัดลอกโค้ด

หากต้องการล้างทรัพยากรและหยุดการเรียกเก็บเงินที่ไม่ต้องการ ให้หยุดคลัสเตอร์ Dataproc ก่อนแล้วจึงลบ

ก่อนหยุดและลบคลัสเตอร์ โปรดตรวจสอบว่าได้คัดลอกข้อมูลทั้งหมดที่เขียนลงในพื้นที่เก็บข้อมูล HDFS ไปยัง GCS เพื่อพื้นที่เก็บข้อมูลที่คงทน

หากต้องการหยุดคลัสเตอร์ ให้คลิกหยุด

52065de928ab52e7.jpeg

เมื่อคลัสเตอร์หยุดแล้ว ให้คลิกลบเพื่อลบคลัสเตอร์

ในกล่องโต้ตอบการยืนยัน ให้คลิกลบเพื่อลบคลัสเตอร์

52065de928ab52e7.jpeg