Spark Application as a Rest Service

Aug 31 2020

ฉันมีคำถามเกี่ยวกับการใช้งานแอปพลิเคชันจุดประกายเฉพาะ ดังนั้นฉันต้องการให้แอปพลิเคชัน Spark ของเราทำงานเป็นเซิร์ฟเวอร์ REST API เช่น Spring Boot Applications ดังนั้นจึงไม่ใช่กระบวนการแบทช์ แต่เราจะโหลดแอปพลิเคชันจากนั้นเราต้องการให้แอปพลิเคชันใช้งานได้ต่อไป (ไม่ต้องเรียก spark.close ()) และใช้แอปพลิเคชันเป็นเครื่องมือสืบค้นแบบเรียลไทม์ผ่าน API บางตัวที่เราจะกำหนด ฉันตั้งเป้าที่จะปรับใช้กับ Databricks ข้อเสนอแนะใด ๆ จะดี ฉันตรวจสอบ Apache Livy แล้ว แต่ไม่แน่ใจว่าจะเป็นตัวเลือกที่ดีหรือไม่

ข้อเสนอแนะใด ๆ จะเป็นประโยชน์

คำตอบ

2 OneCricketeer Aug 31 2020 at 20:31

Spark ไม่ได้ออกแบบมาให้ทำงานแบบนี้ ไม่มีเฟรมเวิร์กเซิร์ฟเวอร์ REST API นอกเหนือจาก HistoryServer และ Worker UI ในตัว

หากคุณต้องการแอ็คชั่น Spark ที่ใช้งานได้ยาวนานคุณสามารถใช้ Spark Streaming และออกการดำเนินการผ่านซ็อกเก็ตดิบ Kafka และอื่น ๆ แทนวิธี HTTP

1 vaquarkhan Aug 31 2020 at 21:20

คำถามที่ดีมาพูดคุยกันทีละขั้นตอน

  1. คุณสามารถสร้างได้และใช้งานได้ดีตัวอย่างต่อไปนี้:
  • https://github.com/vaquarkhan/springboot-microservice-apache-spark
  1. ฉันแน่ใจว่าคุณต้องคิดที่จะสร้าง 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 ()

  1. แอปพลิเคชัน Spring เป็นบริการขนาดเล็กคุณต้องการบริการอื่น ๆ ทั้งบนคอนเทนเนอร์หรือ PCF / Bluemix / AWS / Azure / GCP เป็นต้นและ Apache Spark มีโลกของตัวเองและต้องการพลังในการประมวลผลซึ่งไม่มีใน PCF

  2. Spark ไม่ใช่ฐานข้อมูลดังนั้นจึงไม่สามารถ "จัดเก็บข้อมูล" ได้ มันประมวลผลข้อมูลและจัดเก็บไว้ในหน่วยความจำชั่วคราว แต่นั่นไม่ใช่ที่เก็บข้อมูลถาวร

  3. เมื่อส่งงาน Spark คุณต้องรอผลระหว่างคุณไม่สามารถดึงข้อมูลได้

วิธีใช้ Spark กับแอปพลิเคชัน Spring เป็นการเรียก Rest API:

Apache Livy เป็นบริการที่ช่วยให้สามารถโต้ตอบกับ Spark คลัสเตอร์ผ่านอินเทอร์เฟซ REST ได้อย่างง่ายดาย ช่วยให้สามารถส่งงาน Spark หรือตัวอย่างโค้ด Spark การดึงผลลัพธ์แบบซิงโครนัสหรืออะซิงโครนัสรวมทั้งการจัดการ Spark Context ได้อย่างง่ายดายผ่านอินเทอร์เฟซ REST แบบธรรมดาหรือไลบรารีไคลเอ็นต์ RPC

  • https://livy.apache.org/