Dataproc บน Google Compute Engine

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

Dataproc เป็นบริการที่มีการจัดการครบวงจรและรองรับการปรับขนาดได้สูงสำหรับการเรียกใช้ Apache Spark, Apache Flink, Presto รวมถึงเครื่องมือและเฟรมเวิร์กโอเพนซอร์สอื่นๆ อีกมากมาย ใช้ Dataproc เพื่อปรับที่เก็บข้อมูลขนาดใหญ่ให้ทันสมัย, ETL / ELT และ Data Science ที่ปลอดภัยในระดับโลก นอกจากนี้ 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 ใน VPC ของ Google Cloud

ในขั้นตอนนี้ คุณจะสร้างคลัสเตอร์ 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 โหนด
  • ในแท็บกำหนดค่าโหนด ให้ยืนยันว่าจำนวน Worker ที่สร้างจะเป็น 2
  • ในส่วนปรับแต่งคลัสเตอร์ ให้เลือกช่องข้างเปิดใช้ Component Gateway ซึ่งจะช่วยให้เข้าถึงอินเทอร์เฟซเว็บในคลัสเตอร์ได้ รวมถึง Spark UI, Yarn Node Manager และโน้ตบุ๊ก Jupyter
  • ในคอมโพเนนต์ที่ไม่บังคับ ให้เลือก Jupyter Notebook ซึ่งจะกำหนดค่าคลัสเตอร์ด้วยเซิร์ฟเวอร์สมุดบันทึก Jupyter
  • ปล่อยให้ส่วนอื่นๆ เป็นไปตามเดิม แล้วคลิกสร้างคลัสเตอร์

ซึ่งจะเป็นการหมุนคลัสเตอร์ Dataproc

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

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

7332f1c2cb25807d.jpeg

คลิกแท็บ VM Instance เพื่อดูโหนดหลักและโหนดของผู้ปฏิบัติงาน 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 ให้คลิกชื่อคลัสเตอร์ แล้วคลิกแท็บ WEB INTERFACES

6398f71d6293d6ff.jpeg

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

5. ตรวจสอบและสังเกตงาน Spark

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

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

679fd2f76806f4e2.jpeg

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

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 ไม่ใช่ในโหนด Worker คลิกส่งเพื่อส่งงานแบบกลุ่มไปยัง Dataproc

a7ca90f5132faa31.jpeg

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

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

bdec2f3ae1055f9.jpeg

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

สร้างงานอื่นที่มีพร็อพเพอร์ตี้ต่อไปนี้

c16f02d1b3afaa27.jpeg

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

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

e242e50bc2519bf4.jpeg

สังเกตว่า HiveQL เลือกเรคคอร์ดทั้งหมดและแสดงในคอนโซลอย่างไร

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

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

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

นโยบายการปรับขนาดอัตโนมัติของ Dataproc เขียนขึ้นโดยใช้ไฟล์ YAML และไฟล์ YAML เหล่านี้จะส่งในคำสั่ง CLI สำหรับการสร้างคลัสเตอร์ หรือเลือกจาก Bucket ของ 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