۱. مقدمه - سرویس مدیریتشده برای آپاچی اسپارک
سرویس مدیریتشده برای آپاچی اسپارک، یک سرویس کاملاً مدیریتشده و بسیار مقیاسپذیر برای اجرای آپاچی اسپارک، آپاچی فلینک، پرستو و بسیاری دیگر از ابزارها و چارچوبهای متنباز است. از سرویس مدیریتشده برای آپاچی اسپارک برای مدرنسازی دریاچه داده، ETL/ELT و علم داده امن در مقیاس جهانی استفاده کنید. سرویس مدیریتشده برای آپاچی اسپارک همچنین به طور کامل با چندین سرویس گوگل کلود از جمله BigQuery ، Cloud Storage ، Gemini Enterprise Agent Engine و Knowledge Catalog یکپارچه شده است.
سرویس مدیریتشده برای آپاچی اسپارک در دو حالت استقرار موجود است:
- آپاچی اسپارک مدیریتشده بدون سرور به شما امکان میدهد کارهای PySpark را بدون نیاز به پیکربندی زیرساخت و مقیاسپذیری خودکار اجرا کنید. آپاچی اسپارک مدیریتشده از بارهای کاری دستهای PySpark و جلسات/نوتبوکها پشتیبانی میکند.
- خوشههای مدیریتشدهی آپاچی اسپارک به شما این امکان را میدهند که علاوه بر ابزارهای متنباز مانند فلینک و پرستو، یک خوشهی هادوپ YARN را برای بارهای کاری اسپارک مبتنی بر YARN مدیریت کنید. میتوانید خوشههای مبتنی بر ابر خود را با هر میزان مقیاسپذیری عمودی یا افقی که میخواهید، از جمله مقیاسپذیری خودکار، سفارشی کنید.
۲. یک خوشه مدیریتشده آپاچی اسپارک روی یک سرور مجازی گوگل کلود ایجاد کنید
در این مرحله، با استفاده از کنسول Google Cloud، یک خوشه Managed Apache Spark روی Google Cloud ایجاد خواهید کرد.
به عنوان اولین قدم، API سرویس Managed Apache Spark را در کنسول فعال کنید. پس از فعال شدن، عبارت "Managed Apache Spark" را در نوار جستجو جستجو کرده و روی ایجاد خوشه (Cluster) کلیک کنید.
برای استفاده از ماشینهای مجازی Google Compute Engine (GCE) به عنوان زیرساخت اصلی برای اجرای خوشههای مدیریتشده Apache Spark، گزینه Cluster را در Compute Engine انتخاب کنید.

اکنون در صفحه ایجاد خوشه هستید.

در این صفحه:
- یک نام منحصر به فرد برای خوشه ارائه دهید.
- منطقه خاص را انتخاب کنید. شما همچنین میتوانید یک منطقه (Zone) را انتخاب کنید، با این حال، Managed Apache Spark این امکان را فراهم میکند که به طور خودکار یکی را برای شما انتخاب کند. برای این codelab، "us-central1" و "us-central1-c" را انتخاب کنید.
- نوع خوشه "استاندارد" را انتخاب کنید. این تضمین میکند که یک گره اصلی وجود دارد.
- در برگه پیکربندی گرهها ، تأیید کنید که تعداد کارگران ایجاد شده دو نفر خواهد بود.
- در بخش سفارشیسازی خوشه ، کادر کنار «فعال کردن دروازه کامپوننت» را علامت بزنید. این کار دسترسی به رابطهای وب روی خوشه، از جمله Spark UI، Yarn Node Manager و Jupyter notebooks را فعال میکند.
- در قسمت Optional Components ، گزینه Jupyter Notebook را انتخاب کنید. این گزینه، کلاستر را با یک سرور Jupyter notebook پیکربندی میکند.
- بقیه موارد را همانطور که هست بگذارید و روی ایجاد خوشه کلیک کنید.
این کار باعث راهاندازی یک کلاستر Managed Apache Spark میشود.
۳. کلاستر را اجرا کنید و SSH را به آن وارد کنید
پس از تغییر وضعیت خوشه به Running ، روی نام خوشه از کنسول Managed Apache Spark کلیک کنید.

برای مشاهده گره اصلی و دو گره کارگر کلاستر، روی تب VM Instance کلیک کنید.

برای ورود به گره اصلی، روی SSH کنار گره اصلی کلیک کنید.

برای مشاهده ساختار دایرکتوری، دستورات hdfs را اجرا کنید.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
۴. رابطهای وب و درگاههای کامپوننت
از کنسول خوشه مدیریتشده آپاچی اسپارک، روی نام خوشه خود کلیک کنید، سپس روی تب WEB INTERFACES کلیک کنید.

این رابطهای وب موجود، از جمله Jupyter را نشان میدهد. برای باز کردن یک دفترچه یادداشت Jupyter، روی Jupyter کلیک کنید. میتوانید از این برای ایجاد دفترچه یادداشت در PySpark ذخیره شده در GCS استفاده کنید. دفترچه یادداشت خود را در Google Cloud Storage ذخیره کنید و یک دفترچه یادداشت PySpark را برای استفاده در این codelab باز کنید.
۵. نظارت و مشاهدهی کارهای اسپارک
با فعال و در حال اجرا بودن خوشه مدیریتشده آپاچی اسپارک، یک کار دستهای PySpark ایجاد کنید و کار را به خوشه مدیریتشده آپاچی اسپارک ارسال کنید.
یک سطل ذخیرهسازی ابری گوگل (GCS) برای ذخیره اسکریپت PySpark ایجاد کنید . مطمئن شوید که سطل را در همان ناحیهای که خوشه مدیریتشده آپاچی اسپارک قرار دارد، ایجاد میکنید.

حالا که GCS bucket ایجاد شده است، فایل زیر را در این 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 در Managed Apache Spark ارسال کنید. در منوی ناوبری سمت چپ روی Jobs کلیک کنید و سپس روی Submit Job کلیک کنید.

شناسه و منطقهی کاری (Job ID ) را وارد کنید. کلاستر خود را انتخاب کنید و محل GCS اسکریپت Spark که کپی کردهاید را وارد کنید. این کار به عنوان یک کار دستهای Spark روی Managed Apache Spark اجرا خواهد شد.
در قسمت Properties، کلید spark.submit.deployMode و مقدار client اضافه کنید تا مطمئن شوید که درایور در گره اصلی Managed Apache Spark اجرا میشود و نه در گرههای worker. برای ارسال کار دستهای به Managed Apache Spark، روی Submit کلیک کنید.

اسکریپت Spark یک Dataframe ایجاد میکند و در جدول Hive test_table_1 مینویسد.
پس از اجرای موفقیتآمیز کار، میتوانید دستورات چاپ کنسول را در زیر برگه نظارت (Monitoring) مشاهده کنید.

اکنون که جدول Hive ایجاد شده است، یک کار پرس و جوی Hive دیگر ارسال کنید تا محتوای جدول انتخاب شده و در کنسول نمایش داده شود.
یک job دیگر با مشخصات زیر ایجاد کنید:

توجه داشته باشید که نوع کار (Job Type) روی Hive و نوع منبع پرسوجو (query source type) روی Query Text تنظیم شده است، به این معنی که ما کل عبارت HiveQL را در کادر متنی Query Text خواهیم نوشت.
کار را ارسال کنید و بقیه پارامترها را به صورت پیشفرض نگه دارید.

توجه کنید که HiveQL چگونه تمام رکوردها را انتخاب کرده و در کنسول نمایش میدهد.
۶. مقیاسبندی خودکار
مقیاسبندی خودکار، وظیفه تخمین تعداد «مناسب» گرههای کارگر خوشه برای یک بار کاری است.
API مربوط به Managed Apache Spark AutoscalingPolicies مکانیزمی برای خودکارسازی مدیریت منابع کلاستر ارائه میدهد و امکان خودکارسازی ماشین مجازی کارگر کلاستر را فراهم میکند. یک سیاست خودکارسازی، پیکربندی قابل استفاده مجددی است که نحوه مقیاسپذیری کارگران کلاستر با استفاده از سیاست خودکارسازی را توصیف میکند. این سیاست، مرزهای مقیاسپذیری، فراوانی و میزان تهاجمی بودن را تعریف میکند تا کنترل دقیقی بر منابع کلاستر در طول عمر کلاستر فراهم کند.
سیاستهای مقیاسپذیری خودکار مدیریتشدهی آپاچی اسپارک با استفاده از فایلهای YAML نوشته میشوند و این فایلهای YAML یا در دستور CLI برای ایجاد خوشه ارسال میشوند یا هنگام ایجاد یک خوشه از کنسول ابری، از یک سطل GCS انتخاب میشوند.
در اینجا مثالی از سیاست مقیاسپذیری خودکار مدیریتشدهی آپاچی اسپارک آورده شده است:
policy.yaml
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
maxInstances: 50
basicAlgorithm:
cooldownPeriod: 4m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
gracefulDecommissionTimeout: 1h
۷. پیکربندی اجزای اختیاری مدیریتشدهی آپاچی اسپارک
این کار باعث راهاندازی یک کلاستر Managed Apache Spark میشود.
وقتی یک کلاستر مدیریتشدهی آپاچی اسپارک ایجاد میکنید، اجزای استاندارد اکوسیستم آپاچی هادوپ بهطور خودکار روی کلاستر نصب میشوند ( به فهرست نسخههای مدیریتشدهی آپاچی اسپارک مراجعه کنید). میتوانید هنگام ایجاد کلاستر، اجزای اضافی، به نام اجزای اختیاری ، را روی کلاستر نصب کنید.

هنگام ایجاد خوشه مدیریتشده آپاچی اسپارک از کنسول، اجزای اختیاری را فعال کرده و Jupyter Notebook را به عنوان جزء اختیاری انتخاب کردهایم.
۸. منابع را پاکسازی کنید
برای پاکسازی کلاستر، پس از انتخاب کلاستر از کنسول Managed Apache Spark، روی Stop کلیک کنید. پس از توقف کلاستر، برای حذف کلاستر، روی Delete کلیک کنید.
پس از حذف خوشه Managed Apache Spark، سطلهای GCS که کد در آنها کپی شده است را نیز حذف کنید.
برای پاکسازی منابع و متوقف کردن هرگونه هزینه اضافی، خوشه Managed Apache Spark ابتدا باید متوقف و سپس حذف شود.
قبل از متوقف کردن و حذف خوشه، اطمینان حاصل کنید که تمام دادههای نوشته شده در ذخیرهسازی HDFS برای ذخیرهسازی پایدار به GCS کپی میشوند.
برای متوقف کردن خوشه، روی «توقف» کلیک کنید.

پس از توقف خوشه، برای حذف خوشه، روی حذف کلیک کنید.
در پنجره تأیید، روی حذف کلیک کنید تا خوشه حذف شود.
