对Spark的理解
2024-10-21 06:37:20
Spark作为一个新的分布式计算引擎正慢慢流行起来,越来越来的企业也准备用它的替换MapReduce,根据自己在工作的一些体会谈谈的优势。
分布式计算归根到底还是一个Map和Reduce操作,Map操作对每个数据块进行计算,Reduce操作对结果进行汇总,现在一些NoSQL分布式数据库其实也是这么一套计算框架,只是map和reduce太基础,太简陋,实现相关的业务时开发比较复杂,不符合生产力发展的需求,这样Spark对map和reduce进行了抽象和封装提出了RDD的概念
RDD的提出是Spark的最大的进步,它让我们不再关注计算本身,以前我们老想着map,reduce啥的,RDD对数据集进行抽象,我们的关注点变成了数据集本身,又借鉴了函数式编程的一些思想,我们可以对数据集做各种各样的操作(spark的transformation和action),Spark框架底层转换了map和reduce的操作,大大的提高了生成力。当然还加入了一些优化,比如map的输出不需要落地,其实要做大数据的计算怎么可能不落地。做大数据的聚集操作时磁盘和网络IO依旧是制约速度的主要原因
Spark提供了更加灵活的DAG编程模型,在spark,每一个RDD用来描述数据集的一个状态,而这个状态是从上一个状态转换过来的,因此RDD之间会形成一个依赖关系,这种RDD的依赖链会触发一个job,而job会被切分成一个stage的DAG图。给了job很大的优化空间,目前DAG减少了数据的读写(缓冲在内存中)和网络的传输(宽依赖和窄依赖),用于迭代和交互计算支持。 传统的mapreduce为了进行迭代计算,需要多个job进行依赖,数据要不停的在HDFS上进行读写,性能大大降低。
还一个优化就是Spark的作业调度。Spark的job是线程级别的,而spark sql中一个sql就是一个job, sql的执行轻量很多。hive的job是进程级别的,一个sql就是一个job,需要启动多个jvm进程。
最新文章
- Spring @Autowired注解在utils静态工具类
- linux mysql root密码重置
- 译\Node.js应用的持续部署
- [python实现设计模式]-1. 单例模式
- JQuery源码分析(六)
- jQuery mobile 核心功能
- 实现HTTP跳转到HTTPS
- ReentrantLock(重入锁)以及公平性
- ASP.NET MVC相关
- ABAP中的AMDP(ABAP-Managed Database Procedures )
- Servlet--取得初始化配置信息
- POJ2398【判断点在直线哪一侧+二分查找区间】
- centos 7 linux系统默认ftp安装配置和部署(详细讲解)
- Java中常见的排序方式-选择排序(升序)
- day11_雷神_udp、多进程等
- 64位JDK+tomcat6+myeclipse 10安装与配置
- 第一弹:超全Python学习资源整理(入门系列)
- 缓存数据库-redis数据类型和操作(string)
- TensorFlow 简单实例
- PWA web应用模型
热门文章
- 一文搞定 Git 相关概念和常用指令
- C++对C语言的拓展(3)—— 默认参数和占位参数
- Ant能干什么,编译?打包!
- bzoj 3505 [Cqoi2014]数三角形——排列组合
- Spring Boot基本配置
- 把Azure专线从Class模式迁移到ARM模式
- 蓝桥杯 算法训练 ALGO-149 5-2求指数
- pom.xm首行报错Failure to transfer org.codehaus.plexus:plexus-components:pom:1.1.20
- UE4材质初探
- 数据库:MySQL索引背后的数据结构及算法原理【转】