Spark job server是一个基于Spark的服务系统,提供了管理SparkJob,context,jar的RestFul接口。

专注标注原文链接 http://www.cnblogs.com/shenh062326/p/6193375.html

使用说明

参考 http://debugo.com/spark-jobserver/

原理介绍

服务端JobServer首先启动,它会启动一个名叫WebApi的HttpService服务,它提供下面这几个Routes

val myRoutes = cors {
binaryRoutes ~ jarRoutes ~ contextRoutes ~ jobRoutes ~
dataRoutes ~ healthzRoutes ~ otherRoutes
}

可以看到,spark job server支持二进制,jar,context,job,data,health,和其他这几类服务。用户发送http请求到服务端后,WebApi会调用相应的routes。这里我将介绍两个最主要的Routes,分别是contextRoutes和jobRoutes。

contextRoutes

在contextRoutes的处理增加context(一个context对应一个SparkContext)逻辑中,会发送AddContext消息给LocalContextSupervisorActor(看起来当前只支持spark client模式), LocalContextSupervisorActor首先会判断contextName是否已经存在,如果存在则抛异常。否则创建context。(支持多个sparkcontext,代码中设置了spark.driver.allowMultipleContexts=true, 虽然spark不禁止使用多个sparkcontext,但可能会出问题,因为spark源码中很多地方的假定都是基于sparkcontext,比如共享内存,thread local变量,许多全局的标识。SPARK-2243例子中出现的情况是一个spark job结束后另外一个spark streaming job也失败)。多个SparkContext会以存在HashMap中。

另外contextRoutes还提供了删除和更新(先删除后增加)context的功能。

jobRoutes

jobRoutes最主要的功能是提交 job,如果提交job时指定了context,spark job server会把job运行在相应的context中;通过没有指定,spark job server则会启动一个临时的context运行job。spark job server运行job时会调用用户代码中的validate方法验证输入,然后调用用户代码中的runjob执行作业的逻辑,同时把context传递给用户代码。

jobRoutes还提供了查询job信息,kill job等功能。

Spark Job Server的优缺点总结
优点:
提供了restful接口;能管理job,context,jar等功能;方便用户重用context,cache的数据。

缺陷

1 用户编写程序需要基于spark job server提供的接口,参考LongPiJob,继承于api.SparkJob。缺点:用户既要操作spark原生的接口,又要继承spark job server的SparkJob接口。

2 一个JVM启动多个SparkContext,可能会出问题。现在spark job Server的做法是忽略这种问题。

3 同一个jvm内启动多个sparkcontext,即使不出错,也可能会出现多个sparkcontext相互影响,如内存,网络(boardCast,getMapOutStatus,collect等)磁盘。需要提供类似接入层的逻辑,启动多个机器运行sparkContext。

虽然存在一些问题,但spark job server向人们提供了一种操作spark context和job的方式,值得我们在构建spark应用平台时借鉴。

Spark job server原理初探的更多相关文章

  1. 【转】Spark History Server 架构原理介绍

    [From]https://blog.csdn.net/u013332124/article/details/88350345 Spark History Server 是spark内置的一个http ...

  2. Spark History Server配置使用

    Spark history Server产生背景 以standalone运行模式为例,在运行Spark Application的时候,Spark会提供一个WEBUI列出应用程序的运行时信息:但该WEB ...

  3. Spark学习笔记-使用Spark History Server

    在运行Spark应用程序的时候,driver会提供一个webUI给出应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口,也就是 说,Spark应用程序运行完后,将无法查看应用程序的历史记 ...

  4. 4.Apache Spark的工作原理

    Apache Spark的工作原理 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...

  5. MXNet之ps-lite及parameter server原理

    MXNet之ps-lite及parameter server原理 ps-lite框架是DMLC组自行实现的parameter server通信框架,是DMLC其他项目的核心,例如其深度学习框架MXNE ...

  6. Python源代码剖析笔记3-Python运行原理初探

    Python源代码剖析笔记3-Python执行原理初探 本文简书地址:http://www.jianshu.com/p/03af86845c95 之前写了几篇源代码剖析笔记,然而慢慢觉得没有从一个宏观 ...

  7. [Spark性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

    本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质 ...

  8. Spark生态以及原理

    spark 生态及运行原理 Spark 特点 运行速度快 => Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算.官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapR ...

  9. Spark Scheduler内部原理剖析

    文章正文 通过文章“Spark 核心概念RDD”我们知道,Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度.Spark的任务调度 ...

随机推荐

  1. python 2 如何安装 MySQL 数据库操作库

    我试了好几种网上的办法,在 windows 10 VS2017 环境下不是缺了头文件,就是缺 .lib,反正十分繁琐,以后我也懒得搞了,都用 annaconda 来搞定就好了,时间宝贵. 在 控制台中 ...

  2. Python中__new__()方法的使用和实例化

    new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...

  3. Codeforces 388 D. Fox and Perfect Sets

    $ >Codeforces \space 388 D.  Fox and Perfect Sets<$ 题目大意 : 定义一个完美的集合 \(S\) ,当且仅当 \(S\) 非负非空,且 ...

  4. Week Two

    2018.12.3: 1.[BZOJ 4819] 2.[BZOJ 4827] 3.[P1919] 4.[FFT模板] 2018.12.4: 1.[NTT] 2.[MTT(CRT)] 3.[MTT(my ...

  5. Centos 右上角面板里没有wired network图标的问题

    开了很多的网页查看解决这个问题,都不是很有效,最后很简单的改了下一个文件就ok了,自己记录下,以免忘记! 打入命令:sudo gedit /etc/NetworkManager/nm-system-s ...

  6. 74.Interesting Sequence(有趣的数列)(拓扑排序)

    Interesting Sequence(有趣的数列)[Special judge] 题目概述:是否存在一个长度为n的整数数列,其任意连续p项之和为正数而任意连续q项之和为负数? 方法:连续项a[i] ...

  7. java_es

    在查询时过滤掉指定的"_id"的数据 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();// 对 ...

  8. Educational Codeforces Round 12 C. Simple Strings 贪心

    C. Simple Strings 题目连接: http://www.codeforces.com/contest/665/problem/C Description zscoder loves si ...

  9. Codeforces Beta Round #7 C. Line Exgcd

    C. Line 题目连接: http://www.codeforces.com/contest/7/problem/C Description A line on the plane is descr ...

  10. hihocoder编程收割赛20

    hihocoder编程收割赛20 hihocoder1542 : 无根数变有根树 hihocoder1542 思路: 树的遍历 ac代码: // hihocompete20_01.cpp : 定义控制 ...