当前位置:   article > 正文

大数据技术与应用(Spark)_spark大数据技术与应用

spark大数据技术与应用

一:什么是spark?

        1.Spark是一种快速、通用、可扩展的大数据分析引擎,Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。spark最大的特点是基于内存,特点是:快,易用,通用,兼容性。

2.spark的生态圈

Spark 生态圈以 Spark Core 为核心,从 HDFS、Amazon S3 和 HBase 等持久层读取数据,以 Mesos、YARN 和自身携带的 Standalone 为 Cluster Manager 调度 Job 完成 Spark 应用程序的计算,这些应用程序可以来自于不同的组件。

1. Spark Core(Spark的核心,提供底层框架及核心支持

1)提供了有向无环图(DAG)的分布式并行计算框架,并提供 cache 机制来支持多次迭代计算或者数据共享,大大减少了迭代计算之间读取数据的开销,这对于需要进行多次迭代的数据挖掘和分析的性能有很大提升。

2)在 Spark 中引入了 RDD 的抽象,它是分布在一组结点中的只读对象集合,这些集合是弹性的,如果数据集的一部分丢失,则可以根据血缘关系对它们进行重建,保证了数据的高容错性。

3)移动计算而非移动数据,RDD 分区可以就近读取 HDFS 中的数据块到各个结点内存中进行计算。

4)使用多线程池模型来减少 Task 启动开销。

5)采用容错的、高可伸缩性的 Akka 作为通信框架。


2.Spark Streaming

Spark Streaming 是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如 Kafka、Flume、Twitter、Zero 和 TCP 套接字)进行类似 map、reduce 和 join 的复杂操作,并将结果保存到外部文件系统、数据库中,或应用到实时仪表盘上。

Spark Streaming 的核心思想是将流式计算分解成一系列短小的批处理作业,这里的批处理引擎是 Spark Core。也就是把 Spark Streaming 的输入数据按照设定的时间片(如 1 秒)分成一段一段的数据,每一段数据都转换成 Spark 中的 RDD,然后将 Spark Streaming 中对 DStream 的转换操作变为对 Spark 中的 RDD 的转换操作,将 RDD 经过操作变成的中间结果保存在内存中。

3. Spark SQL

可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括HiveHDFS、关系数据库(如MySQL)等。

4. Spark MLlib

Spark MLlib 实现了一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维及底层优化,并且该算法可以进行扩充。Spark MLlib 降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作。

5.MLBase

是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。MLBase由4部分组成:MLlib,MLI,ML Optimizer和MLRuntime。

6.Spark GraphX

图计算的应用在很多情况下处理的数据量都是很庞大的。如果用户需要自行编写相关的图计算算法,并且在集群中应用,难度是非常大的。而使用GraphX即可解决这个问题,因为它内置了许多与图相关的算法,如在移动社交关系分析中可使用图计算相关算法进行处理和分析。

二:mapreduce与spark的对比

        1.spark基于内存,mapreduce基于磁盘。

        2.spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块、图计算GraphX等等;mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。

        3.mapreduce任务调度和启动开销大,spark线程池模型减少task启动开销。

        4.mapreduce不适合迭代计算(如机器学习、图计算等),交互式处理(数据挖掘) 和流式处理(点击日志分析), 其中间结果需要落地,需要保存到磁盘,这样必然会有磁盘io操做,影响性能。

spark把运算的中间数据存放在内存,迭代计算效率更高,更适合做需要反复迭代的计算。

        5.spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;mapreduce的话容错可能只能重新计算了,成本较高  。     

        6.spark框架和生态更为复杂,首先有RDD、血缘lineage(保存了RDD的依赖关系)、执行时的有向无环图DAG、stage划分等等,很多时候spark作业都需要根据不同业务场景的需要进行调优已达到性能要求;

mapreduce框架及其生态相对较为简单,对性能的要求也相对较弱,但是运行较为稳定,适合长期后台运行。

总结:spark生态更为丰富,功能更为强大、性能更佳,适用范围更广;mapreduce更简单、稳定性好、适合离线海量数据挖掘计算。

三:结构化数据与非结构化数据

结构化数据是指按照预定义的模式和格式进行组织和存储的数据。它通常以表格形式存在,每个数据字段都有明确定义的数据类型和约束条件。结构化数据可以使用关系型数据库进行存储和管理,例如使用SQL语言进行查询和操作。常见的结构化数据包括用户信息、订单记录、销售数据等。

非结构化数据是指没有明确格式和模式的数据,它的组织形式不规则且不易被机器直接理解和处理。非结构化数据通常以文本、图像、音频、视频等形式存在。由于非结构化数据的复杂性,传统的关系型数据库难以有效存储和处理这些数据。因此,针对非结构化数据,常用的存储和处理方式包括文本搜索引擎、图像识别技术、自然语言处理等。

四:spark搭建的三种模式

1.local 

Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。

2.yarn

Standalone模式是指使用Spark原生的资源管理器的集群运行模式,需要使用Master和Worker节点,其中,Master节点负责资源的控制、管理、监控集群中的Worker节点.3.standalone

五:mapreduce的执行流程

YARN模式是指使用Hadoop的YARN作为资源管理器的集群运行模式。
在YARN模式下,不需要使用Master和Worker节点(即不需要在搭建额外的spark集群了),而是使用YARN下的ResourceManager 节点与NodeManager节点,对应Standalone模式下的Master节点和Worker节点。

1、数据输入

  • 在执行MapReduce任务前,将小文件进行合并,大量小文件会产生大量的map任务,增大map任务装载次数,而任务装载较耗时,从而导致MapReduce运行速度较慢。因此采用CombineTextInputFormat来作为输入,解决输入端大量的小文件场景。

2、Map阶段

  • 减少溢写(spill)次数
  • 减少合并(merge)次数
  • 在map之后,不影响业务逻辑前提下,先进行combine处理,减少 I/O

3、Reduce阶段

  • 合理设置map和reduce数
  • 设置map、reduce共存
  • 规避使用reduce
  • 合理设置reduce端的buffer

4、Shuffle阶段

  • Shuffle阶段的调优就是给Shuffle过程尽量多地提供内存空间,以防止出现内存溢出现象,可以由参数mapred.child.java.opts来设置,任务节点上的内存大小应尽量大。

六:Spark的架构

a.客户端:用户提交作业的客户端

b.Driver:运行Application的main()函数并创建SparkContext

c.SparkContext:整个应用的上下文,控制应用的生命周期

d.Cluster Manager:资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone(Spark原生的资源管理器)和YARNHadoop集群的资源管理器)

e.SparkWorker:集群中任何可以运行应用程序的节点,运行一个或多个Executor进程

f.:Executor:执行器,在Spark Worker上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor

g.:Task:被发送到某个Executor的具体任务

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/864508
推荐阅读
相关标签
  

闽ICP备14008679号