Spark Application as a Rest Service
ฉันมีคำถามเกี่ยวกับการใช้งานแอปพลิเคชันจุดประกายเฉพาะ ดังนั้นฉันต้องการให้แอปพลิเคชัน Spark ของเราทำงานเป็นเซิร์ฟเวอร์ REST API เช่น Spring Boot Applications ดังนั้นจึงไม่ใช่กระบวนการแบทช์ แต่เราจะโหลดแอปพลิเคชันจากนั้นเราต้องการให้แอปพลิเคชันใช้งานได้ต่อไป (ไม่ต้องเรียก spark.close ()) และใช้แอปพลิเคชันเป็นเครื่องมือสืบค้นแบบเรียลไทม์ผ่าน API บางตัวที่เราจะกำหนด ฉันตั้งเป้าที่จะปรับใช้กับ Databricks ข้อเสนอแนะใด ๆ จะดี ฉันตรวจสอบ Apache Livy แล้ว แต่ไม่แน่ใจว่าจะเป็นตัวเลือกที่ดีหรือไม่
ข้อเสนอแนะใด ๆ จะเป็นประโยชน์
คำตอบ
Spark ไม่ได้ออกแบบมาให้ทำงานแบบนี้ ไม่มีเฟรมเวิร์กเซิร์ฟเวอร์ REST API นอกเหนือจาก HistoryServer และ Worker UI ในตัว
หากคุณต้องการแอ็คชั่น Spark ที่ใช้งานได้ยาวนานคุณสามารถใช้ Spark Streaming และออกการดำเนินการผ่านซ็อกเก็ตดิบ Kafka และอื่น ๆ แทนวิธี HTTP
คำถามที่ดีมาพูดคุยกันทีละขั้นตอน
- คุณสามารถสร้างได้และใช้งานได้ดีตัวอย่างต่อไปนี้:
- https://github.com/vaquarkhan/springboot-microservice-apache-spark
- ฉันแน่ใจว่าคุณต้องคิดที่จะสร้าง Dataset หรือ Data frame และเก็บไว้ในหน่วยความจำและใช้เป็น Cache (Redis, Gemfire ฯลฯ ) แต่นี่คือสิ่งที่จับได้
i) หากคุณมีข้อมูลเพียงไม่กี่ 100k คุณก็ไม่จำเป็นต้องใช้แอป Apache Spark power Java นั้นดีที่จะตอบสนองอย่างรวดเร็ว
ii) หากคุณมีข้อมูลเป็นเพตะไบต์การโหลดลงในหน่วยความจำเป็นชุดข้อมูลหรือกรอบข้อมูลจะไม่ช่วยเนื่องจาก Apache Spark ไม่รองรับการจัดทำดัชนีเนื่องจาก Spark ไม่ใช่ระบบจัดการข้อมูล แต่เป็นระบบประมวลผลข้อมูลแบบแบตช์ที่รวดเร็วและ Gemfire คุณมีความยืดหยุ่นในการ เพิ่มดัชนีเพื่อดึงข้อมูลอย่างรวดเร็ว
ทำงานรอบ:
ใช้ Apache Ignite ของ (https://ignite.apache.org/) ดัชนีในหน่วยความจำ (อ้างอิง Fast Apache Spark SQL Queries)
การใช้รูปแบบข้อมูลที่รองรับการจัดทำดัชนีเช่น ORC, Parquet เป็นต้น
ทำไมไม่ใช้แอปพลิเคชัน Sparing กับ Apache Spark โดยไม่ใช้ spark.close ()
แอปพลิเคชัน Spring เป็นบริการขนาดเล็กคุณต้องการบริการอื่น ๆ ทั้งบนคอนเทนเนอร์หรือ PCF / Bluemix / AWS / Azure / GCP เป็นต้นและ Apache Spark มีโลกของตัวเองและต้องการพลังในการประมวลผลซึ่งไม่มีใน PCF
Spark ไม่ใช่ฐานข้อมูลดังนั้นจึงไม่สามารถ "จัดเก็บข้อมูล" ได้ มันประมวลผลข้อมูลและจัดเก็บไว้ในหน่วยความจำชั่วคราว แต่นั่นไม่ใช่ที่เก็บข้อมูลถาวร
เมื่อส่งงาน Spark คุณต้องรอผลระหว่างคุณไม่สามารถดึงข้อมูลได้
วิธีใช้ Spark กับแอปพลิเคชัน Spring เป็นการเรียก Rest API:
Apache Livy เป็นบริการที่ช่วยให้สามารถโต้ตอบกับ Spark คลัสเตอร์ผ่านอินเทอร์เฟซ REST ได้อย่างง่ายดาย ช่วยให้สามารถส่งงาน Spark หรือตัวอย่างโค้ด Spark การดึงผลลัพธ์แบบซิงโครนัสหรืออะซิงโครนัสรวมทั้งการจัดการ Spark Context ได้อย่างง่ายดายผ่านอินเทอร์เฟซ REST แบบธรรมดาหรือไลบรารีไคลเอ็นต์ RPC
- https://livy.apache.org/