热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据Spark概述

MapReduce通过简单的Map和Reduce抽象提供了一个编程模型可以在一个由上百台机器组成的集群上并发处理大规模的数据集,并隐藏具体的计算细节各种各样的复杂数据处理都可以分解



  1. MapReduce通过简单的Map和Reduce抽象提供了一个编程模型

    • 可以在一个由上百台机器组成的集群上并发处理大规模的数据集,并 隐藏 具体的计算细节

    • 各种各样的复杂数据处理都可以分解为Map或Reduce的基本元素


  2. 复杂的数据处理可以被分解为由多个Job(一个Mapper + 一个Reducer)组成的 有向无环图 (DAG)

    • 然后每个Mapper和Reducer在Hadoop集群上执行,就可以得到结果



缺陷



  1. 高昂的维护成本

  2. 时间性能达不到用户的预期

  3. 抽象层次低 ,大量的 底层逻辑 都需要开发者手工完成

    • 类似于用汇编语言去编写一个复杂的游戏


  4. 只提供Map和Reduce两个操作

    • 很多实际的数据处理场景并不适合用MapReduce模型来描述

    • 实现复杂的操作很有技巧性,同时会让整个工程变得 庞大且难以维护

    • 如两个数据集的Join操作是很基本且常用的功能

      • 但如果使用MapReduce模型,需要对两个数据集进行一次Map和Reduce才能得到结果

      • 维护一个多任务协调的状态机 成本很高 ,并且 可扩展性很差



  5. 在Hadoop中,每个Job的计算结果都会存储在 HDFS 中,所以每一步都会进行 硬盘 的读取和写入,大大增加了 系统延迟

    • 因此,MapReduce对于 迭代算法 的处理性能很差,很耗资源,因为迭代的每一步都要对HDFS进行读写


  6. 只支持批数据处理,欠缺对流数据处理的支持


Spark的优势



  1. Spark最基本的数据抽象叫作 弹性分布式数据集 (Resilient Distributed Dataset, RDD

    • RDD代表一个 可以被分区的只读数据集 ,RDD内部可以有很多 分区 ,每个分区又可以有大量的 数据记录


  2. RDD是Spark最基本的数据结构,Spark定义了很多对RDD的操作

    • 对RDD的任何操作都可以像 函数式编程 中操作内存中的集合一样直观简便,使得实现数据处理的代码非常简短高效


  3. Spark提供了很多对RDD的操作,如Map、Filter、flatMap、groupByKey、Union等, 极大地提升了对各种复杂场景的支持

    • 开发者不用再绞尽脑汁地挖掘MapReduce模型的潜力,也不用维护复杂的MapReduce状态机


  4. 相对于Hadoop的MapReduce会将中间数据存放到硬盘中,Spark会把 中间数据缓存在内存 中,加快了处理速度

    • Spark可以把迭代过程中每一步的计算结果都缓存在内存中,所以 非常适用于迭代算法

    • Spark 第一次 启动时需要把数据载入内存,之后的迭代可以直接在内存里利用中间结果进行计算,后期的迭代速度很快

    • 在当今 机器学习人工智能 大热的环境下, Spark无疑是更好的数据处理引擎


  5. 在任务级别上, Spark的并行机制是多线程模型,而MapReduce是多进程模型

    • 多进程模型便于细粒度地控制每个任务占用的资源,但会消耗较多的启动时间

    • Spark同一节点上的任务以 多线程 的方式运行在 同一个JVM进程

      • 更快的启动速度,更高的CPU利用率、更好的内存共享





与Hadoop的关系



  1. Spark并不是一个完全替代Hadoop的全新工具

  2. Hadoop生态

    • 数据存储层 :分布式文件系统HDFS、分布式数据库HBase

    • 数据处理层 :进行数据处理的MapReduce、负责集群和资源管理的YARN

    • 数据访问层 :Hive、Pig、Mahout


  3. 从狭义上来看, Spark只是MapReduce的替代方案

    • 大部分应用场景中,Spark还需要依赖HDFS和HBase来存储数据,依赖YARN来管理集群和资源

    • Spark不一定依附于Hadoop才能生存,它可以运行在Apache Mesos、Kubernetes等云平台





推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java虚拟机中的垃圾收集器,包括年轻代收集器Serial收集器、ParNew收集器、Parallel Scavenge收集器,以及老年代收集器Serial Old收集器、Parallel Old收集器和CMS收集器。对每种收集器的算法和特点进行了详细解析,希望对读者有参考价值。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 如何在mysqlshell命令中执行sql命令行本文介绍MySQL8.0shell子模块Util的两个导入特性importTableimport_table(JS和python版本 ... [详细]
author-avatar
乖乖紫仪面_614
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有