การแปลงสภาพด้วย Windowing ใน Spark Streaming



บล็อกโพสต์นี้กล่าวถึงการเปลี่ยนแปลงที่เป็นรัฐด้วยการกำหนดหน้าต่างใน Spark Streaming เรียนรู้ทั้งหมดเกี่ยวกับการติดตามข้อมูลระหว่างกลุ่มโดยใช้ D-Streams ที่มีสถานะครบถ้วน

สนับสนุนโดย Prithviraj Bose

ในบล็อกนี้เราจะพูดถึงแนวคิดเกี่ยวกับหน้าต่างของการเปลี่ยนแปลงสถานะของ Apache Spark





การเปลี่ยนแปลงสถานะคืออะไร?

สตรีมมิ่ง Spark ใช้สถาปัตยกรรมแบบไมโครแบตช์ที่ข้อมูลขาเข้าถูกจัดกลุ่มเป็นไมโครแบตช์ที่เรียกว่า Discretized Streams (DStreams) ซึ่งทำหน้าที่เป็นนามธรรมการเขียนโปรแกรมพื้นฐาน DStreams ภายในมี Resilient Distributed Datasets (RDD) และเป็นผลมาจากการแปลง RDD มาตรฐานและการดำเนินการนี้สามารถทำได้



ในการสตรีมหากเรามีกรณีการใช้งานเพื่อติดตามข้อมูลระหว่างแบทช์เราก็จำเป็นต้องมีสตรีม DStream ที่มีสถานะครบถ้วน

ตัวอย่างเช่นเราอาจติดตามการโต้ตอบของผู้ใช้ในเว็บไซต์ระหว่างเซสชันของผู้ใช้หรือเราอาจติดตามแฮชแท็ก twitter เฉพาะในช่วงเวลาหนึ่งและดูว่าผู้ใช้รายใดทั่วโลกกำลังพูดถึงเรื่องนี้

ประเภทของการเปลี่ยนแปลงสถานะเต็ม



DStream ที่เต็มไปด้วยสถานะมีสองประเภทคือการติดตามตามหน้าต่างและการติดตามเซสชันแบบเต็ม

สำหรับการติดตามสถานะข้อมูลขาเข้าทั้งหมดควรเปลี่ยนเป็นคู่คีย์ - ค่าเพื่อให้สามารถติดตามสถานะคีย์ข้ามแบตช์ได้ นี่เป็นเงื่อนไขเบื้องต้น

นอกจากนี้เราควรเปิดใช้งานการตรวจสอบซึ่งเป็นแนวคิดที่เราจะพูดถึงในบล็อกต่อไป

> การติดตามตามหน้าต่าง

ในการติดตามตามหน้าต่างกลุ่มที่เข้ามาจะถูกจัดกลุ่มตามช่วงเวลานั่นคือกลุ่มแบตช์ทุกๆ 'x' วินาที การคำนวณเพิ่มเติมเกี่ยวกับแบทช์เหล่านี้ทำได้โดยใช้ช่วงเวลาสไลด์

java ผนวกทำอะไร

ตัวอย่างเช่นถ้าช่วงเวลาของหน้าต่าง = 3 วินาทีและช่วงเวลาสไลด์ = 2 วินาทีข้อมูลที่เข้ามาทั้งหมดจะถูกจัดกลุ่มเป็นกลุ่มทุกๆ 3 วินาทีและการคำนวณในแบทช์เหล่านี้จะเกิดขึ้นทุกๆ 2 วินาที หรือเราสามารถพูดได้ว่าทำการคำนวณทุกๆ 2 วินาทีในแบทช์ที่มาถึงในช่วง 3 วินาทีที่ผ่านมา

spark-streaming-dstream-window

ในแผนภาพด้านบนเราจะเห็นว่ากลุ่มงานที่เข้ามาจะถูกจัดกลุ่มทุกๆ 3 หน่วยของเวลา (ช่วงเวลาหน้าต่าง) และการคำนวณจะทำทุกๆ 2 หน่วยของเวลา (ช่วงเวลาสไลด์)
หมายเหตุ: แตกต่างจาก Apache Flink Apache Spark ไม่มีแนวคิดเรื่องหน้าต่างไม้ลอยหน้าต่างทั้งหมดจะเลื่อน

ไฟ

API ยอดนิยมสำหรับการแปลงตามหน้าต่างคือ

PairDStreamFunctions.reduceByKeyAndWindow .

API นี้มีหลายเวอร์ชันที่ใช้งานมากเกินไปเรามาดูเวอร์ชันที่มีพารามิเตอร์จำนวนมากที่สุด หลังจากคำอธิบายนี้ส่วนที่เหลือของ API นี้ควรอธิบายด้วยตนเอง

ผลตอบแทน: DStream ที่เปลี่ยนรูปแล้ว [(K, V)]

ลดความสนุก : ฟังก์ชันลดการเชื่อมโยง

invReduceFunc : ค่าผกผันของฟังก์ชันลดข้างต้น สิ่งนี้จำเป็นสำหรับการคำนวณแบตช์ขาเข้าและขาออกอย่างมีประสิทธิภาพ ด้วยความช่วยเหลือของฟังก์ชันนี้ค่าของชุดงานที่ส่งออกจะถูกหักออกจากมูลค่าสะสมของฟังก์ชันลดข้างต้น ตัวอย่างเช่นหากเรากำลังคำนวณผลรวมของค่าขาเข้าสำหรับคีย์ที่เกี่ยวข้องจากนั้นสำหรับแบตช์ขาออกเราจะลบค่าสำหรับคีย์ที่เกี่ยวข้อง (หากมีอยู่ในแบตช์ปัจจุบันอื่นจะไม่สนใจ)

windowDuration : หน่วยของเวลาในการจัดกลุ่มแบตช์ซึ่งควรเป็นหลายช่วงของช่วงแบตช์

slideDuration : หน่วยเวลาในการคำนวณค่านี้ควรเป็นผลคูณของช่วงเวลาแบทช์ พาร์ติชัน : ตัวแบ่งพาร์ติชันที่จะใช้สำหรับเก็บ DStream ที่เป็นผลลัพธ์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแบ่งพาร์ติชันอ่าน นี้ .

filterFunc : ฟังก์ชั่นกรองคู่คีย์ - ค่าที่หมดอายุเช่นหากเราไม่ได้รับการอัปเดตสำหรับคีย์ในบางครั้งเราอาจต้องการลบออก

นี่คือไฟล์ โปรแกรม เพื่อนับคำที่มาจากซ็อกเก็ตสตรีม เราได้ใช้ฟังก์ชันข้างต้นในเวอร์ชันที่โอเวอร์โหลดโดยมีช่วงหน้าต่าง 4 วินาทีและช่วงเวลาสไลด์ 2 วินาที

ในบล็อกถัดไปฉันจะเขียนเกี่ยวกับการติดตามและตรวจสอบเซสชันแบบเต็ม

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป

กระทู้ที่เกี่ยวข้อง:

กระจายแคชด้วยตัวแปรการออกอากาศ