标签(空格分隔): Spark


还记得上次的wordCount程序嘛?通过这个小程序,我们来一窥Spark的框架是什么样子的。

sc.textFile("/usr/local/Cellar/apache-spark/1.3.0/README.md").flatMap(line => line.split(" ")).map(w => (w, 1)).reduceByKey(_+_).foreach(println)

整个单词统计的过程可以分为4个阶段:1)读取文件;2)单词分割;3)单词计数;4)单词归并。前三步都是非常容易并行的,但最后一步的并行度并不是很高。

RDD

将上面的单词计数操作用另一种形式表示:

Data1 ---Operation1---> Data2 ---Operation2---> Data3 ...... -->DataN

所以,整个过程其实就是在不断的进行数据输入和数据处理。

RDD(Resilient Distributed Dataset),弹性分布式数据集,用来包装数据输入和数据处理,其主要特点是:

  • 数据全集被分割为多个正相交的子集,每个子集可以被派发到任一计算节点进行处理;
  • 计算的中间结果会被保存。出于可靠性,同一个计算结果会被保存于多个计算节点;
  • 如果其中某一数据子集在处理中出现问题,针对该子集的处理会被重新调度进而重新处理。

Operation

Operation有两种类型:TransformationAction

  • Transformation是领取任务的过程;
  • Action则是真正触发执行的过程。

Spark的运行框架

1. 作业提交

Spark在接收到提交的作业后,会进行如下处理:

  • RDD之间的依赖性分析。RDD之间形成一个有向无环图,这个依赖关系的分析和判断由DAGScheduler负责;
  • 根据DAG的分析结果将一个作业分成多个Stage。划分Stage的一个主要依据就是当前的计算因子输入是否是确定的,如果是则划分在一个Stage中;
  • DAGScheduler确定完Stage之后,会向TaskScheduler提交任务集,而TaskScheduler负责将这些任务一一分到集群的计算节点。

2. 集群节点的构成

Spark集群由4个节点构成:Driver, Master, Worker, Executor.

最新文章

  1. [Android] 怎么在应用中实现密码隐藏?
  2. C++/C互相调用
  3. MVVM开源框架Knot.js 教程1 - CBS初步
  4. hadoop中常见的问题
  5. BZOJ4282 : 慎二的随机数列
  6. git-svn
  7. DotNetBar v12.7.0.10 Fully Cracked
  8. LightOj 1096 - nth Term (矩阵快速幂,简单)
  9. [改善Java代码]不要在finally块中处理返回值
  10. 使用JDBC连接数据库
  11. UpdateModel方法
  12. javascript中break和continue的区别
  13. angularjs+webapi2 跨域Basic 认证授权(二)
  14. Git Gerrit使用
  15. 深入理解虚拟机之Java内存区域
  16. 使用ODP.NET连接Oracle数据库
  17. nginx 卸载后重新安装/etc/nginx配置文件没了,cannot open /etc/nginx/nginx.conf (No such file or directory)
  18. python接口自动化测试二十六:使用pymysql模块链接数据库
  19. Spring 学习——Aware接口
  20. 4.3 C++虚成员函数表vtable

热门文章

  1. awk sed 总结
  2. java 读写文件
  3. 【CSS 杂记】
  4. visio任意角度精确旋转图形
  5. 关于dll的一点收获
  6. ARM 开发工具 Keil和DS-5的比较。
  7. Linux命令集合
  8. Add&Delete WindowService
  9. 转-- js(jQuery)获取时间的方法及常用时间类
  10. android studio ndk配置和ndk开发