স্পার্ক 3.0 এবং ডেল্টা লেকের সাথে ডেটা প্রসেসিং উন্নত করা

উত্স নোড: 1013539

সংগ্রহ, প্রক্রিয়াকরণ, এবং বিশ্লেষণ আউট বহন স্ট্রিমিং ডেটা, বিজ্ঞাপন প্রযুক্তির মতো শিল্পগুলিতে তীব্র ডেটা ইঞ্জিনিয়ারিং জড়িত। দৈনিক উত্পন্ন ডেটা বিশাল (100 জিবি ডেটা) এবং পরবর্তী পদক্ষেপগুলির জন্য ডেটা প্রক্রিয়া করার জন্য একটি উল্লেখযোগ্য প্রক্রিয়াকরণ সময় প্রয়োজন৷

আরেকটি চ্যালেঞ্জ হল অন্তর্দৃষ্টি অর্জনের জন্য ডেটাসেটের সাথে যোগদান করা। প্রতিটি প্রক্রিয়ায় গড়ে 10 টিরও বেশি ডেটাসেট এবং একাধিক কী সহ সমান সংখ্যক যোগদান রয়েছে। প্রতিটি রানের জন্য প্রতিটি কী-র পার্টিশনের আকার অনির্দেশ্য।

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

এই ব্লগে, আমরা একটি ওভারভিউ কভার করব ডেল্টা হ্রদ, এর সুবিধাগুলি, এবং ডেল্টা লেকে যাওয়ার এবং স্পার্ক 3.0 থেকে স্পার্ক 2.4-এ স্থানান্তর করার মাধ্যমে উপরের চ্যালেঞ্জগুলি কীভাবে কাটিয়ে উঠতে পারে। 

ডেল্টা লেক কি?

Databricks-এ ডেভেলপ করা হয়েছে, “ডেল্টা লেক হল একটি ওপেন-সোর্স ডেটা স্টোরেজ লেয়ার যা বিদ্যমান ডেটা লেকে চলে এবং সম্পূর্ণভাবে সহযোগিতা করে আপা স্পার্ক এপিআই এসিআইডি লেনদেন এবং স্কেলযোগ্য মেটাডেটা পরিচালনার ক্ষমতার পাশাপাশি ডেল্টা লেক স্ট্রিমিং এবং ব্যাচ ডেটা প্রক্রিয়াকরণকে একীভূত করতে পারে”। 

ডেল্টা লেক ক্লাউডে ডেটা সঞ্চয় করতে সংস্করণযুক্ত Parquet ফাইল ব্যবহার করে। ক্লাউড লোকেশন কনফিগার হয়ে গেলে, ডেল্টা লেক ACID লেনদেন প্রদানের জন্য টেবিল বা ব্লব স্টোর ডিরেক্টরিতে করা সমস্ত পরিবর্তন ট্র্যাক করে। 

ডেল্টা লেক ব্যবহারের সুবিধা 

ডেল্টা লেক হাজার হাজার ডেটা সমান্তরালভাবে চালানোর অনুমতি দেয়, অপ্টিমাইজেশান এবং পার্টিশন চ্যালেঞ্জ, দ্রুত মেটাডেটা ক্রিয়াকলাপ, একটি লেনদেন লগ বজায় রাখে এবং ক্রমাগত ডেটা আপডেট করে। নীচে আমরা কয়েকটি প্রধান সুবিধা নিয়ে আলোচনা করব: 

ডেল্টা লেক লেনদেন লগ

ডেল্টা লেক লেনদেন লগগুলি হল একটি শুধুমাত্র-সংযোজিত ফাইল এবং এতে ডেল্টা লেক টেবিলে সম্পাদিত সমস্ত লেনদেনের একটি অর্ডারকৃত রেকর্ড থাকে। লেনদেন লগ বিভিন্ন ব্যবহারকারীদের সমান্তরালভাবে প্রদত্ত টেবিলে পড়তে এবং লিখতে অনুমতি দেয়। এটি সত্যের একক উত্স বা কেন্দ্রীয় সংগ্রহস্থল হিসাবে কাজ করে যা ব্যবহারকারীর দ্বারা টেবিলে করা সমস্ত পরিবর্তন লগ করে। এটি পারমাণবিকতা বজায় রাখে এবং ডেল্টা লেকে সঞ্চালিত লেনদেনগুলি ক্রমাগত দেখে।

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

লেনদেন লগ কাজ এবং পারমাণবিক কমিট

ডেল্টা লেক প্রতি দশ কমিটে একটি চেকপয়েন্ট করে। চেকপয়েন্ট করা ফাইলটিতে Parquet বিন্যাসে ডেটার বর্তমান অবস্থা রয়েছে যা দ্রুত পড়া যায়। যখন একাধিক ব্যবহারকারী একই সময়ে টেবিল পরিবর্তন করার চেষ্টা করেন, তখন ডেল্টা লেক আশাবাদী কনকারেন্সি কন্ট্রোল ব্যবহার করে দ্বন্দ্ব সমাধান করে।

মেটাডেটার স্কিমা নিম্নরূপ: 

স্তম্ভআদর্শবিবরণ
বিন্যাসস্ট্রিংটেবিলের বিন্যাস, অর্থাৎ "ডেল্টা"।
idস্ট্রিংটেবিলের অনন্য আইডি
নামস্ট্রিংমেটাস্টোরে সংজ্ঞায়িত টেবিলের নাম
বিবরণস্ট্রিংটেবিলের বর্ণনা।
অবস্থানস্ট্রিংটেবিলের অবস্থান
এ নির্মিতটাইমস্ট্যাম্পযখন টেবিল তৈরি করা হয়েছিল
সর্বশেষ পরিবর্তিতটাইমস্ট্যাম্পযখন টেবিলটি সর্বশেষ পরিবর্তন করা হয়েছিল
পার্টিশন কলামস্ট্রিং এর অ্যারেটেবিল পার্টিশন করা হলে পার্টিশন কলামের নাম
numFilesদীর্ঘটেবিলের সর্বশেষ সংস্করণে ফাইলের সংখ্যা
বৈশিষ্ট্যস্ট্রিং-স্ট্রিং মানচিত্রএই টেবিলের জন্য সমস্ত বৈশিষ্ট্য সেট করা হয়েছে
minReaderVersionকোন intপাঠকদের ন্যূনতম সংস্করণ (লগ প্রোটোকল অনুসারে) যা টেবিলটি পড়তে পারে।
minWriterVersionকোন intপাঠকদের ন্যূনতম সংস্করণ (লগ প্রোটোকল অনুযায়ী) যা টেবিলে লিখতে পারে।
উত্স: GitHub

ফাইল যোগ করুন এবং সরান

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

যেহেতু একটি প্রদত্ত ডেল্টা ফাইলের মধ্যে ক্রিয়াগুলি ক্রমানুসারে প্রয়োগ করার গ্যারান্টি দেওয়া হয় না, তাই এটি একক সংস্করণে একই পাথ সহ একাধিক ফাইল অপারেশনের জন্য বৈধ নয়।

সমসাময়িক ক্রিয়াকলাপ দ্বন্দ্ব কমাতে একটি 'যোগ' বা 'সরানো' হয় ডেটা চেঞ্জ পতাকা মিথ্যা সেট করা যেতে পারে।

অ্যাড অ্যাকশনের স্কিমা নিম্নরূপ:

ক্ষেত্র নামতথ্য টাইপবিবরণ
পথস্ট্রিংএকটি আপেক্ষিক পথ, টেবিলের রুট থেকে, একটি ফাইল যা টেবিলে যোগ করা উচিত
পার্টিশন মানমানচিত্র [স্ট্রিং, স্ট্রিং]এই ফাইলের জন্য পার্টিশন কলাম থেকে মান পর্যন্ত একটি মানচিত্র। 
আয়তনদীর্ঘএই ফাইলের আকার বাইটে
পরিবর্তনের সময়দীর্ঘএই ফাইলটি তৈরি হওয়ার সময়, যুগ থেকে মিলিসেকেন্ড হিসাবে
ডেটা পরিবর্তনবুলিয়ানমিথ্যা হলে ফাইলটি ইতিমধ্যেই টেবিলে উপস্থিত থাকতে হবে বা যোগ করা ফাইলের রেকর্ডগুলি একই সংস্করণে এক বা একাধিক অপসারণ ক্রিয়াগুলিতে থাকতে হবে
পরিসংখ্যানপরিসংখ্যান কাঠামোএই ফাইলের ডেটা সম্পর্কে পরিসংখ্যান (যেমন, গণনা, কলামের জন্য সর্বনিম্ন/সর্বোচ্চ মান) রয়েছে
ট্যাগমানচিত্র [স্ট্রিং, স্ট্রিং]এই ফাইল সম্পর্কে মেটাডেটা ধারণকারী মানচিত্র

অপসারণ কর্মের স্কিমা নিম্নরূপ:

ক্ষেত্র নামউপাত্ত আদর্শবিবরণ
পথস্ট্রিংএকটি ফাইলের একটি পরম বা আপেক্ষিক পথ যা টেবিল থেকে সরানো উচিত
মুছে ফেলার টাইমস্ট্যাম্পদীর্ঘমুছে ফেলার সময়, যুগ থেকে মিলিসেকেন্ড হিসাবে উপস্থাপিত
ডেটা পরিবর্তনবুলিয়ানমিথ্যা হলে সরানো ফাইলের রেকর্ডগুলি একই সংস্করণে এক বা একাধিক অ্যাড ফাইল অ্যাকশনে থাকতে হবে
বর্ধিত ফাইল মেটাডেটাবুলিয়ানসত্য হলে ক্ষেত্রগুলি পার্টিশন মান, আকার এবং ট্যাগ উপস্থিত থাকে
পার্টিশন মানমানচিত্র [স্ট্রিং, স্ট্রিং]এই ফাইলের জন্য পার্টিশন কলাম থেকে মান পর্যন্ত একটি মানচিত্র। পার্টিশন ভ্যালু সিরিয়ালাইজেশনও দেখুন
আয়তনদীর্ঘএই ফাইলের আকার বাইটে
ট্যাগমানচিত্র [স্ট্রিং, স্ট্রিং]এই ফাইল সম্পর্কে মেটাডেটা ধারণকারী মানচিত্র
উত্স: GitHub

মেটাডেটার স্কিমা প্রতিটি অ্যাড/রিমুভ অ্যাকশনে ফাইল পাথ ধারণ করে এবং স্পার্ক রিড প্রক্রিয়ার ফাইল তালিকা পেতে সম্পূর্ণ স্ক্যান করার প্রয়োজন নেই।

লেনদেন লগ আপডেট না করে যদি একটি লেখা ব্যর্থ হয়, যেহেতু ভোক্তার রিডিং সবসময় মেটাডেটার মাধ্যমে যাবে, সেই ফাইলগুলি উপেক্ষা করা হবে৷ 

স্পার্ক 3.0-এ স্থানান্তরিত হওয়ার সুবিধা

ডেল্টা লেকের সুবিধাগুলি লাভ করার পাশাপাশি, স্পার্ক 3.0-তে স্থানান্তরিত করা নিম্নলিখিত উপায়ে ডেটা প্রক্রিয়াকরণ উন্নত করেছে:

Skewed যোগদান অপ্টিমাইজেশান

ডেটা স্কু হল এমন একটি শর্ত যেখানে একটি টেবিলের ডেটা ক্লাস্টারের পার্টিশনগুলির মধ্যে অসমভাবে বিতরণ করা হয় এবং বিশেষ করে যারা যোগদানের সাথে কোয়েরির কার্যকারিতা মারাত্মকভাবে হ্রাস করতে পারে। তির্যকতা ক্লাস্টারে চরম ভারসাম্যহীনতার দিকে পরিচালিত করতে পারে যার ফলে ডেটা প্রক্রিয়াকরণের সময় বৃদ্ধি পায়।

ডেটা স্কু কন্ডিশন প্রধানত তিনটি পন্থা দ্বারা পরিচালনা করা যেতে পারে।

  1. আরও সমানভাবে বিতরণ করা ডেটাতে সমান্তরালতা বৃদ্ধির জন্য কনফিগারেশন "spark.sql.shuffle.partitions" ব্যবহার করে।
  2. spark.sql.autoBroadcastJoinThreshold কনফিগারেশন ব্যবহার করে ব্রডকাস্ট হ্যাশ জয়েন থ্রেশহোল্ড বাড়ানো হচ্ছে টেবিলের জন্য বাইটে সর্বাধিক আকারে যা যোগদান করার সময় সমস্ত কর্মী নোডে সম্প্রচার করতে হবে।
  3. কী সল্টিং (একই কী আলাদা করতে তির্যক কীগুলিতে উপসর্গ যুক্ত করুন এবং তারপরে ডেটা বিতরণ সামঞ্জস্য করুন)।

স্পার্ক 3.0 নতুন অ্যাডাপটিভ এক্সিকিউশন ফ্রেমওয়ার্কের সাথে রানটাইম পরিসংখ্যানের উপর ভিত্তি করে অটো হ্যান্ডলিং স্কু যোগে একটি অপ্টিমাইজেশান যুক্ত করেছে।

স্কুইড পার্টিশন কন্ডিশন

স্পার্ক 2.4-এর পূর্ববর্তী সংস্করণে বিদ্যমান স্কুইড পার্টিশনের চ্যালেঞ্জ নেটওয়ার্ক সময় এবং একটি নির্দিষ্ট কাজের সম্পাদনের সময়কে ব্যাপক প্রভাব ফেলেছিল। তদুপরি, এটি মোকাবেলা করার পদ্ধতিগুলি বেশিরভাগই ম্যানুয়াল ছিল। স্পার্ক 3.0 এই চ্যালেঞ্জগুলি অতিক্রম করে।

স্কুইড পার্টিশন নেটওয়ার্ক ট্র্যাফিক এবং টাস্ক এক্সিকিউশন টাইমের উপর প্রভাব ফেলবে, যেহেতু এই নির্দিষ্ট টাস্কটিতে প্রক্রিয়া করার জন্য অনেক বেশি ডেটা থাকবে। এটি কীভাবে সাইবার নিরাপত্তাকে প্রভাবিত করে তাও আপনাকে জানতে হবে, যেহেতু নেটওয়ার্ক ট্র্যাফিক ভলিউম এমন কিছু যা হ্যাকাররা সুবিধা নেয়.

স্ক্যুড জয়েন পার্টিশন রানটাইম ম্যাপ পরিসংখ্যান থেকে ডেটা আকার এবং সারি গণনা দ্বারা গণনা করা হয়।

অপ্টিমাইজেশান

থেকে অভিযোজিত: অ্যাপাচি স্পার্ক জিরা

উপরের টেবিল থেকে, ডেটাফ্রেম ক্যাম্পেইনগুলি ডেটাফ্রেম সংস্থাগুলির সাথে যোগদান করে৷ অর্গানাইজেশন থেকে একটি পার্টিশন (পার্টিশন 0) বড় এবং তির্যক। বিভাজন 0 হল পূর্ববর্তী পর্যায় থেকে 9টি মানচিত্রের ফলাফল (ম্যাপ-0 থেকে মানচিত্র-8)। স্পার্কের OptimizeSkewedJoin নিয়মটি পার্টিশনকে 3 তে বিভক্ত করবে এবং তারপরে 3টি পৃথক টাস্ক তৈরি করবে যার প্রত্যেকটি পার্টিশন 0 থেকে আংশিক পার্টিশন হচ্ছে (মানচিত্র-0 থেকে মানচিত্র-2, মানচিত্র-3 থেকে মানচিত্র-5, এবং মানচিত্র-6 থেকে মানচিত্র-9) এবং প্রচারাভিযান পার্টিশন 0 এর সাথে যোগদান করে। এই পদ্ধতির ফলে টেবিল সংগঠনের আংশিক পার্টিশনের সংখ্যার সমান টেবিল ক্যাম্পেইনের পার্টিশন 0 পড়ে অতিরিক্ত খরচ হয়।

শেষ ফলাফল

ডেল্টা লেক এবং স্পার্ক 3.0 ব্যবহার করে, আমরা বিজ্ঞাপন প্রযুক্তি সংস্থার জন্য নিম্নলিখিত ফলাফলগুলি সক্ষম করেছি:

  • ডেটা প্রক্রিয়াকরণের সময় 15 ঘন্টা থেকে কমিয়ে 5-6 ঘন্টা করা হয়েছিল
  • AWS EMR খরচে 50% হ্রাস
  • ডেটা হারানো এবং প্রক্রিয়াগুলির মৃত্যু রোধ করা যা একটি ঘন ঘন ঘটনা ছিল যখন সিস্টেমটি মেমরির বাইরে চলে যায় বা সিস্টেমে ত্রুটির কারণে প্রক্রিয়াকরণ বন্ধ হয়ে যায়
  • প্রক্রিয়া ব্যর্থ হলে অবহিত করার জন্য পর্যবেক্ষণ এবং সতর্কতা বৈশিষ্ট্যগুলি ইনস্টল করা হয়েছিল
  • প্রক্রিয়াগুলির মধ্যে সম্পূর্ণ অটোমেশন এবং নির্ভরতা ব্যবস্থাপনা অর্জনের জন্য এয়ারফ্লো ব্যবহার করে সম্পূর্ণ অর্কেস্ট্রেশন
সূত্র: https://www.smartdatacollective.com/improving-data-processing-with-spark-3-delta-lake/

সময় স্ট্যাম্প:

থেকে আরো স্মার্টডাটা কালেক্টিভ