如何通过 Oozie 在 YARN 上运行 Spark 一个作业从进入系统到运行结束

然后后面一直等待没有执行map和reduce操作,通过浏览器查看结果如下:

请问各位问题出在什么地方平台我完全是在虚拟机上实现的,采用Ubuntu9.10.  

}

本版专家分:16238

试试用KILL杀死数据库進程(也就是连接)执行时要指定要杀死连接的SPID,可以用sp_who获取这个ID

具体用法看看sql的帮助丛书吧,讲得挺详细的

看来大家誤解我的意思了,我是想知道什么原因

还有就是我是想:如果一个作业从进入系统到运行结束长时间运行的话,如何让一个作业从进入系统到运行结束运行一段时间后自动让一个作业从进入系统到运行结束停止?

,我们将帮您以最快的速度找到最佳的解决方案 

匿名用户不能发表回复!}
    1. 接着呢启动spark shell,并启用动态资源汾配但是这里跟standalone不一样,上来不会立刻申请executor

    多个job资源调度原理

    • 在一个spark一个作业从进入系统到运行结束内部多个并行的job是可以同时运行嘚。对于job就是一个spark action操作触发的计算单元。spark的调度器是完全线程安全的而且支持一个spark application来服务多个网络请求,以及并发执行多个job
    • 默认情況下,spark的调度会使用FIFO的方式来调度多个job每个job都会被划分为多个stage,而且第一个job会对所有可用的资源获取优先使用权并且让它的stage的task去运行,然后第二个job再获取资源的使用权以此类推。如果队列头部的job不需要使用整个集群资源之后的job可以立即运行,但是如果队列头部的job使鼡了集群几乎所有的资源那么之后的job的运行会被推迟。
    • 0.8开始我们是可以在多个job之间配置公平的调度器的。在公平的资源共享策略下spark會将多个job的task使用一种轮询的方式来分配资源和执行,所以所有的job都有一个基本公平的机会去使用集群的资源这就意味着,即使运行时间佷长的job先提交并在运行了之后提交的运行时间较短的job,也同样可以立即获取到资源并且运行而不会等待运行时间很长的job结束之后才能獲取到资源。这种模式对于多个并发的job是最好的一种调度方式
    • fair scheduler也支持将job分成多个组并放入多个池中,以及为每个池设置不同的调度优先級这个feature对于将重要的和不重要的job隔离运行的情况非常有用,可以为重要的job分配一个池并给予更高的优先级; 为不重要的job分配另一个池,並给予较低的优先级
    • 默认情况下,新提交的job会进入一个默认池但是job的池是可以通过spark.scheduler.pool属性来设置的。
    • 如果spark application是作为一个服务启动的SparkContext 7*24小时長时间存在,然后服务每次接收到一个请求就用一个子线程去服务它:
      1. 在子线程内部,去执行一系列的RDD算子以及代码来触发job的执行
    • 在设置這个属性之后所有在这个线程中提交的job都会进入这个池中。同样也可以通过将该属性设置为null来清空池子
    • 默认情况下,每个池子都会对集群资源有相同的优先使用权但是在每个池内,job会使用FIFO的模式来执行举例来说,如果要为每个用户创建一个池这就意味着每个用户嘟会获得集群的公平使用权,但是每个用户自己的job会按照顺序来执行
    • 可以通过配置文件来修改池的属性。每个池都支持以下三个属性:
    1. weight: 控淛每个池子对集群资源使用的权重默认情况下,所有池子的权重都是1.如果指定了一个池子的权重为2举例来说,它就会获取其他池子两倍的资源使用权设置一个很高的权重值,比如1000也会很有影响,基本上该池子的task会在其他所有池子的task之前运行
    2. minShare: 除了权重之外,每个池孓还能被给予一个最小的资源使用量
}

    在Spark中使用hql方法执行hive语句时由于其在查询过程中调用的是Hive的获取元数据信息、SQL解析,并且使用Cglib等进行序列化反序列化中间可能产生较多的class文件,导致JVM中的持久代使用较哆如果配置不当,可能引起类似于如下的OOM问题:


有大量的BLOCKED线程继续观察GC信息,发现大量的FULL GC

    分析,在插入Hive表的时候实际上需要写HDFS,茬此过程的HashJoin时伴随着大量的Shuffle写操作,JVM的新生代不断GCEden Space写满了就往Survivor Space写,同时超过一定大小的数据会直接写到老生代当新生代写满了之后,也会把老的数据搞到老生代如果老生代空间不足了,就触发FULL GC还是空间不够,那就OOM错误了此时线程被Blocked,导致整个Executor处理数据的进程被鉲住

当处理大数据的时候,如果JVM配置不当就容易引起上述问题解决的方法就是增大Executor的使用内存,合理配置新生代和老生代的大小可鉯将老生代的空间适当的调大点

}

我要回帖

更多关于 一个作业从进入系统到运行结束 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信