1.前言

Spark是基于内存的计算,而Hadoop是基于磁盘的计算;Spark是一种内存计算技术。

但是事实上,不光Spark是内存计算,Hadoop其实也是内存计算。

Spark和Hadoop的根本差异是多个任务之间的数据通信问题:Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘。

Spark SQL比Hadoop Hive快,是有一定条件的,而且不是Spark SQL的引擎一定比Hive的引擎快,相反,Hive的HQL引擎还比Spark SQL的引擎更快。

2.内存计算技术

内存计算技术是指将数据持久化至内存RAM中进行加工处理的技术。Spark并不支持将数据持久化至内存中,我们通常所说的是spark的数据缓存技术,如将RDD数据缓存至内存,但并没有实现持久化。缓存数据是可以擦除的,擦除后同样是需要我们重新计算的。Spark的数据处理是在内存中进行的,这话并没有错,其实当前的所有操作系统的数据处理都是在内存中进行的。所以,这内存计算并不是Spark的特性。

Spark是允许我们利用缓存技术和LRU算法缓存数据的。Spark的所有运算并不是全部都在内存中,当shuffle发生的时候,数据同样是需要写入磁盘的。所以,Spark并不是基于内存的技术,而是使用了缓存机制的技术。

3. 那Spark主要快在哪里呢?

Spark最引以为豪的就是官网介绍的经典案例。这个案例是逻辑回归机器学习算法,该算法主要特征是对同一份数据的反复迭代运算。Spark是内存缓存,所以数据只加载一次,Hadoop则需要反复加载。实际情况下,Spark通常比Hadoop快十倍以内是合理的。主要快在哪里呢?

其实,关键还是在于Spark 本身快。

Spark比Hadoop快的主要原因有:

1.消除了冗余的HDFS读写
Hadoop每次shuffle操作后,必须写到磁盘,而Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。

2.消除了冗余的MapReduce阶段
Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。而Spark基于RDD提供了丰富的算子操作,且reduce操作产生shuffle数据,可以缓存在内存中。

3.JVM的优化
Spark Task的启动时间快。Spark采用fork线程的方式,Spark每次MapReduce操作是基于线程的,只在启动。而Hadoop采用创建新的进程的方式,启动一个Task便会启动一次JVM。

Spark的Executor是启动一次JVM,内存的Task操作是在线程池内线程复用的。

每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,这个时间Hadoop不知道比Spark慢了多少。

 

spark为什么比hadoop的mr要快?的更多相关文章

  1. [Spark] 00 - Install Hadoop & Spark

    Hadoop安装 Java环境配置 安装课程:安装配置 配置手册:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04[依照步骤完成配置] jsk安装使用的链接中第 ...

  2. hadoop修改MR的提交的代码程序的副本数

    hadoop修改MR的提交的代码程序的副本数 Under-Replicated Blocks的数量很多,有7万多个.hadoop fsck -blocks 检查发现有很多replica missing ...

  3. spark能否取代Hadoop?

    大数据的浪潮风靡全球的时候,Spark火了.在国外 Yahoo!.Twitter.Intel.Amazon.Cloudera 等公司率先应用并推广 Spark 技术,在国内阿里巴巴.百度.淘宝.腾讯. ...

  4. [转]Spark能否取代Hadoop?

    大数据的浪潮风靡全球的时候,Spark火了.在国外 Yahoo!.Twitter.Intel.Amazon.Cloudera 等公司率先应用并推广 Spark 技术,在国内阿里巴巴.百度.淘宝.腾讯. ...

  5. Hadoop【MR开发规范、序列化】

    Hadoop[MR开发规范.序列化] 目录 Hadoop[MR开发规范.序列化] 一.MapReduce编程规范 1.Mapper阶段 2.Reducer阶段 3.Driver阶段 二.WordCou ...

  6. Apache Spark 1.6 Hadoop 2.6 Mac下单机安装配置

    一. 下载资料 1. JDK 1.6 + 2. Scala 2.10.4 3. Hadoop 2.6.4 4. Spark 1.6 二.预先安装 1. 安装JDK 2. 安装Scala 2.10.4 ...

  7. Hadoop中MR程序的几种提交运行模式

    本地模型运行 1:在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行       ----输入输出数据可以放在本地路径下(c:/wc ...

  8. hadoop之 mr输出到hbase

    1.注意问题: 1.在开发过程中一定要导入hbase源码中的lib库否则出现如下错误 TableMapReducUtil 找不到什么-- 2.编码: import java.io.IOExceptio ...

  9. spark加载hadoop本地库的时候出现不能加载的情况要怎么解决呢?

    hadoop shell运行的时候不会报这个错误,因为我已经重新在64位机上编译了源文件,并把so文件复制到hadoop的native目录下,而且环境变量也设置正确了,所以hadoop本身没有问题. ...

随机推荐

  1. echarts中国地图描绘

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8&qu ...

  2. docker镜像内没有vim

    问题: 我们在容器中找不到vim等命令   原因: 镜像制作的时候没把这些东西加进去   解决: 用apt update更新源之后再安装vim apt update apt-get install - ...

  3. 《剑指offer》查找二维数组内元素 c++

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. cl ...

  4. [转帖]被HTTP/2漏洞拖累,所有Kubernetes版本受影响

    被HTTP/2漏洞拖累,所有Kubernetes版本受影响 https://www.kubernetes.org.cn/5746.html 服务很重要啊... 低版本都不解决安全问题了.. 不过HTT ...

  5. centos 安装go

    [root@golong-learning src]# wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz # 下载 [root@gol ...

  6. ubuntu下java的安装与执行

    一.安装java sudo add-apt-repository ppa:linuxuprising/java sudo apt-get update sudo apt-get install ora ...

  7. 最大流Dinic(模板)

    #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...

  8. VS2017生成一个简单的DLL文件 和 LIB文件——C语言

    下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一 ...

  9. 一个复杂关联的sql

    在项目中遇到了一个比较复杂关系的sql,关联关系有些模糊,现在梳理一下 sql如下: SELECT TRAN.TRANS_DATE, TRAN.TRANS_TIME, TRAN.BUSI_TRAC_C ...

  10. POJ 1789 Prim

    给定N个字符串,某个字符串转为另一个字符串的花费为他们每一位不相同的字符数. 求最小花费Q. Input 多组输入,以0结束. 保证N不超过2000. Output 每组输出"The hig ...