Spark Structured Streaming কী? গাইড ও নোট

Big Data and Analytics - স্পার্ক এসকিউএল (Spark SQL) - Spark SQL এবং Streaming Data
319

Spark Structured Streaming হল Apache Spark-এর একটি মডিউল যা রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য ডিজাইন করা হয়েছে। এটি streaming ডেটার উপর SQL কোয়ারি চালানোর ক্ষমতা প্রদান করে এবং batch processing এবং streaming processing এর মধ্যে একটি অভিন্ন API অফার করে। Spark Structured Streaming-এর মাধ্যমে ব্যবহারকারীরা সোজাসুজি স্ট্রিমিং ডেটা থেকে ডেটা ফ্লো বিশ্লেষণ করতে পারেন এবং তাৎক্ষণিকভাবে ফলাফল পেতে পারেন।


Spark Structured Streaming এর মূল বৈশিষ্ট্যসমূহ

  1. Unified API: Structured Streaming একটি ইউনিফাইড API অফার করে যা ব্যাচ প্রসেসিং এবং স্ট্রিমিং প্রসেসিংকে একত্রিত করে। এটি ব্যবহারকারীদের একক DataFrame/Dataset API ব্যবহার করতে দেয়, যাতে কোড সহজ এবং পরিষ্কার হয়।
  2. Fault Tolerance: Structured Streaming ডেটা প্রসেসিংয়ের সময় exactly-once semantics বজায় রাখে, যা গ্যারান্টি দেয় যে ডেটার উপর যে অপারেশনই করা হোক না কেন, তা একাধিক বার হবে না এবং ডেটা কখনও হারাবে না।
  3. Scalable: Structured Streaming এর মাধ্যমে খুব বড় আকারের স্ট্রিমিং ডেটা সহজেই প্রসেস করা সম্ভব। Spark-এর ডিস্ট্রিবিউটেড কম্পিউটিং ক্ষমতার জন্য এটি সহজেই স্কেল করা যায়।
  4. Windowing: Spark Structured Streaming windowing ফিচার প্রদান করে, যা স্ট্রিমিং ডেটার নির্দিষ্ট সময়সীমার মধ্যে বিশ্লেষণ করতে সহায়তা করে। উদাহরণস্বরূপ, একটি চলন্ত উইন্ডোতে গত ৫ মিনিটের মধ্যে সঠিক ডেটা বিশ্লেষণ করা।
  5. End-to-End Exactly-Once Semantics: এটি স্ট্রিমিং প্রসেসিংয়ে exactly-once সেমান্টিক্স প্রদান করে, যার মানে হল যে স্ট্রিমিং ডেটার প্রতি অপারেশন একবারের বেশি হবে না।

Spark Structured Streaming এর মূল উপাদানসমূহ

  1. Input Sources: Structured Streaming বিভিন্ন ধরনের ইনপুট সোর্স থেকে ডেটা গ্রহণ করতে পারে, যেমন:
    • Kafka
    • File systems (e.g., HDFS, S3)
    • Socket streams
    • JDBC
  2. Transformation: Structured Streaming ডেটার উপর বিভিন্ন ধরনের ট্রান্সফরমেশন করতে সক্ষম। এর মধ্যে ফিল্টার, অ্যাগ্রিগেশন, জয়েন, ম্যাপ, ফ্ল্যাটম্যাপ ইত্যাদি অন্তর্ভুক্ত।
  3. Output Sinks: প্রসেস করা ডেটা বিভিন্ন আউটপুট সোর্সে লেখা যেতে পারে, যেমন:
    • Console (for debugging)
    • HDFS, S3, or Cloud Storage
    • Kafka
    • Delta Lake
    • JDBC
  4. Triggers: Structured Streaming ট্রিগার (e.g., micro-batch trigger) ব্যবহার করে ডেটা প্রসেস করতে পারে। এটি প্রতিটি নির্দিষ্ট সময়ে (যেমন প্রতি ১ সেকেন্ডে) বা অন্য কোনো শর্তে প্রসেসিং ট্রিগার করে।
  5. Watermarking: Structured Streaming ডেটার lateness হ্যান্ডেল করতে watermarking ফিচার ব্যবহার করে। এটি স্ট্রিমিং ডেটাতে বিলম্বিত ডেটা প্রসেস করার জন্য উপকারী।

Structured Streaming এর উদাহরণ

ধরা যাক, আপনি Kafka থেকে স্ট্রিমিং ডেটা পড়ছেন এবং এর উপর কিছু ট্রান্সফরমেশন এবং অ্যাগ্রিগেশন করছেন।

from pyspark.sql import SparkSession
from pyspark.sql.functions import expr

# SparkSession তৈরি
spark = SparkSession.builder.appName("Structured Streaming Example").getOrCreate()

# Kafka থেকে স্ট্রিমিং ডেটা পড়া
df = spark.readStream.format("kafka") \
    .option("kafka.bootstrap.servers", "localhost:9092") \
    .option("subscribe", "test_topic") \
    .load()

# Kafka value কে string এ রূপান্তর করা
df = df.selectExpr("CAST(value AS STRING)")

# কিছু ট্রান্সফরমেশন
word_count = df.groupBy("value").count()

# Output sink (console)
query = word_count.writeStream.outputMode("complete") \
    .format("console") \
    .start()

# স্ট্রিমিং প্রসেসিং চালানো
query.awaitTermination()

এখানে:

  • readStream ব্যবহার করে Kafka থেকে ডেটা পড়া হচ্ছে।
  • groupBy এবং count ফাংশন ব্যবহার করে স্ট্রিমিং ডেটার উপর অ্যাগ্রিগেশন করা হচ্ছে।
  • writeStream ব্যবহার করে ফলাফল কনসোলে লেখা হচ্ছে।

Spark Structured Streaming এবং Batch Processing

Structured Streaming এবং batch processing একে অপরের সাথে খুব ভালোভাবে কাজ করে। একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল যে, Structured Streaming এবং batch processing এর মধ্যে একক কোড ব্যবহার করা সম্ভব। ব্যবহারকারীরা একাধিক micro-batch নিয়ে কাজ করতে পারেন অথবা স্ট্রিমিং ডেটার উপর batch-style অপারেশন করতে পারেন।

Batch Processing এর সাথে সমন্বয়:

Structured Streaming-এর micro-batch মডেল batch processing এর মতো, যেখানে স্ট্রিমিং ডেটা একটি ছোট ব্যাচে প্রসেস হয়। এই micro-batch-এর আকার এবং ফ্রিকোয়েন্সি কাস্টমাইজ করা যেতে পারে।

df = spark.readStream.format("csv").option("path", "path/to/directory").load()

# ব্যাচে স্ট্রিমিং ডেটা প্রসেসিং
df.writeStream.outputMode("append").format("parquet").start("output_dir")

Fault Tolerance এবং Scalability

Structured Streaming স্বয়ংক্রিয়ভাবে fault tolerance এবং scalability প্রদান করে:

  • Checkpointing: স্ট্রিমিং ডেটা প্রসেস করার সময় স্টেট রিকভারি জন্য checkpointing ব্যবহৃত হয়। এটি নিশ্চিত করে যে যদি প্রসেসিং চলাকালীন কোনো সমস্যা হয়, তবে পুনরায় প্রক্রিয়া করা না হয়।
  • Stateful Processing: যখন স্ট্রিমিং ডেটাতে অ্যাগ্রিগেশন বা উইন্ডো অপারেশন করা হয়, তখন Spark সেই স্টেটটিকে প্ররোচিত করে এবং ডেটার আগের মানগুলি মনে রাখে।

Spark Structured Streaming এর সুবিধা:

  1. Unified Processing: Structured Streaming একটি ইউনিফাইড API প্রদান করে যা batch এবং stream ডেটা উভয়ই প্রসেস করতে সক্ষম।
  2. Fault Tolerance: ডেটার হারানো বা ভুল হয়ে গেলে সিস্টেমটি পুনরুদ্ধার করতে সক্ষম।
  3. Scalable: খুব বড় এবং ডিস্ট্রিবিউটেড ডেটাসেটের উপর দ্রুত কাজ করতে সক্ষম।
  4. Real-time Processing: রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য আদর্শ।

সারাংশ

Spark Structured Streaming হল একটি শক্তিশালী এবং দক্ষ প্ল্যাটফর্ম যা রিয়েল-টাইম ডেটা প্রসেসিংকে সহজ এবং স্কেলেবল করে তোলে। এটি একটি ইউনিফাইড API সরবরাহ করে যা batch এবং streaming উভয় প্রক্রিয়া সমর্থন করে এবং ডেটার উপর exactly-once সেমান্টিক্স প্রদান করে। এর মাধ্যমে ডেটা স্ট্রিমিং, অ্যানালাইসিস, এবং রিয়েল-টাইম ডেটা অ্যাগ্রিগেশন খুব সহজেই পরিচালিত হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...