Spark深入第一步DAGScheduler

来源:互联网 发布:什么是网络存储 编辑:程序博客网 时间:2024/05/21 00:56
在Spark集群上运行wordcount程序
spark-shell --master spark://s600:7077

def textFile(
    path: String,
    minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
assertNotStopped()
hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
minPartitions).map(pair => pair._2.toString).setName(path)
  }
  
SparkConf类的作用:
设置Spark环境的配置,使用build模式,返回对象自身;

SparkContext
AtomicBoolean使用原子类型保证线程安全;

assertNotStopped(); //断定系统当前没有关闭;


SparkContext对象构建过程:
spark.driver.allowMultipleContexts:允许多个Spark上下文默认是false;
val listenerBus = new LiveListenerBus(this);//创建一个Spark事件的监听总线
val executorEnvs = HashMap[String, String]();//将环境变量存储在HashMap结构中传给Executor
val sparkUser = Utils.getCurrentUserName();
_conf.contains("spark.master");//是否设置master
_conf.contains("spark.app.name");//是否设置App的名字
判断Master是否是yarn节点;


SparkContext的textFile(path: String)方法说明:
hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions).map(pair => pair._2.toString).setName(path)
hadoopFile()参数说明;
path:文件路径
InputFormatClass:输入格式类 
keyClass:
valueClass:
minPartitions:最小分区数目

DAGScheduler:有向无环图调度器
为每个作业计算阶段有向无环图,DAGScheduler以来TaskScheduler类;
在DAGScheduler中有几个关键概念:
Jobs:由ActiveJob类实现,在DAGScheduler中运行的job分为result job和map-stage job;
提交给调度器的顶层工作项
Stages:任务集合,由Stage类具体实现,Stages分为ResultStage和ShuffleMapStage;
如果Jobs重用相同的RDDs,则它们之间可以共享同一个Stages;
Task:
Cache tracking: 避免重复计算,
Preferred Locations:DAGScheduler为每个Stage中task计算所在运行的位置基于RDDs
Cleanup:清理所有数据结构在依赖这些数据结构的running jobs结束;

TaskScheduler是底层的任务调度接口,由TaskSchedulerImpl实现;针对单独SparkContext进行任务调度;
DAGScheduler为每个Stages传送任务集给schedulers去调度。schedulers负责将任务传送给集群,并运行
和错误重试;最后结果收集并返回events给DAGScheduler
0 0
原创粉丝点击