Apache Spark版本迭代速度很快,但是基本框架和经典组件保持这统一模式,所以学习Spark源码,我选择的是Apache Spark-1.0.0版本,通过分析几个主要模块的工作原理,理解Spark的运行过程。
通过LocalWordCount程序,调试Spark源码:
LocalWordCount首先通过SparkConf设置Master和AppName,然后以SparkConf为参数实例化SparkContext,通过SparkContext读取本地文件,分割文本计算单词数量,最后打印结果。
package org.apache.spark.examples import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ object LocalWordCount { def main(args: Array[String]) = { val sparkConf = new SparkConf().setMaster("local").setAppName("Local Word Count") val sc = new SparkContext(sparkConf) val file = sc.textFile("README.md") val count = file.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) count foreach println } }
Apache Spark源码编译并导入Intellij IDEA,请参见:http://8liang.cn/intellij-idea-spark-development/
参考@JerryLead绘制的Spark-0.7架构图,Apache Spark整体上可以分为四个模块:Scheduler、RDD、Deploy和Storage,以及一些其他的小组件。
- Scheduler:资源调度
- RDD:操作运算
- Deploy:部署方式
- Storage:数据存储
Spark采用Master-Slave结构,Master和Slave之间以及各子模块之间的通信,采用Scala Actor的方式。
END
时间: 2024-10-04 23:50:52