分享

Spark 作业调度--job执行方式介绍

hyj 2014-5-4 18:45:25 发表于 介绍解说 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 118224
提示: 作者被禁止或删除 内容自动屏蔽

已有(6)人评论

跳转到指定楼层
关键先生 发表于 2015-12-4 21:55:55
楼主你好~
我现在有点迷糊,请看如下代码:
[mw_shl_code=scala,true]object JobScheduling {
    def main(args: Array[String]) {

//        System.setProperty("spark.scheduler.mode", "FAIR")
        val conf = new SparkConf().setAppName("BaseLineDemo").setMaster("local
  • ")
            val sc = new SparkContext(conf)

            val ssc = new StreamingContext(sc, Seconds(5))
            ssc.checkpoint("/tmp/checkpoint")

            // 通过TCP连接本机7788端口 获得输入流
            val logs = ssc.receiverStream(new UdpReceiver(9514, "UTF-8"))

            logs.foreachRDD(rdd =>{
                rdd.foreach(event => {
                    // action-1
                    println(s"---------------${event}")
                    Thread.sleep(100)
                })
            })
            logs.foreachRDD(rdd =>{
                // action-2
                rdd.foreach(event => {
                    println(s"+++++++++++++++${event}")
                })
            })

            ssc.start()
            ssc.awaitTermination()

        }
    }[/mw_shl_code]

    action-1  action-2  应该就是两个job。那么这两个job是串行执行的 还是并行执行的?

    另:
        在每个Spark应用中,由不同线程提交的多个“jobs”(Spark actions)可以同时运行。
    在spark中怎么使用多线程提交jobs? 使用 sparkContent.runJob 么? 能否给个例子??
  • 回复

    使用道具 举报

    nextuser 发表于 2015-12-5 22:47:49
    关键先生 发表于 2015-12-4 21:55
    楼主你好~
    我现在有点迷糊,请看如下代码:
    [mw_shl_code=scala,true]object JobScheduling {

    spark internal - 作业调度
    http://www.aboutyun.com/thread-8727-1-1.html




    回复

    使用道具 举报

    regan 发表于 2015-12-7 13:20:43
    关键先生 发表于 2015-12-4 21:55
    楼主你好~
    我现在有点迷糊,请看如下代码:
    [mw_shl_code=scala,true]object JobScheduling {

    action-1,action-2的确是两个不同的job,当action触发时将会提交job,这两个job的运行将在调度模式下依次执行,即串先行执行。执行的顺序具体看你配置的job调度策略,默认为FIFO,也可以配置成公平调度策略,在公平调度策略中可配置job执行的权重,权重越大越优先执行。每一个job提交后将会划分stage,每个stage中会有多个任务,每个stage中的任务在worker节点在线程池中并行处理。


    回复

    使用道具 举报

    regan 发表于 2015-12-7 13:24:06
    关键先生 发表于 2015-12-4 21:55
    楼主你好~
    我现在有点迷糊,请看如下代码:
    [mw_shl_code=scala,true]object JobScheduling {

    在多个线程中可以提交job,但是提交的job到spark集群中也是遵守调度规则的,即每一个job也是顺序执行的。
    回复

    使用道具 举报

    regan 发表于 2015-12-7 13:33:37
    关键先生 发表于 2015-12-4 21:55
    楼主你好~
    我现在有点迷糊,请看如下代码:
    [mw_shl_code=scala,true]object JobScheduling {

    比如说你要在10个线程中提交Job,像下面一样
    for(i <- 1 to 10){
      val thread:Thread = new Thread(new Runnable {
        override def run(): Unit = {
          logs.foreachRDD(rdd =>{
            rdd.foreach(event => {
              // action-1
              println(s"---------------${event}")
              Thread.sleep(100)
            })
          })
        }
      })
      thread.start()
    }
    你可以把rdd的treasaction和actoin操作,包装一下,成为一个Runnable,在runnable中去写每一个线程要执行的作业,当actin触发的时候,每一个线程的actin操作都将触发job的提交,形成多个job的提交,提交的多个job会根据你的调度策略进行作业的调度。

    回复

    使用道具 举报

    邓立辉 发表于 2016-3-1 21:53:16
    Spark Streaming可以用公平调度策略么?
    比如某个时间窗口的数据处理耗时长,先达到了,但是因为耗时长,后来的时间窗口数据耗时短,还的等之前的处理完,才会处理短的。怎么让短的也立即被处理?
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐上一条 /2 下一条