构建交互式Spark服务的REST作业服务器

需积分: 5 2 下载量 148 浏览量 更新于2024-07-19 收藏 3.61MB PDF 举报
本文档探讨了构建一个用于交互式Spark as a Service的REST Job Server的过程。该服务器旨在提供一种便捷的方式,使用户能够在任何地方轻松访问Spark环境,支持多种编程语言(如Scala、Java、Python和R),并且独立于Hue平台。以下是主要讨论点: 1. **需求背景**: - 需求推动因素:由于Spark Notebook的流行,以及远程协作和共享Spark上下文和RDD的需求,构建一个服务化的Spark解决方案变得必要。 - 功能目标:提供易用的访问方式,允许用户提交交互式Shell会话或批处理作业。 2. **历史演进**: - **V1: Oozie**: - 初始尝试是通过Oozie进行Spark作业调度,它支持提交和监控,但速度较慢且局限于批处理作业,不支持交互式Shell。 - 优点:提交和控制简单,缺点是缺乏交互式功能和对Python、R的支持,且安全性方面有局限性。 - **V2: Spark Igniter**: - 进一步的改进,提供了编译器支持和更安全的批处理作业,但仅限于Scala,且不支持Python和R。 - 优点:提高了性能和安全性,缺点是功能较为有限。 - **V3: Notebook**: - Spark Notebook引入了类似`spark-submit`和Spark Shell的功能,支持Scala、Python和R,以及jar包和批处理作业,但当时仍处于beta阶段。 - 亮点:提供了更丰富的交互体验,但可能存在不稳定性和扩展性挑战。 3. **现代解决方案:Livy + Spark Server**: - **Livy**:是现代架构的核心,它是一个基于REST API的交互式Spark执行服务,允许跨语言(Scala、Java、Python和R)的作业提交和管理。 - **Spark Server**: - 实现了一个Scala编写的RESTful web服务器,专注于接收Spark作业请求,包括交互式Shell会话和批处理作业。 - 优势:提供统一的接口,无需依赖Hue,增强了灵活性和兼容性。 - 架构组件: - Livy作为核心服务,负责执行Spark任务并返回结果。 - Spark Server作为前端,与用户交互并调用Livy API。 - YARN(Yet Another Resource Negotiator)作为资源管理系统,确保Spark任务在集群上高效运行。 总结: 构建一个REST Job Server是为了满足用户对灵活、跨语言的Spark访问需求,尤其在分布式环境下。Livy的引入极大地简化了交互式Spark服务的部署和使用,使得Spark不仅仅局限于批处理,还可以支持实时分析和开发。通过与Spark Server集成,用户可以在任何地方使用多种编程语言进行数据处理和开发,提升了Spark as a Service的整体用户体验和生产力。