7 min read

ইন্টারেক্টিভ স্পার্ক জবসের সাথে আপনার স্পার্ক ক্লাস্টারটি কীভাবে অনুকূল করবেন

Spark on Kubernetes

এই নিবন্ধে, আপনি শিখবেন:

  • আপনার স্পার্ক জব এক্সিকিউশন সময় কীভাবে হ্রাস করবেন
  • ইলুমে একটি ইন্টারেক্টিভ কাজ কি
  • কীভাবে একটি ইন্টারেক্টিভ স্পার্ক কাজ চালাবেন
  • ইলাম এপিআই এবং স্পার্ক এপিআই ব্যবহার করে স্পার্ক কাজ চালানোর মধ্যে পার্থক্য

ইলম কাজের ধরন

ইলুমে আপনি তিন ধরণের কাজ চালাতে পারেন: একক চাকরি , ইন্টারেক্টিভ জব এবং ইন্টারেক্টিভ কোড . এই নিবন্ধে, আমরা ফোকাস করব ইন্টারেক্টিভ জব টাইপ। যাইহোক, তিন ধরনের কাজের মধ্যে পার্থক্য জানা গুরুত্বপূর্ণ, তাই আসুন প্রত্যেকের একটি দ্রুত ওভারভিউ নেওয়া যাক।

সাথে একক চাকরি , আপনি কোড মত প্রোগ্রাম জমা দিতে পারেন। তারা আপনাকে রানটাইম চলাকালীন মিথস্ক্রিয়া ছাড়াই প্রাক-সংকলিত কোড সহ ক্লাস্টারে একটি স্পার্ক অ্যাপ্লিকেশন জমা দেওয়ার অনুমতি দেয়। এই মোডে, আপনাকে ইলুমে একটি সংকলিত জার পাঠাতে হবে, যা একক কাজ চালু করতে ব্যবহৃত হয়। আপনি হয় এটি সরাসরি প্রেরণ করতে পারেন, বা আপনি এস 3 বালতি থেকে এটি পেতে এডাব্লুএস শংসাপত্রগুলি ব্যবহার করতে পারেন। একক কাজের ব্যবহারের একটি সাধারণ উদাহরণ হ'ল কোনও ধরণের ডেটা প্রস্তুতির কাজ।

ইলুমও একটি সরবরাহ করে মিথষ্ক্রিয়ভাবে কোড মোড , যা আপনাকে রানটাইমে কমান্ড জমা দিতে দেয়। এটি এমন কাজগুলির জন্য দরকারী যেখানে আপনাকে ডেটার সাথে ইন্টারঅ্যাক্ট করতে হবে, যেমন অনুসন্ধানমূলক ডেটা বিশ্লেষণ।

ইন্টারেক্টিভ জব

ইন্টারেক্টিভ জবগুলিতে দীর্ঘ-চলমান সেশন রয়েছে, যেখানে আপনি এখনই কার্যকর করার জন্য কাজের উদাহরণ ডেটা পাঠাতে পারেন। এই জাতীয় মোডের হত্যাকারী বৈশিষ্ট্যটি হ'ল আপনাকে স্পার্ক প্রসঙ্গটি শুরু করার জন্য অপেক্ষা করতে হবে না। ব্যবহারকারীরা যদি একই কাজের আইডির দিকে ইঙ্গিত করে তবে তারা একই স্পার্ক প্রসঙ্গে ইন্টারঅ্যাক্ট করবে। ইলাম স্পার্ক অ্যাপ্লিকেশন লজিককে একটি দীর্ঘকালীন স্পার্ক চাকরিতে মোড়ানো যা স্পার্ক প্রসঙ্গ সূচনার জন্য অপেক্ষা করার প্রয়োজন ছাড়াই তাত্ক্ষণিকভাবে গণনার অনুরোধগুলি পরিচালনা করতে সক্ষম।

একটি ইন্টারেক্টিভ কাজ শুরু করা

আসুন দেখে নেওয়া যাক কীভাবে ইলুমের ইন্টারেক্টিভ সেশন শুরু করা যায়। আমাদের প্রথম যে কাজটি করতে হবে তা হ'ল ইলুম সেট আপ করা। মিনিকুব দিয়ে সহজেই করতে পারবেন। ইলাম ইনস্টলেশন সহ একটি টিউটোরিয়াল এর অধীনে উপলব্ধ যোগসূত্র . পরবর্তী ধাপে, আমাদের একটি জার ফাইল তৈরি করতে হবে যাতে ইলমের কাজের ইন্টারফেসের বাস্তবায়ন রয়েছে। ইলম জব এপিআই ব্যবহার করতে, আমাদের কিছু নির্ভরতা পরিচালকদের সাথে এটি প্রকল্পে যুক্ত করতে হবে, যেমন মাভেন বা গ্র্যাডেল। এই উদাহরণে, আমরা পিআই গণনা করতে একটি গ্র্যাডেল সহ কিছু স্কালা কোড ব্যবহার করব।

সম্পূর্ণ উদাহরণ আমাদের উপর পাওয়া যায় গিটহাব .

আপনি যদি এটি নিজে তৈরি না করতে পছন্দ করেন তবে আপনি সংকলিত জার ফাইলটি খুঁজে পেতে পারেন এখানে .

প্রথম পদক্ষেপটি আমাদের প্রকল্পের জন্য একটি ফোল্ডার তৈরি করা এবং এটিতে ডিরেক্টরিটি পরিবর্তন করা।

$ এমকেডিআইআর ইন্টারেক্টিভ-জব-উদাহরণ
$ সিডি ইন্টারেক্টিভ-জব-উদাহরণ 

আপনার কম্পিউটারে যদি গ্র্যাডেলের নতুন সংস্করণ ইনস্টল না থাকে তবে আপনি এটি কীভাবে করবেন তা পরীক্ষা করে দেখতে পারেন এখানে . তারপরে প্রকল্প ডিরেক্টরির ভিতর থেকে একটি টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:

$ গ্র্যাডেল init 

ডিএসএল হিসাবে গ্রুভির সাথে একটি স্কালা অ্যাপ্লিকেশন চয়ন করুন। আউটপুটটি দেখতে এরকম হওয়া উচিত:

একটি গ্রেডেল ডেমন শুরু করা (পরবর্তী বিল্ডগুলি দ্রুত হবে)

জেনারেট করার জন্য প্রজেক্টের ধরন নির্বাচন করুন:
  ১. বেসিক
  2: অ্যাপ্লিকেশন
  ৩. গ্রন্থাগার
  4: গ্র্যাডেল প্লাগইন
নির্বাচন লিখুন (ডিফল্ট: মৌলিক) [1..4] 2

বাস্তবায়ন ভাষা নির্বাচন করুন:
  1: সি ++
  ২. গ্রুভি
  ৩. জাভা
  ৪: কোটলিন
  ৫. স্কালা
  ৬. সুইফট
নির্বাচন লিখুন (ডিফল্ট: জাভা) [1..6] 5

একাধিক উপপ্রকল্প জুড়ে কার্যকারিতা বিভক্ত ?:
  1: না - শুধুমাত্র একটি অ্যাপ্লিকেশন প্রকল্প
  2: হ্যাঁ - অ্যাপ্লিকেশন এবং গ্রন্থাগার প্রকল্প
নির্বাচন লিখুন (ডিফল্ট: না - শুধুমাত্র একটি অ্যাপ্লিকেশন প্রকল্প) [1..2] 1

বিল্ড স্ক্রিপ্ট ডিএসএল নির্বাচন করুন:
  ১. গ্রুভি
  ২: কোটলিন
নির্বাচন লিখুন (ডিফল্ট: গ্রুভি) [1..2] 1

নতুন এপিআই এবং আচরণ ব্যবহার করে বিল্ড তৈরি করুন (পরবর্তী ছোটখাটো রিলিজে কিছু বৈশিষ্ট্য পরিবর্তন হতে পারে)? (ডিফল্ট: না) [হ্যাঁ, না] না                           
প্রকল্পের নাম (ডিফল্ট: ইন্টারেক্টিভ-জব-উদাহরণ): 
উৎস প্যাকেজ (ডিফল্ট: interactive.job.example): 

> কাজ :init
আপনার প্রকল্পে আরও সহায়তা পান: https://docs.gradle.org/7.5.1/samples/sample_building_scala_applications_multi_project.html

30 এর দশকে সফল তৈরি করুন
2 কার্যকরী কাজ: 2 সম্পাদন করা হয়েছে 

এখন আমাদের আপনার মধ্যে ইলম সংগ্রহস্থল এবং প্রয়োজনীয় নির্ভরতা যুক্ত করতে হবে build.gradle ফাইল। এই টিউটোরিয়ালে, আমরা স্কালা 2.12 ব্যবহার করব।

নির্ভরশীলতা {
    বাস্তবায়ন 'অর্গ.স্কালা-ল্যাং: স্কালা-লাইব্রেরি: 2.12.16'
    বাস্তবায়ন 'Cloud.ilum:ilum-job-api: 5.0.1'
    compileOnly 'org.apache.spark:spark-sql_2.12:3.1.2'
} 

এখন আমরা একটি স্কালা ক্লাস তৈরি করতে পারি যা ইলমের কাজকে প্রসারিত করে এবং যা পিআই গণনা করে:

প্যাকেজ ইন্টারেক্টিভ.জব.উদাহরণ

cloud.ilum.job.Job আমদানি করুন
আমদানি org.apache.spark.sql.SparkSession
আমদানি scala.math.random

ক্লাস ইন্টারেক্টিভজবউদাহরণ চাকরি বাড়ায় {

ওভাররাইড ডিএফ রান (স্পার্কসেশন: স্পার্কসেশন, কনফিগারেশন: মানচিত্র [স্ট্রিং, কোনও]): বিকল্প [স্ট্রিং] = {

val slices = config.getOrElse("slices", "2").toString.toInt
    val n = math.min(100000L * স্লাইস, Int.MaxValue).toInt
    val count = sparkSession.sparkContext.parallelize(1 till n, slices).map { i =>
      ভ্যাল এক্স = এলোমেলো * 2 - 1
      ভ্যাল ওয়াই = এলোমেলো * 2 - 1
      যদি (x * x + y * y < = 1) 1 অন্য 0
    }.হ্রাস(_ + _)
    কিছু (গুলি"পাই প্রায় $ {4.0 * গণনা / (এন - 1)}")
  }
} 

যদি গ্র্যাডেল কিছু প্রধান বা পরীক্ষার ক্লাস তৈরি করে থাকে তবে কেবল সেগুলি প্রকল্প থেকে সরান এবং একটি বিল্ড তৈরি করুন।

$ গ্রেডেল বিল্ড 

উত্পন্ন জার ফাইলটি ' এ থাকা উচিত ./ইন্টারেক্টিভ-জব-উদাহরণ/অ্যাপ/বিল্ড/লিবস/app.jar ', আমরা তখন ইলুমে ফিরে যেতে পারি। সমস্ত পড চলমান হয়ে গেলে, দয়া করে ইলুম-ইউআইয়ের জন্য একটি পোর্ট ফরোয়ার্ড করুন:

কুবেক্টল পোর্ট-ফরোয়ার্ড এসভিসি / আইএলইউএম-ইউআই 9777: 9777 

আপনার ব্রাউজারে ইলাম ইউআই খুলুন এবং একটি নতুন গ্রুপ তৈরি করুন:

ilum ui spark monitoring

একটি গোষ্ঠীর নাম রাখুন, একটি ক্লাস্টার চয়ন করুন বা তৈরি করুন, আপনার জার ফাইলটি আপলোড করুন এবং পরিবর্তনগুলি প্রয়োগ করুন:

ilum add group

ইলাম একটি স্পার্ক ড্রাইভার পড তৈরি করবে এবং আপনি স্পার্ক এক্সিকিউটর পডগুলির সংখ্যা স্কেলিং করে নিয়ন্ত্রণ করতে পারেন। স্পার্ক ধারক প্রস্তুত হওয়ার পরে, কাজগুলি কার্যকর করা যাক:

ilum execute job

এখন আমাদের স্কালা ক্লাসের ক্যানোনিকাল নামটি রাখতে হবে

interactive.job.example.InteractiveJobExample 

এবং জেএসওএন ফর্ম্যাটে স্লাইস প্যারামিটারটি সংজ্ঞায়িত করুন:

{
  "কনফিগ": {
    "স্লাইস": "10"
  }
} 

কাজ শুরু হওয়ার পরেই আপনার ফলাফলটি দেখতে হবে

আপনি পরামিতি পরিবর্তন করতে পারেন, এবং একটি কাজ পুনরায় চালাতে পারেন এবং আপনার গণনা ঘটনাস্থলে ঘটবে।

ইন্টারেক্টিভ এবং একক কাজের তুলনা

ইলুমে আপনি একটি একক কাজও চালাতে পারেন। ইন্টারেক্টিভ মোডের তুলনায় সবচেয়ে গুরুত্বপূর্ণ পার্থক্য হল যে আপনাকে জব এপিআই বাস্তবায়ন করতে হবে না। আমরা স্পার্ক উদাহরণ থেকে স্পার্কপাই জারটি ব্যবহার করতে পারি:

ilum add job

এই মত একটি কাজ চালানো এছাড়াও দ্রুত, কিন্তু ইন্টারেক্টিভ কাজ হয় 20 গুণ দ্রুত (4 এস বনাম 200 এমএস) . আপনি যদি অন্যান্য পরামিতিগুলির সাথে অনুরূপ কাজ শুরু করতে চান তবে আপনাকে একটি নতুন কাজ প্রস্তুত করতে হবে এবং জারটি আবার আপলোড করতে হবে।

ইলাম এবং সরল অ্যাপাচি স্পার্ক তুলনা


আমি স্থানীয়ভাবে একটি দিয়ে অ্যাপাচি স্পার্ক সেট আপ করেছি বিটনামি/স্ফুলিঙ্গ ডকার ইমেজ। আপনি যদি নিজের মেশিনে স্পার্ক চালাতে চান তবে আপনি ডকার-কম্পোজ ব্যবহার করতে পারেন:

$ কার্ল -এলও https://raw.githubusercontent.com/bitnami/containers/main/bitnami/spark/docker-compose.yml
$ ডকার-রচনা আপ 

একবার স্পার্ক চলমান হয়ে গেলে, আপনার লোকালহোস্ট: 8080 এ যেতে এবং অ্যাডমিন ইউআই দেখতে সক্ষম হওয়া উচিত। আমাদের ব্রাউজার থেকে স্পার্ক ইউআরএল পেতে হবে:

spark admin

তারপরে, আমাদের ইন্টারেক্টিভ মোডে স্পার্ক ধারকটি খুলতে হবে

$ ডকার এক্সিকিউটিভ -ইট <containerid> -- ব্যাশ 
spark container

এবং এখন ধারকের ভিতরে, আমরা স্পার্কপাই কাজ জমা দিতে পারি। এই ক্ষেত্রে, উদাহরণ জার থেকে স্পার্কিপাই ব্যবহার করবে এবং একটি মাস্টার প্যারামিটার হিসাবে, ব্রাউজার থেকে ইউআরএল রাখুন:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi\
  --মাস্টার spark://78c84485d233:7077 \
  /অপ্ট / বিটনামি / স্পার্ক / উদাহরণ / জার / spark-examples_2.12-3.3.0.jar \
  10 

সারাংশ

আপনি উপরের উদাহরণে দেখতে পাচ্ছেন, আপনি ইলাম ব্যবহার করে আপনার স্পার্ক ক্লায়েন্টের জটিল কনফিগারেশন এবং ইনস্টলেশন এড়াতে পারেন। ইলাম কাজটি গ্রহণ করে এবং আপনাকে একটি সহজ এবং সুবিধাজনক ইন্টারফেস সরবরাহ করে। তাছাড়া, এটি আপনাকে অ্যাপাচি স্পার্কের সীমাবদ্ধতাগুলি কাটিয়ে উঠতে দেয়, যা আরম্ভ করতে খুব দীর্ঘ সময় নিতে পারে। আপনি অনুরূপ যুক্তি কিন্তু বিভিন্ন পরামিতি সঙ্গে অনেক কাজ মৃত্যুদন্ড করতে হবে এবং অবিলম্বে গণনা সম্পন্ন করতে চান, আপনি স্পষ্টভাবে ইন্টারেক্টিভ জব মোড ব্যবহার করা উচিত.

Ilum ferret

অ্যাপাচি লিভির সাথে মিল

ইলাম কুবারনেটসে অ্যাপাচি স্পার্ক স্থাপনা পরিচালনার জন্য একটি ক্লাউড-নেটিভ সরঞ্জাম। কার্যকারিতার দিক থেকে এটি অ্যাপাচি লিভির অনুরূপ - এটি আরইএসটি এপিআইয়ের উপর একটি স্পার্ক সেশন নিয়ন্ত্রণ করতে পারে এবং একটি স্পার্ক ক্লাস্টারের সাথে রিয়েল-টাইম ইন্টারঅ্যাকশন তৈরি করতে পারে। তবে ইলাম আধুনিক, মেঘ-নেটিভ পরিবেশের জন্য বিশেষভাবে ডিজাইন করা হয়েছে।

আমরা অতীতে অ্যাপাচি লিভি ব্যবহার করেছি, কিন্তু আমরা এমন জায়গায় পৌঁছেছি যেখানে লিভি আধুনিক পরিবেশের জন্য উপযুক্ত ছিল না। লিভি অপ্রচলিত ইলুমের তুলনায়। 2018 সালে, আমরা আমাদের সমস্ত পরিবেশকে কুবারনেটসে স্থানান্তরিত করতে শুরু করি এবং কুবারনেটসে অ্যাপাচি স্পার্ক মোতায়েন, নিরীক্ষণ এবং রক্ষণাবেক্ষণের জন্য আমাদের একটি উপায় খুঁজে বের করতে হয়েছিল। ইলুম নির্মাণের জন্য এটি ছিল নিখুঁত উপলক্ষ।