《Spark核心技术与高级应用》——1.1节什么是Spark

1.1 什么是Spark
说起大数据,很多人会想起Doug Cutting以自己儿子玩具小象命名的开源项目Hadoop。Hadoop解决了大多数批处理工作负载问题,成为了大数据时代企业的首选技术。但随着大数据时代不可逆的演进,人们发现,由于一些限制,Hadoop对一些工作负载并不是最优选择,比如:
缺少对迭代的支持;
中间数据需输出到硬盘存储,产生了较高的延迟。
探其究竟,MapReduce设计上的约束比较适合处理离线数据,在实时查询和迭代计算上存在较大的不足,而随着具体业务的发展,业界对实时查询和迭代计算有更多的需求。
2009年,美国加州大学伯克利分校实验室小伙伴们基于AMPLab的集群计算平台,立足内存计算,从多迭代批量处理出发,兼顾数据仓库、流处理、机器学习和图计算等多种计算范式,正式将Spark作为研究项目,并于2010年进行了开源。
什么是Spark?Spark作为Apache顶级的开源项目,是一个快速、通用的大规模数据处理引擎,和Hadoop的MapReduce计算框架类似,但是相对于MapReduce,Spark凭借其可伸缩、基于内存计算等特点,以及可以直接读写Hadoop上任何格式数据的优势,进行批处理时更加高效,并有更低的延迟。相对于“one stack to rule them all”的目标,实际上,Spark已经成为轻量级大数据快速处理的统一平台,各种不同的应用,如实时流处理、机器学习、交互式查询等,都可以通过Spark建立在不同的存储和运行系统上,下面我们来具体认识一下Spark。
1.1.1 概述
随着互联网的高速发展,以大数据为核心的计算框架不断出现,从支持离线的MapReduce席卷全球,到支持在线处理的Storm异军突起,支持迭代计算的Spark攻城拔寨,支持高性能数据挖掘的MPI深耕细作。各种框架诞生于不同的实验室或者公司,各有所长,各自解决了某一类问题,而在一些互联网公司中,百家争鸣,各种框架同时被使用,比如作者所在公司的大数据团队,模型训练和数据处理采用MapReduce框架(包括基于Hive构建的数据仓库查询的底层实现),实时性要求较高的线上业务采取Storm,日志处理以及个性化推荐采取Spark,这些框架都部署在统一的数据平台上,共享集群存储资源和计算资源,形成统一的轻量级弹性计算平台。
1.1.2 Spark大数据处理框架
相较于国内外较多的大数据处理框架,Spark以其低延时的出色表现,正在成为继Hadoop的MapReduce之后,新的、最具影响的大数据框架之一,图1-1所示为以Spark为核心的整个生态圈,最底层为分布式存储系统HDFS、Amazon S3、Hypertable,或者其他格式的存储系统(如HBase);资源管理采用Mesos、YARN等集群资源管理模式,或者Spark自带的独立运行模式,以及本地运行模式。在Spark大数据处理框架中,Spark为上层多种应用提供服务。例如,Spark SQL提供SQL查询服务,性能比Hive快3~50倍;MLlib提供机器学习服务;GraphX提供图计算服务;Spark Streaming将流式计算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。值得说明的是,无论是Spark SQL、Spark Streaming、GraphX还是MLlib,都可以使用Spark核心API处理问题,它们的方法几乎是通用的,处理的数据也可以共享,不仅减少了学习成本,而且其数据无缝集成大大提高了灵活性。

基于Hadoop的资源管理器YARN实际上是一个弹性计算平台,作为统一的计算资源管理框架,不仅仅服务于MapReduce计算框架,而且已经实现了多种计算框架进行统一管理。这种共享集群资源的模式带来了很多好处。
资源利用率高。多种框架共享资源的模式有效解决了由于应用程序数量的不均衡性导致的高峰时段任务比较拥挤,空闲时段任务比较空闲的问题;同时均衡了内存和CPU等资源的利用。
实现了数据共享。随着数据量的增加,数据移动成本越来越高,网络带宽、磁盘空间、磁盘IO都会成为瓶颈,在分散数据的情况下,会造成任务执行的成本提高,获得结果的周期变长,而数据共享模式可以让多种框架共享数据和硬件资源,大幅度减少数据分散带来的成本。
有效降低运维和管理成本。相比较一种计算框架需要一批维护人员,而运维人员较多又会带来的管理成本的上升;共享模式只需要少数的运维人员和管理人员即可完成多个框架的统一运维管理,便于运维优化和运维管理策略统一执行。
总之,Spark凭借其良好的伸缩性、快速的在线处理速度、具有Hadoop基因等一系列优势,迅速成为大数据处理领域的佼佼者。Apache Spark已经成为整合以下大数据应用的标准平台:
交互式查询,包括SQL;
实时流处理;
复杂的分析,包括机器学习、图计算;
批处理。
1.1.3 Spark的特点
作为新一代轻量级大数据快速处理平台,Spark具有以下特点:
快速。Spark有先进的DAG执行引擎,支持循环数据流和内存计算;Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的10倍,如图1-2所示。
易用。Spark支持使用Java、Scala、Python语言快速编写应用,提供超过80个高级运算符,使得编写并行应用程序变得容易。
通用。Spark可以与SQL、Streaming以及复杂的分析良好结合。基于Spark,有一系列高级工具,包括Spark SQL、MLlib(机器学习库)、GraphX和Spark Streaming,支持在一个应用中同时使用这些架构,如图1-3所示。

Spark可以指定Hadoop,YARN的版本来编译出合适的发行版本,Spark也能够很容易地运行在EC2、Mesos上,或以Standalone模式运行,并从HDFS、HBase、Cassandra和其他Hadoop数据源读取数据。
1.1.4 Spark应用场景
Spark使用了内存分布式数据集,除了能够提供交互式查询外,还优化了迭代工作负载,在Spark SQL、Spark Streaming、MLlib、GraphX都有自己的子项目。在互联网领域,Spark在快速查询、实时日志采集处理、业务推荐、定制广告、用户图计算等方面都有相应的应用。国内的一些大公司,比如阿里巴巴、腾讯、Intel、网易、科大讯飞、百分点科技等都有实际业务运行在Spark平台上。下面简要说明Spark在各个领域中的用途。
快速查询系统,基于日志数据的快速查询系统业务构建于Spark之上,利用其快速查询以及内存表等优势,能够承担大部分日志数据的即时查询工作;在性能方面,普遍比Hive快2~10倍,如果使用内存表的功能,性能将会比Hive快百倍。
实时日志采集处理,通过Spark Streaming实时进行业务日志采集,快速迭代处理,并进行综合分析,能够满足线上系统分析要求。
业务推荐系统,使用Spark将业务推荐系统的小时和天级别的模型训练转变为分钟级别的模型训练,有效优化相关排名、个性化推荐以及热点点击分析等。
定制广告系统,在定制广告业务方面需要大数据做应用分析、效果分析、定向优化等,借助Spark快速迭代的优势,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,支持上亿的请求量处理;模拟广告投放计算效率高、延迟小,同MapReduce相比延迟至少降低一个数量级。
用户图计算。利用GraphX解决了许多生产问题,包括以下计算场景:基于度分布的中枢节点发现、基于最大连通图的社区发现、基于三角形计数的关系衡量、基于随机游走的用户属性传播等。

时间: 2024-10-30 12:28:21

《Spark核心技术与高级应用》——1.1节什么是Spark的相关文章

《Spark核心技术与高级应用》——1.2节Spark的重要扩展

1.2 Spark的重要扩展 大家知道,在Hadoop中完成即席查询(ad-hoc queries).批处理(batch processing),流式处理(stream processing),需要构建不同的团队,每个团队需要不同的技术和经验,很难做到共享.而Spark实现了平台融合,一个基础平台解决所有的问题,一个团队拥有相同的技术和经验完成所有的任务. 基于Spark的基础平台扩展了5个主要的Spark库,包括支持结构化数据的Spark SQL.处理实时数据的Spark Streaming.

《Spark核心技术与高级应用》——2.3节运行Spark应用程序

2.3 运行Spark应用程序 运行Spark应用程序主要包括Local模式运行.Standalone模式运行.YARN模式运行.Mesos模式运行(参考官方文档).2.3.1 Local模式运行Spark应用程序 Local模式运行Spark应用程序是最简单的方式,以计算圆周率的程序为例,进入安装主目录,如spark-1.5.0,执行命令: # 提交Spark任务的入口 ./bin/spark-submit \ #主程序设置本地,local[],其中是指设置线程数 --master local

《Spark核心技术与高级应用》——3.2节构建Spark的开发环境

3.2 构建Spark的开发环境无论Windows或Linux操作系统,构建Spark开发环境的思路一致,基于Eclipse或Idea,通过Java.Scala或Python语言进行开发.安装之前需要提前准备好JDK.Scala或Python环境,然后在Eclipse中下载安装Scala或Python插件.3.2.1 准备环境准备环境包括JDK.Scala和Python的安装.1.安装JDK(1)下载JDK(1.7以上版本)下载地址:http://www.oracle.com/technetwo

《Spark核心技术与高级应用》——3.3节独立应用程序编程

3.3 独立应用程序编程不同于使用Spark Shell自动初始化SparkContext的例子,独立应用程序需要初始化一个SparkContext作为程序的一部分,然后将一个包含应用程序信息的SparkConf对象传递给SparkContext构造函数.接下来编写简单应用程序SimpleApp,并描述一些简单的编码流程.3.3.1 创建SparkContext对象编写一个Spark程序,首先创建SparkConf对象,该对象包含应用的信息.SparkConf对象构建完毕,需要创建SparkCo

《Spark大数据分析实战》——2.2节远程调试Spark程序

2.2 远程调试Spark程序 本地调试Spark程序和传统的调试单机的Java程序基本一致,读者可以参照原来的方式进行调试,关于单机调试本书暂不赘述.对于远程调试服务器上的Spark代码,首先请确保在服务器和本地的Spark版本一致.需要按前文介绍预先安装好JDK和Git. (1)编译Spark 在服务器端和本地计算机下载Spark项目. 通过下面的命令克隆一份Spark源码: git clone https:// github.com/apache/spark 然后针对指定的Hadoop版本

《Spark核心技术与高级应用》——3.1节使用Spark Shell编写程序

3.1 使用Spark Shell编写程序 要学习Spark程序开发,建议首先通过spark-shell交互式学习,加深对Spark程序开发的理解.spark-shell提供了一种学习API的简单方式,以及一个能够交互式分析数据的强大工具,在Scala语言环境下(Scala运行于Java虚拟机,因此能有效使用现有的Java库)或Python语言环境下均可使用.3.1.1 启动Spark Shell 在spark-shell中,已经创建了一个名为sc的SparkContext对象,如在4个CPU核

《Spark核心技术与高级应用》——2.2节Spark部署

2.2 Spark部署Spark部署主要包括Local模式部署.Standalone模式部署.YARN模式部署.Mesos模式部署(参考官方文档).其中,集群部署模式如下:独立部署模式:Spark自带的一种简单集群管理器,使用该集群管理器可以轻松地建立一个集群:Apache Mesos:一个通用的集群管理器,该集群管理器也可以运行MapReduce和服务应用(实际业务没有采取该种架构,本书没有对该模式进行专门讲解,如需要了解,请参考官方文档):Hadoop YARN:Hadoop 2中的资源管理

《Spark核心技术与高级应用》——导读

目 录 前 言 基 础 篇第1章 Spark简介 1.1 什么是Spark1.2 Spark的重要扩展1.3 本章小结第2章 Spark部署和运行2.1 部署准备2.2 Spark部署2.3 运行Spark应用程序2.4 本章小结第3章 Spark程序开发3.1 使用Spark Shell编写程序3.2 构建Spark的开发环境3.3 独立应用程序编程 3.4 本章小结第4章 编程模型4.1 RDD介绍4.2 创建RDD4.3 RDD操作4.4 共享变量4.5 本章小结第5章 作业执行解析5.1

《Spark核心技术与高级应用》——1.3节本章小结

1.3 本章小结大数据以及相关的概念.技术是业界和学界最近关注的热点,Spark在其中扮演了非常重要的角色.本书首先对Spark大数据框架进行了简单的介绍,展示了蓬勃发展的Spark大数据相关的特点和用途,揭开了Spark整个生态环境的神秘面纱.并在此基础上,向读者介绍了基于Spark的重要扩展,包括Spark SQL和DataFrame.Spark Streaming.MLlib和ML.GraphX.SparkR,使读者对Spark能做什么有个初步的了解.