১. সংক্ষিপ্ত বিবরণ - গুগল ডেটাপ্রক
ডেটাপ্রক হলো অ্যাপাচি স্পার্ক, অ্যাপাচি ফ্লিংক, প্রেস্টো এবং আরও অনেক ওপেন সোর্স টুল ও ফ্রেমওয়ার্ক চালানোর জন্য একটি সম্পূর্ণভাবে পরিচালিত এবং অত্যন্ত স্কেলেবল পরিষেবা। বিশ্বব্যাপী ডেটা লেক আধুনিকীকরণ, ETL / ELT এবং নিরাপদ ডেটা সায়েন্সের জন্য ডেটাপ্রক ব্যবহার করুন। ডেটাপ্রক বিগকোয়েরি , ক্লাউড স্টোরেজ , ভার্টেক্স এআই এবং ডেটাপ্লেক্স সহ বেশ কয়েকটি গুগল ক্লাউড পরিষেবার সাথেও সম্পূর্ণরূপে সমন্বিত।
ডেটাপ্রক তিনটি সংস্করণে পাওয়া যায়:
- ডেটাপ্রোক সার্ভারলেস আপনাকে ইনফ্রাস্ট্রাকচার ও অটোস্কেলিং কনফিগার করার প্রয়োজন ছাড়াই পাইস্পার্ক জব চালানোর সুযোগ দেয়। ডেটাপ্রোক সার্ভারলেস পাইস্পার্ক ব্যাচ ওয়ার্কলোড এবং সেশন / নোটবুক সমর্থন করে।
- গুগল কম্পিউট ইঞ্জিনে থাকা ডেটাপ্রক আপনাকে ফ্লিন্ক এবং প্রেস্টোর মতো ওপেন সোর্স টুলের পাশাপাশি YARN-ভিত্তিক স্পার্ক ওয়ার্কলোডের জন্য একটি হ্যাডুপ YARN ক্লাস্টার পরিচালনা করার সুযোগ দেয়। আপনি অটোস্কেলিং সহ, আপনার পছন্দ অনুযায়ী ভার্টিকাল বা হরাইজন্টাল স্কেলিংয়ের মাধ্যমে আপনার ক্লাউড-ভিত্তিক ক্লাস্টারগুলোকে সাজিয়ে নিতে পারেন।
- গুগল কুবারনেটিস ইঞ্জিনে ডেটাপ্রক আপনাকে স্পার্ক, পাইস্পার্ক, স্পার্কআর বা স্পার্ক এসকিউএল জব জমা দেওয়ার জন্য আপনার জিকেই পরিকাঠামোতে ডেটাপ্রক ভার্চুয়াল ক্লাস্টার কনফিগার করার সুযোগ দেয়।
এই কোডল্যাবে, আপনি ডেটাপ্রক সার্ভারলেস ব্যবহারের বিভিন্ন উপায় শিখবেন।
অ্যাপাচি স্পার্ক মূলত হ্যাডুপ ক্লাস্টারে চালানোর জন্য তৈরি করা হয়েছিল এবং এটি তার রিসোর্স ম্যানেজার হিসেবে YARN ব্যবহার করত। হ্যাডুপ ক্লাস্টার রক্ষণাবেক্ষণের জন্য একটি নির্দিষ্ট ধরনের দক্ষতার প্রয়োজন হয় এবং ক্লাস্টারের বিভিন্ন সেটিংস সঠিকভাবে কনফিগার করা নিশ্চিত করতে হয়। এর পাশাপাশি, স্পার্কের জন্যও আলাদা কিছু সেটিংস রয়েছে যা ব্যবহারকারীকে সেট করতে হয়। এর ফলে এমন অনেক পরিস্থিতি তৈরি হয় যেখানে ডেভেলপাররা স্পার্ক কোডের উপর কাজ করার পরিবর্তে তাদের পরিকাঠামো কনফিগার করতেই বেশি সময় ব্যয় করেন।
ডেটাপ্রোক সার্ভারলেস হ্যাডুপ ক্লাস্টার বা স্পার্ক ম্যানুয়ালি কনফিগার করার প্রয়োজনীয়তা দূর করে। ডেটাপ্রোক সার্ভারলেস হ্যাডুপে চলে না এবং অটোস্কেলিং সহ এর রিসোর্সের প্রয়োজনীয়তা নির্ধারণ করতে নিজস্ব ডাইনামিক রিসোর্স অ্যালোকেশন ব্যবহার করে। ডেটাপ্রোক সার্ভারলেসের মাধ্যমে স্পার্ক প্রপার্টিজের একটি ছোট অংশ এখনও কাস্টমাইজ করা যায়, তবে বেশিরভাগ ক্ষেত্রেই আপনার এগুলি পরিবর্তন করার প্রয়োজন হবে না।
২. স্থাপন করুন
আপনি এই কোডল্যাবে ব্যবহৃত আপনার পরিবেশ এবং রিসোর্সগুলো কনফিগার করার মাধ্যমে শুরু করবেন।
একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন । আপনি চাইলে বিদ্যমান কোনো প্রজেক্টও ব্যবহার করতে পারেন।
ক্লাউড কনসোল টুলবারে থাকা ক্লাউড শেল-এ ক্লিক করে এটি খুলুন।

ক্লাউড শেল একটি প্রস্তুত শেল পরিবেশ প্রদান করে যা আপনি এই কোডল্যাবের জন্য ব্যবহার করতে পারেন।

ক্লাউড শেল ডিফল্টরূপে আপনার প্রোজেক্টের নাম সেট করে দেবে। echo $GOOGLE_CLOUD_PROJECT চালিয়ে বিষয়টি পুনরায় যাচাই করে নিন। যদি আউটপুটে আপনার প্রোজেক্ট আইডি দেখতে না পান, তবে সেটি সেট করুন।
export GOOGLE_CLOUD_PROJECT=<your-project-id>
আপনার রিসোর্সগুলির জন্য একটি Compute Engine অঞ্চল সেট করুন, যেমন us-central1 বা europe-west2 ।
export REGION=<your-region>
এপিআই সক্ষম করুন
কোডল্যাবটি নিম্নলিখিত এপিআইগুলো ব্যবহার করে:
- বিগকোয়েরি
- ডেটাপ্রক
প্রয়োজনীয় API-গুলো সক্রিয় করুন। এতে প্রায় এক মিনিট সময় লাগবে এবং সম্পন্ন হলে একটি সফলতার বার্তা প্রদর্শিত হবে।
gcloud services enable bigquery.googleapis.com gcloud services enable dataproc.googleapis.com
নেটওয়ার্ক অ্যাক্সেস কনফিগার করুন
Dataproc Serverless-এর জন্য আপনার Spark জবগুলো যে অঞ্চলে চালাবেন, সেখানে Google Private Access সক্রিয় থাকা আবশ্যক, কারণ Spark ড্রাইভার এবং এক্সিকিউটরগুলোর শুধুমাত্র প্রাইভেট আইপি থাকে। default সাবনেটে এটি সক্রিয় করতে নিম্নলিখিত কমান্ডটি চালান।
gcloud compute networks subnets update default \
--region=${REGION} \
--enable-private-ip-google-access
নিম্নলিখিত কমান্ডের মাধ্যমে আপনি গুগল প্রাইভেট অ্যাক্সেস চালু আছে কিনা তা যাচাই করতে পারেন, যার আউটপুট হবে True বা False ।
gcloud compute networks subnets describe default \
--region=${REGION} \
--format="get(privateIpGoogleAccess)"
একটি স্টোরেজ বাকেট তৈরি করুন
এই কোডল্যাবে তৈরি করা অ্যাসেটগুলো সংরক্ষণের জন্য একটি স্টোরেজ বাকেট তৈরি করুন।
আপনার বাকেটের জন্য একটি নাম নির্বাচন করুন। বাকেটের নাম অবশ্যই সকল ব্যবহারকারীর জন্য বিশ্বব্যাপী অনন্য হতে হবে।
export BUCKET=<your-bucket-name>
যে অঞ্চলে আপনি আপনার স্পার্ক জবগুলো চালাতে চান, সেই অঞ্চলে বাকেটটি তৈরি করুন।
gsutil mb -l ${REGION} gs://${BUCKET}
আপনি ক্লাউড স্টোরেজ কনসোলে দেখতে পাবেন যে আপনার বাকেটটি উপলব্ধ আছে। এছাড়াও, আপনার বাকেটটি দেখতে আপনি gsutil ls চালাতে পারেন।
একটি স্থায়ী ইতিহাস সার্ভার তৈরি করুন
স্পার্ক UI, স্পার্ক জব সম্পর্কিত বিভিন্ন ডিবাগিং টুল এবং তথ্য প্রদান করে। সম্পন্ন হওয়া ডেটাপ্রক সার্ভারলেস জবগুলোর স্পার্ক UI দেখার জন্য, আপনাকে একটি পারসিস্টেন্ট হিস্ট্রি সার্ভার হিসেবে ব্যবহারের জন্য একটি সিঙ্গেল নোড ডেটাপ্রক ক্লাস্টার তৈরি করতে হবে।
আপনার স্থায়ী ইতিহাস সার্ভারের জন্য একটি নাম নির্ধারণ করুন।
PHS_CLUSTER_NAME=my-phs
নিম্নলিখিতটি চালান।
gcloud dataproc clusters create ${PHS_CLUSTER_NAME} \
--region=${REGION} \
--single-node \
--enable-component-gateway \
--properties=spark:spark.history.fs.logDirectory=gs://${BUCKET}/phs/*/spark-job-history
কোডল্যাবের পরবর্তী অংশে স্পার্ক ইউআই এবং পারসিস্টেন্ট হিস্ট্রি সার্ভার নিয়ে আরও বিস্তারিতভাবে আলোচনা করা হবে।
৩. ডেটাপ্রোক ব্যাচ ব্যবহার করে সার্ভারলেস স্পার্ক জব চালান
এই স্যাম্পলে, আপনি নিউ ইয়র্ক সিটি (NYC) সিটি বাইক ট্রিপস পাবলিক ডেটাসেট থেকে এক সেট ডেটা নিয়ে কাজ করবেন। NYC সিটি বাইকস হলো NYC-এর মধ্যে একটি পেইড বাইক শেয়ারিং সিস্টেম। আপনি কিছু সাধারণ ট্রান্সফরমেশন করবেন এবং সবচেয়ে জনপ্রিয় দশটি সিটি বাইক স্টেশন আইডি প্রিন্ট করবেন। এই স্যাম্পলটি Spark এবং BigQuery-এর মধ্যে নির্বিঘ্নে ডেটা রিড এবং রাইট করার জন্য ওপেন সোর্স spark-bigquery-connector ব্যবহার করে।
নিম্নলিখিত গিটহাব রিপোটি ক্লোন করুন এবং citibike.py ফাইলটি থাকা ডিরেক্টরিতে cd ।
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git cd devrel-demos/data-analytics/next-2022-workshop/dataproc-serverless
citibike.py
import sys
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
from pyspark.sql.types import BooleanType
if len(sys.argv) == 1:
print("Please provide a GCS bucket name.")
bucket = sys.argv[1]
table = "bigquery-public-data:new_york_citibike.citibike_trips"
spark = SparkSession.builder \
.appName("pyspark-example") \
.config("spark.jars","gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.26.0.jar") \
.getOrCreate()
df = spark.read.format("bigquery").load(table)
top_ten = df.filter(col("start_station_id") \
.isNotNull()) \
.groupBy("start_station_id") \
.count() \
.orderBy("count", ascending=False) \
.limit(10) \
.cache()
top_ten.show()
top_ten.write.option("header", True).csv(f"gs://{bucket}/citibikes_top_ten_start_station_ids")
ক্লাউড এসডিকে ব্যবহার করে সার্ভারলেস স্পার্ক-এ জবটি সাবমিট করুন, যা ক্লাউড শেল-এ ডিফল্টভাবে উপলব্ধ। আপনার শেল-এ নিম্নলিখিত কমান্ডটি চালান, যা ক্লাউড এসডিকে এবং ডেটাপ্রোক ব্যাচেস এপিআই ব্যবহার করে সার্ভারলেস স্পার্ক জব সাবমিট করে।
gcloud dataproc batches submit pyspark citibike.py \
--batch=citibike-job \
--region=${REGION} \
--deps-bucket=gs://${BUCKET} \
--jars=gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.26.0.jar \
--history-server-cluster=projects/${GOOGLE_CLOUD_PROJECT}/regions/${REGION}/clusters/${PHS_CLUSTER_NAME} \
-- ${BUCKET}
বিষয়টি বিশদভাবে বলতে গেলে:
-
gcloud dataproc batches submitকমান্ডটি Dataproc Batches API-কে নির্দেশ করে। -
pysparkবোঝায় যে আপনি একটি PySpark জব জমা দিচ্ছেন। -
--batchহলো জবটির নাম। এটি প্রদান করা না হলে, দৈবচয়নের মাধ্যমে একটি UUID তৈরি করা হবে। -
--region=${REGION}হলো সেই ভৌগোলিক অঞ্চল যেখানে কাজটি প্রক্রিয়া করা হবে। - সার্ভারলেস পরিবেশে চালানোর আগে আপনার লোকাল পাইথন ফাইলটি
--deps-bucket=${BUCKET}লোকেশনে আপলোড করা হয়। -
--jars=gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.26.0.jarস্পার্ক রানটাইম এনভায়রনমেন্টে spark-bigquery-connector-এর জন্য jar ফাইলটি অন্তর্ভুক্ত করে। -
--history-server-cluster=projects/${GOOGLE_CLOUD_PROJECT}/regions/${REGION}/clusters/${PHS_CLUSTER}হলো পারসিস্টেন্ট হিস্ট্রি সার্ভারের সম্পূর্ণ নাম। এখানেই স্পার্ক ইভেন্টের ডেটা (কনসোল আউটপুট থেকে আলাদা) সংরক্ষিত থাকে এবং স্পার্ক UI থেকে দেখা যায়। - শেষের
--চিহ্নটি বোঝায় যে এর পরের সবকিছুই প্রোগ্রামের জন্য রানটাইম আর্গুমেন্ট হবে। এক্ষেত্রে, আপনি আপনার বাকেটের নাম জমা দিচ্ছেন, যা জবটির জন্য আবশ্যক।
ব্যাচটি জমা দেওয়া হলে আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন।
Batch [citibike-job] submitted.
কয়েক মিনিট পর আপনি জবটির মেটাডেটা সহ নিম্নলিখিত আউটপুট দেখতে পাবেন।
+----------------+------+ |start_station_id| count| +----------------+------+ | 519|551078| | 497|423334| | 435|403795| | 426|384116| | 293|372255| | 402|367194| | 285|344546| | 490|330378| | 151|318700| | 477|311403| +----------------+------+ Batch [citibike-job] finished.
পরবর্তী অংশে, আপনি শিখবেন কীভাবে এই কাজের লগগুলি খুঁজে বের করতে হয়।
অতিরিক্ত বৈশিষ্ট্য
Spark Serverless-এর মাধ্যমে আপনার জবগুলো চালানোর জন্য অতিরিক্ত বিকল্প রয়েছে।
- আপনি একটি কাস্টম ডকার ইমেজ তৈরি করতে পারেন, যার উপর আপনার কাজটি চলবে। পাইথন এবং আর লাইব্রেরির মতো অতিরিক্ত ডিপেন্ডেন্সি অন্তর্ভুক্ত করার জন্য এটি একটি চমৎকার উপায়।
- Hive মেটাডেটা অ্যাক্সেস করার জন্য আপনি আপনার জবের সাথে একটি Dataproc Metastore ইনস্ট্যান্স সংযুক্ত করতে পারেন।
- অতিরিক্ত নিয়ন্ত্রণের জন্য, ডেটাপ্রক সার্ভারলেস অল্প কিছু স্পার্ক প্রপার্টি কনফিগার করার সুবিধা দেয়।
৪. ডেটাপ্রোক মেট্রিক্স এবং পর্যবেক্ষণযোগ্যতা
ডেটাপ্রোক ব্যাচেস কনসোল আপনার সমস্ত ডেটাপ্রোক সার্ভারলেস জব তালিকাভুক্ত করে। কনসোলে, আপনি প্রতিটি জবের ব্যাচ আইডি, অবস্থান, স্ট্যাটাস , তৈরির সময়, অতিবাহিত সময় এবং টাইপ দেখতে পাবেন। আপনার জব সম্পর্কে আরও তথ্য দেখতে এর ব্যাচ আইডিতে ক্লিক করুন।
এই পৃষ্ঠায় আপনি মনিটরিং- এর মতো তথ্য দেখতে পাবেন, যা দেখায় সময়ের সাথে সাথে আপনার জবটি কতগুলো ব্যাচ স্পার্ক এক্সিকিউটর ব্যবহার করেছে (যা থেকে বোঝা যায় এটি কতটা অটোস্কেল করেছে)।
'Details' ট্যাবে আপনি জবটি সম্পর্কে আরও মেটাডেটা দেখতে পাবেন, যার মধ্যে জবটির সাথে জমা দেওয়া আর্গুমেন্ট এবং প্যারামিটারগুলোও অন্তর্ভুক্ত থাকবে।
আপনি এই পৃষ্ঠা থেকে সমস্ত লগও দেখতে পারেন। যখন ডেটাপ্রোক সার্ভারলেস জবগুলি চালানো হয়, তখন তিন ধরনের লগ তৈরি হয়:
- পরিষেবা-স্তর
- কনসোল আউটপুট
- স্পার্ক ইভেন্ট লগিং
সার্ভিস-লেভেলে , ডেটাপ্রক সার্ভারলেস সার্ভিস দ্বারা তৈরি করা লগগুলো অন্তর্ভুক্ত থাকে। এর মধ্যে ডেটাপ্রক সার্ভারলেসের অটোস্কেলিংয়ের জন্য অতিরিক্ত সিপিইউ অনুরোধ করার মতো বিষয়গুলোও রয়েছে। আপনি 'ভিউ লগস'-এ ক্লিক করে এগুলো দেখতে পারেন, যা ক্লাউড লগিং খুলে দেবে।
কনসোল আউটপুট ' আউটপুট' (Output) এর অধীনে দেখা যাবে। এটি হলো জব দ্বারা তৈরি আউটপুট, যার মধ্যে মেটাডেটাও অন্তর্ভুক্ত থাকে, যা স্পার্ক একটি জব শুরু করার সময় প্রিন্ট করে, অথবা জবের মধ্যে অন্তর্ভুক্ত যেকোনো প্রিন্ট স্টেটমেন্টও থাকে।
স্পার্ক ইভেন্ট লগিং স্পার্ক UI থেকে অ্যাক্সেস করা যায়। যেহেতু আপনি আপনার স্পার্ক জবকে একটি পারসিস্টেন্ট হিস্ট্রি সার্ভার দিয়েছেন, তাই আপনি 'View Spark History Server'-এ ক্লিক করে স্পার্ক UI অ্যাক্সেস করতে পারেন, যেখানে আপনার পূর্বে চালানো স্পার্ক জবগুলোর তথ্য থাকে। আপনি অফিসিয়াল স্পার্ক ডকুমেন্টেশন থেকে স্পার্ক UI সম্পর্কে আরও জানতে পারেন।
৫. ডেটাপ্রক টেমপ্লেট: BQ -> GCS
ডেটাপ্রোক টেমপ্লেট হলো ওপেন সোর্স টুল যা ক্লাউড-ভিত্তিক ডেটা প্রসেসিংয়ের কাজগুলোকে আরও সহজ করতে সাহায্য করে। এগুলো ডেটাপ্রোক সার্ভারলেস-এর জন্য একটি র্যাপার হিসেবে কাজ করে এবং এতে বিভিন্ন ডেটা ইম্পোর্ট ও এক্সপোর্ট কাজের জন্য টেমপ্লেট অন্তর্ভুক্ত রয়েছে, যেমন:
-
BigQuerytoGCSএবংGCStoBigQuery -
GCStoBigTable -
GCStoJDBCএবংJDBCtoGCS -
HivetoBigQuery -
MongotoGCSএবংGCStoMongo
সম্পূর্ণ তালিকাটি README-তে পাওয়া যাবে।
এই অংশে, আপনি BigQuery থেকে GCS-এ ডেটা এক্সপোর্ট করার জন্য Dataproc টেমপ্লেট ব্যবহার করবেন।
রিপোটি ক্লোন করুন
রিপোটি ক্লোন করুন এবং python ফোল্ডারে প্রবেশ করুন।
git clone https://github.com/GoogleCloudPlatform/dataproc-templates.git cd dataproc-templates/python
পরিবেশ কনফিগার করুন
এখন আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করবেন। ডেটাপ্রোক টেমপ্লেটগুলো আপনার প্রজেক্ট আইডির জন্য GCP_PROJECT এনভায়রনমেন্ট ভেরিয়েবলটি ব্যবহার করে, তাই এটিকে GOOGLE_CLOUD_PROJECT.
export GCP_PROJECT=${GOOGLE_CLOUD_PROJECT}
আপনার অঞ্চলটি পূর্বের পরিবেশে সেট করা থাকা উচিত। যদি না থাকে, তবে এখানে সেট করুন।
export REGION=<region>
Dataproc টেমপ্লেটগুলি BigQuery জব প্রসেস করার জন্য spark-bigquery-connector ব্যবহার করে এবং এর জন্য URI-টি JARS একটি এনভায়রনমেন্ট ভেরিয়েবলে অন্তর্ভুক্ত করা প্রয়োজন। JARS ভেরিয়েবলটি সেট করুন।
export JARS="gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.26.0.jar"
টেমপ্লেট প্যারামিটার কনফিগার করুন
সার্ভিসটি ব্যবহারের জন্য একটি স্টেজিং বাকেটের নাম নির্ধারণ করুন।
export GCS_STAGING_LOCATION=gs://${BUCKET}
এরপর, আপনাকে কিছু কাজ-ভিত্তিক ভেরিয়েবল সেট করতে হবে। ইনপুট টেবিলের জন্য, আপনাকে আবারও BigQuery NYC Citibike ডেটাসেটটি রেফারেন্স করতে হবে।
BIGQUERY_GCS_INPUT_TABLE=bigquery-public-data.new_york_citibike.citibike_trips
আপনি csv , parquet , avro বা json মধ্যে যেকোনো একটি বেছে নিতে পারেন। এই কোডল্যাবের জন্য, CSV বেছে নিন - পরবর্তী বিভাগে দেখানো হবে কীভাবে ডেটাপ্রক টেমপ্লেট ব্যবহার করে ফাইলের ধরন রূপান্তর করা যায়।
BIGQUERY_GCS_OUTPUT_FORMAT=csv
আউটপুট মোড overwrite -এ সেট করুন। আপনি overwrite , append , ignore বা errorifexists.
BIGQUERY_GCS_OUTPUT_MODE=overwrite
GCS আউটপুট লোকেশনটি আপনার বাকেটের একটি পাথ হিসেবে সেট করুন।
BIGQUERY_GCS_OUTPUT_LOCATION=gs://${BUCKET}/BQtoGCS
টেমপ্লেটটি চালান
নিচে উল্লেখ করে এবং আপনার সেট করা ইনপুট প্যারামিটারগুলো প্রদান করে BIGQUERYTOGCS টেমপ্লেটটি চালান।
./bin/start.sh \
-- --template=BIGQUERYTOGCS \
--bigquery.gcs.input.table=${BIGQUERY_GCS_INPUT_TABLE} \
--bigquery.gcs.output.format=${BIGQUERY_GCS_OUTPUT_FORMAT} \
--bigquery.gcs.output.mode=${BIGQUERY_GCS_OUTPUT_MODE} \
--bigquery.gcs.output.location=${BIGQUERY_GCS_OUTPUT_LOCATION}
আউটপুটটি বেশ কোলাহলপূর্ণ হবে, কিন্তু প্রায় এক মিনিট পর আপনি নিম্নলিখিতটি দেখতে পাবেন।
Batch [5766411d6c78444cb5e80f305308d8f8] submitted. ... Batch [5766411d6c78444cb5e80f305308d8f8] finished.
নিম্নলিখিতটি চালিয়ে আপনি ফাইলগুলো তৈরি হয়েছে কিনা তা যাচাই করতে পারেন।
gsutil ls ${BIGQUERY_GCS_OUTPUT_LOCATION}
ডেটার পরিমাণের উপর নির্ভর করে স্পার্ক ডিফল্টভাবে একাধিক ফাইলে লেখে। এক্ষেত্রে, আপনি প্রায় ৩০টি তৈরি হওয়া ফাইল দেখতে পাবেন। স্পার্ক আউটপুট ফাইলের নামগুলো part - এর পরে একটি পাঁচ-অঙ্কের সংখ্যা (যা পার্ট নম্বর নির্দেশ করে) এবং একটি হ্যাশ স্ট্রিং দিয়ে ফরম্যাট করা হয়। বিপুল পরিমাণ ডেটার ক্ষেত্রে, স্পার্ক সাধারণত বেশ কয়েকটি ফাইলে লেখে। একটি উদাহরণ ফাইলের নাম হলো part-00000-cbf69737-867d-41cc-8a33-6521a725f7a0-c000.csv ।
৬. ডেটাপ্রক টেমপ্লেট: CSV থেকে parquet
আপনি এখন GCSTOGCS ব্যবহার করে Dataproc টেমপ্লেটের মাধ্যমে GCS-এর ডেটাকে এক ফাইল টাইপ থেকে অন্য ফাইল টাইপে রূপান্তর করবেন। এই টেমপ্লেটটি SparkSQL ব্যবহার করে এবং অতিরিক্ত প্রক্রিয়াকরণের জন্য রূপান্তরের সময় একটি SparkSQL কোয়েরি জমা দেওয়ার বিকল্পও প্রদান করে।
পরিবেশ ভেরিয়েবল নিশ্চিত করুন
পূর্ববর্তী বিভাগ থেকে GCP_PROJECT , REGION এবং GCS_STAGING_BUCKET সেট করা আছে কিনা তা নিশ্চিত করুন।
echo ${GCP_PROJECT}
echo ${REGION}
echo ${GCS_STAGING_LOCATION}
টেমপ্লেট প্যারামিটার সেট করুন
এখন আপনি GCStoGCS এর জন্য কনফিগারেশন প্যারামিটার সেট করবেন। ইনপুট ফাইলগুলোর অবস্থান দিয়ে শুরু করুন। মনে রাখবেন, এটি একটি ডিরেক্টরি, কোনো নির্দিষ্ট ফাইল নয়, কারণ ডিরেক্টরির সমস্ত ফাইলই প্রসেস করা হবে। এটিকে BIGQUERY_GCS_OUTPUT_LOCATION এ সেট করুন।
GCS_TO_GCS_INPUT_LOCATION=${BIGQUERY_GCS_OUTPUT_LOCATION}
ইনপুট ফাইলের ফরম্যাট নির্ধারণ করুন।
GCS_TO_GCS_INPUT_FORMAT=csv
পছন্দসই আউটপুট ফরম্যাট সেট করুন। আপনি parquet, json, avro বা csv বেছে নিতে পারেন।
GCS_TO_GCS_OUTPUT_FORMAT=parquet
আউটপুট মোড overwrite -এ সেট করুন। আপনি overwrite , append , ignore বা errorifexists.
GCS_TO_GCS_OUTPUT_MODE=overwrite
আউটপুটের অবস্থান নির্ধারণ করুন।
GCS_TO_GCS_OUTPUT_LOCATION=gs://${BUCKET}/GCStoGCS
টেমপ্লেটটি চালান
GCStoGCS টেমপ্লেটটি চালান।
./bin/start.sh \
-- --template=GCSTOGCS \
--gcs.to.gcs.input.location=${GCS_TO_GCS_INPUT_LOCATION} \
--gcs.to.gcs.input.format=${GCS_TO_GCS_INPUT_FORMAT} \
--gcs.to.gcs.output.format=${GCS_TO_GCS_OUTPUT_FORMAT} \
--gcs.to.gcs.output.mode=${GCS_TO_GCS_OUTPUT_MODE} \
--gcs.to.gcs.output.location=${GCS_TO_GCS_OUTPUT_LOCATION}
আউটপুটটি বেশ ঝাপসা হবে, কিন্তু প্রায় এক মিনিট পর আপনি নীচের মতো একটি সফলতার বার্তা দেখতে পাবেন।
Batch [c198787ba8e94abc87e2a0778c05ec8a] submitted. ... Batch [c198787ba8e94abc87e2a0778c05ec8a] finished.
নিম্নলিখিতটি চালিয়ে আপনি ফাইলগুলো তৈরি হয়েছে কিনা তা যাচাই করতে পারেন।
gsutil ls ${GCS_TO_GCS_OUTPUT_LOCATION}
এই টেমপ্লেটের সাহায্যে, আপনার কাছে gcs.to.gcs.temp.view.name এবং gcs.to.gcs.sql.query পাস করে SparkSQL কোয়েরি সরবরাহ করার বিকল্পও রয়েছে, যা GCS-এ লেখার আগে ডেটার উপর একটি SparkSQL কোয়েরি চালানোর সুযোগ করে দেয়।
৭. সম্পদ পরিষ্কার করুন
এই কোডল্যাবটি সম্পন্ন করার পর আপনার GCP অ্যাকাউন্টে অপ্রয়োজনীয় চার্জ এড়ানোর জন্য:
- আপনার তৈরি করা এনভায়রনমেন্টের জন্য ক্লাউড স্টোরেজ বাকেটটি মুছে ফেলুন ।
gsutil rm -r gs://${BUCKET}
- আপনার পারসিস্টেন্ট হিস্ট্রি সার্ভারের জন্য ব্যবহৃত ডেটাপ্রোক ক্লাস্টারটি মুছে ফেলুন ।
gcloud dataproc clusters delete ${PHS_CLUSTER_NAME} \
--region=${REGION}
- Dataproc Serverless জবগুলো ডিলিট করুন। Batches Console- এ যান, আপনি যে জবগুলো ডিলিট করতে চান সেগুলোর পাশের বক্সে ক্লিক করুন এবং DELETE-এ ক্লিক করুন।
আপনি যদি শুধু এই কোডল্যাবের জন্য একটি প্রজেক্ট তৈরি করে থাকেন, তবে আপনি চাইলে প্রজেক্টটি মুছেও ফেলতে পারেন:
- GCP কনসোলে, প্রজেক্টস পৃষ্ঠায় যান।
- প্রজেক্ট তালিকা থেকে, আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং ডিলিট-এ ক্লিক করুন।
- বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।
৮. এরপর কী?
নিম্নলিখিত রিসোর্সগুলো সার্ভারলেস স্পার্কের সুবিধা গ্রহণের জন্য অতিরিক্ত উপায় প্রদান করে:
- ক্লাউড কম্পোজার ব্যবহার করে কীভাবে ডেটাপ্রোক সার্ভারলেস ওয়ার্কফ্লো পরিচালনা করতে হয় তা শিখুন।
- কীভাবে কুবেফ্লো পাইপলাইনের সাথে ডেটাপ্রোক সার্ভারলেস ইন্টিগ্রেট করতে হয় তা শিখুন।