Hadoop与Spark关系

Hadoop与Spark的关系目录

  • 一:介绍
    • 1:Spark
    • 2:Hadoop
  • 二:不同层面的关系
    • 1:功能
    • 2:依赖关系
    • 3:数据量影响
    • 4:容错

说明:近期在做一个图关系项目时,使用到了saprk分析引擎和Hadoop的HDFS文件系统,在了解的过程中产生了关于Hadoop与Spark的关系是什么样的疑问,在此简单的整理一下

一:介绍

1:Spark

Apache Spark™ is a unified analytics engine for large-scale data processing.

这是官网上的一句话,意思就是“Spark是大规模数据处理的统一分析引擎”,是专为大规模数据处理而设计的快速通用的计算引擎。由UC Berkeley AMP Lab所开源的类Hadoop MapReduce的通用并行框架。

Apache Spark使用最先进的DAG调度程序,查询优化器和物理执行引擎,实现批处理和流数据的高性能。

可以兼容多种语言:Java,Scala,Python,R和SQL 等,来自官网的一个图:

spark的架构图:

2:Hadoop

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

Apache Hadoop软件库是一个允许使用简单的编程模型跨计算机集群分布式处理大型数据集的框架。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,从而在计算机集群之上提供高可用性服务。 简单的来说:Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 在学习过程中,发现一个特别好的图,在此和大家分享一下,如评论所说’一图解千愁‘,Hadoop集群完整架构设计图(来自:https://blog.csdn.net/quwenzhe/article/details/53905572):

二:不同层面的关系

1:功能

首先,Hadoop和Spark两者都是大数据框架,但是各自存在的目的不尽相同。就如上述所说,Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着不需要购买和维护昂贵的服务器硬件,直接使用廉价的机器就可组成一个高可用的集群。Hadoop不仅提供分布式存储,还可以使用其MapReduce模型对大数据量进行分析计算。

而Spark主要是一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

2:依赖关系

Hadoop主要是提供HDFS分布式数据存储功能,在这之外还提供了叫做MapReduce的数据处理功能。所以我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。

Spark也不是非要依附于Hadoop才能生存。但是Spark没有提供文件管理存储系统,所以,它必须和其他的分布式文件系统进行集成才能运作。我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。大部分情况下Spark还是使用的Hadoop的HDFS文件系统。

3:数据量影响

Hadoop的MapReduce模型特别适合大数据量的离线处理。

Spark适合对数据量不太大的数据处理,可以是离线也可以是实时处理。

对于相同的数据量,spark的处理速度快于Hadoop,为什么?

  1. Spark和Hadoop都是基于内存计算的。Spark和Hadoop的根本差异是多个任务之间的数据通信问题:Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘。
  2. MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果写到集群磁盘中,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群磁盘中。。。“要不断的进行磁盘的读取和存储。
  3. 对于Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成,” 只需要加载一次即可,任务之间的通讯几乎全在内存中。Spark的所有运算并不是全部都在内存中,当shuffle发生的时候,数据同样是需要写入磁盘的
  4. Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍,下面为Spark官网中的关于spark和hadoop做逻辑回归处理的一个比较:

4:容错

MapReduce使用TaskTracker节点,它为 JobTracker节点提供了心跳(heartbeat)。如果没有心跳,那么JobTracker节点重新调度所有将执行的操作和正在进行的操作,交 给另一个TaskTracker节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。

Spark使用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操作。RDD可以引用外部存储系统中的数据集,比如共享式文件系统、HDFS、HBase,或者提供Hadoop InputFormat的任何数据源。Spark可以用Hadoop支持的任何存储源创建RDD,包括本地文件系统,或前面所列的其中一种文件系统。Spark的缓存具有容错性,原因在于如果RDD的任何分区丢失,就会使用原始转换,自动重新计算。

大数据领域知识博大精深,想要深入学习还需要继续努力呀。

参考: https://blog.csdn.net/onlyoncelove/article/details/81945381 https://blog.csdn.net/forward__/article/details/78770466 https://blog.csdn.net/zcy6675/article/details/78256164?locationNum=2&fps=1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员带你学习安卓开发-安卓基础之网络编程 大汇总

    本系列教程致力于可以快速的进行学习安卓开发,按照项目式的方法,通常一篇文章会做一个小程序。提高学习的兴趣。

    做全栈攻城狮
  • 调试flink源码

    本文主要是讲讲flink的源码编译,案例运行,flink源码调试过程。调试flink的源码及案例,需要先clone工程,编一下源码,去掉规范检查,修改工程,最后...

    Spark学习技巧
  • 一组漫画告诉你Linux 系统有什么

    今天,看到一组漫画,主要介绍Linux内核构成,可以帮助大家对Linux内核有个初步认知。TurnOff.us 是一个极客漫画网站,作者Daniel Stori...

    用户1338460
  • linux每日命令(30):Linux 用户及用户组相关文件、命令详解

    Linux用户只有两个等级:root及非root。Linux中还有一部分用户,如:apache、mysql、nobody、ftp等,这些也都是非root用户,即...

    用户1214487
  • Apache Kafka:优化部署的 10 种最佳实践

    Apache Kafka 肯定会像它的同名小说家一样不负众望,因为它能激奋新来者、挑战深度,若能更全面的理解它还会产生丰厚的回报。抛开文学,书归正传。遵循 ka...

    Spark学习技巧
  • 分布式消息队列 Kafka目录Kafka概述

    JavaEdge
  • HackTheBox - Poison Writeup

    来源:https://www.absolomb.com/2018-09-08-HackTheBox-Poison/

    安恒网络空间安全讲武堂
  • HBase Region 自动拆分策略

    其中BusyRegionSplitPolicy是HBase-2.x新增的策略,其他6种在HBase-1.2.x中也可以使用。

    CoderJed
  • 如何安装https证书 (ubuntu+apache2)

    搬运自知乎 FengYQ:https://zhuanlan.zhihu.com/p/43699640

    林清猫耳
  • 解决修改 Linux 下的 PHP 环境变量不生效的方法

    这个问题出现服务器有多个 PHP 版本,php -v和phpinfo()显示两个不同的版本

    沈唁

扫码关注云+社区

领取腾讯云代金券