>>分享SPSS,Hadoop等大数据处理技术,以及分布式架构以及集群系统的构建 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22950 个阅读者 刷新本主题
 * 贴子主题:  00-Spark介绍 回复文章 点赞(0)  收藏  
作者:日月光华    发表时间:2019-12-23 17:18:26     消息  查看  搜索  好友  邮件  复制  引用

00-Spark介绍

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文转自:https://blog.csdn.net/qq_38617531/article/details/86642699

什么是Spark?

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。
与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势。
首先,Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。
Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。
Spark让开发者可以快速的用Java、Scala或Python编写程序。它本身自带了一个超过80个高阶操作符集合。而且还可以用它在shell中以交互式地查询数据。
除了Map和Reduce操作之外,它还支持SQL查询,流数据,机器学习和图表数据处理。开发者可以在一个数据管道用例中单独使用某一能力或者将这些能力结合在一起使用。
在这个Apache Spark文章系列的第一部分中,我们将了解到什么是Spark,它与典型的MapReduce解决方案的比较以及它如何为大数据处理提供了一套完整的工具。

Hadoop和Spark

Hadoop这项大数据处理技术大概已有十年历史,而且被看做是首选的大数据集合处理的解决方案。MapReduce是一路计算的优秀解决方案,不过对于需要多路计算和算法的用例来说,并非十分高效。数据处理流程中的每一步都需要一个Map阶段和一个Reduce阶段,而且如果要利用这一解决方案,需要将所有用例都转换成MapReduce模式。
在下一步开始之前,上一步的作业输出数据必须要存储到分布式文件系统中。因此,复制和磁盘存储会导致这种方式速度变慢。另外Hadoop解决方案中通常会包含难以安装和管理的集群。而且为了处理不同的大数据用例,还需要集成多种不同的工具(如用于机器学习的Mahout和流数据处理的Storm)。
如果想要完成比较复杂的工作,就必须将一系列的MapReduce作业串联起来然后顺序执行这些作业。每一个作业都是高时延的,而且只有在前一个作业完成之后下一个作业才能开始启动。
而Spark则允许程序开发者使用有向无环图(DAG)开发复杂的多步数据管道。而且还支持跨有向无环图的内存数据共享,以便不同的作业可以共同处理同一个数据。
Spark运行在现有的Hadoop分布式文件系统基础之上(HDFS)提供额外的增强功能。它支持将Spark应用部署到现存的Hadoop v1集群(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集群甚至是Apache Mesos之中。
我们应该将Spark看作是Hadoop MapReduce的一个替代品而不是Hadoop的替代品。其意图并非是替代Hadoop,而是为了提供一个管理不同的大数据用例和需求的全面且统一的解决方案。

Spark特性

Spark通过在数据处理过程中成本更低的洗牌(Shuffle)方式,将MapReduce提升到一个更高的层次。利用内存数据存储和接近实时的处理能力,Spark比其他的大数据处理技术的性能要快很多倍。
Spark还支持大数据查询的延迟计算,这可以帮助优化大数据处理流程中的处理步骤。Spark还提供高级的API以提升开发者的生产力,除此之外还为大数据解决方案提供一致的体系架构模型。
Spark将中间结果保存在内存中而不是将其写入磁盘,当需要多次处理同一数据集时,这一点特别实用。Spark的设计初衷就是既可以在内存中又可以在磁盘上工作的执行引擎。当内存中的数据不适用时,Spark操作符就会执行外部操作。Spark可以用于处理大于集群内存容量总和的数据集。
Spark会尝试在内存中存储尽可能多的数据然后将其写入磁盘。它可以将某个数据集的一部分存入内存而剩余部分存入磁盘。开发者需要根据数据和用例评估对内存的需求。Spark的性能优势得益于这种内存中的数据存储。
Spark的其他特性包括:
• 支持比Map和Reduce更多的函数。
• 优化任意操作算子图(operator graphs)。
• 可以帮助优化整体数据处理流程的大数据查询的延迟计算。
• 提供简明、一致的Scala,Java和Python API。
• 提供交互式Scala和Python Shell。目前暂不支持Java。
Spark是用Scala程序设计语言编写而成,运行于Java虚拟机(JVM)环境之上。目前支持如下程序设计语言编写Spark应用:

1 Scala
2 Java
3 Python
4 Clojure
5 R

Spark生态系统

除了Spark核心API之外,Spark生态系统中还包括其他附加库,可以在大数据分析和机器学习领域提供更多的能力。
这些库包括:

• Spark Streaming:
o Spark Streaming基于微批量方式的计算和处理,可以用于处理实时的流数据。它使用DStream,简单来说就是一个弹性分布式数据集(RDD)系列,处理实时数据。

• Spark SQL:
o Spark SQL可以通过JDBC API将Spark数据集暴露出去,而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据(如JSON,Parquet以及数据库等)执行ETL,将其转化,然后暴露给特定的查询。

• Spark MLlib:
o MLlib是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。

• Spark GraphX:
o GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了支持图计算,GraphX暴露了一个基础操作符集合(如subgraph,joinVertices和aggregateMessages)和一个经过优化的Pregel API变体。此外,GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。
除了这些库以外,还有一些其他的库,如BlinkDB和Tachyon。

BlinkDB是一个近似查询引擎,用于在海量数据上执行交互式SQL查询。BlinkDB可以通过牺牲数据精度来提升查询响应时间。通过在数据样本上执行查询并展示包含有意义的错误线注解的结果,操作大数据集合。

Tachyon是一个以内存为中心的分布式文件系统,能够提供内存级别速度的跨集群框架(如Spark和MapReduce)的可信文件共享。它将工作集文件缓存在内存中,从而避免到磁盘中加载需要经常读取的数据集。通过这一机制,不同的作业/查询和框架可以以内存级的速度访问缓存的文件。
此外,还有一些用于与其他产品集成的适配器,如Cassandra(Spark Cassandra 连接器)和R(SparkR)。Cassandra Connector可用于访问存储在Cassandra数据库中的数据并在这些数据上执行数据分析。

下载

从项目网站的下载页面获取Spark 。本文档适用于Spark版本2.4.0。Spark使用Hadoop的客户端库来实现HDFS和YARN。下载是针对少数流行的Hadoop版本预先打包的。用户还可以通过增加Spark的类路径下载“Hadoop免费”二进制文件并使用任何Hadoop版本运行Spark 。Scala和Java用户可以使用Maven坐标在他们的项目中包含Spark,并且将来Python用户也可以从PyPI安装Spark。
如果您想从源代码构建Spark,请访问Building Spark。
Spark在Windows和类UNIX系统(例如Linux,Mac OS)上运行。在一台机器上本地运行很容易 - 您只需要java在系统上安装PATH,或者JAVA_HOME指向Java安装的环境变量。
Spark运行在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上。对于Scala API,Spark 2.4.0使用Scala 2.11。您需要使用兼容的Scala版本(2.11.x)。
请注意,自Spark 2.2.0起,对2.6.5之前的Java 7,Python 2.6和旧Hadoop版本的支持已被删除。自2.3.0起,对Scala 2.10的支持被删除。

运行示例和Shell

Spark附带了几个示例程序。Scala,Java,Python和R示例都在 examples/src/main目录中。要运行其中一个Java或Scala示例程序,请 bin/run-example 在顶级Spark目录中使用。(在幕后,这将调用用于启动应用程序的更通用的 spark-submit脚本)。例如,
1./bin/run-example SparkPi 10

您还可以通过Scala shell的修改版本以交互方式运行Spark。这是学习框架的好方法。
1./bin/spark-shell --master local

该–master选项指定分布式集群的 主URL,或者local使用一个线程local[N]在本地运行,或者使用N个线程在本地运行。您应该从使用local测试开始 。有关选项的完整列表,请使用该–help选项运行Spark shell 。
Spark还提供了一个Python API。要在Python解释器中以交互方式运行Spark,请使用 bin/pyspark:
./bin/pyspark --master local[2]
Python中也提供了示例应用程序。例如,
1./bin/spark-submit examples/src/main/python/pi.py 10

Spark还提供了自1.4以来的实验性R API(仅包括DataFrames API)。要在R解释器中以交互方式运行Spark,请使用bin/sparkR:
1./bin/sparkR --master local

R中还提供了示例应用程序。例如,
1./bin/spark-submit examples/src/main/r/dataframe.R

Spark运行模式

目前Spark的运行模式主要有以下几种:

local:主要用于开发调试Spark应用程序
Standlone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构,为解决单点故障,可以采用Xookeeper实现高可靠(High Availability, HA)

Apache Mesos:运行在著名的Mesos资源管理框架基础之上,该集群运行模式将资源管理管理交给Mesos,Spark只负责运行任务调度和计算

Hadoop YARN:集群运行在Yarn资源管理器上,资源管理交给YARN,Spark只负责进行任务调度和计算
Spark运行模式中Hadoop YARN的集群方式最为常用.

Spark组件(Components)

一个完整的Spark应用程序,如前面一章当中的SparkWorkdCount程序,在提交集群运行时,它涉及到如下图所示的组件:
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
每个Spark应用都由一个驱动器程序(drive program)来发起集群上的各种并行操作。驱动器程序包含应用的main函数,驱动器负责创建SparkContext,SparkContext可以与不同种类的集群资源管理器(Cluster Manager),例如Hadoop YARN,Mesos进行通信,获取到集群进行所需的资源后,SparkContext将
得到集群中工作节点(Worker Node)上对应的Executor(不同的Spark程序有不同的Executor,他们之间是相互独立的进程,Executor为应用程序提供分布式计算以及数据存储功能),之后SparkContext将应用程序代码发送到各Executor,最后将任务(Task)分配给executors执行

ClusterManager:在Standalone模式中即为Master节点(主节点),控制整个集群,监控Worker.在YARN中为ResourceManager

Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。

Driver:运行Application的main()函数并创建SparkContect。

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

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

RDD:Spark的计算单元,一组RDD可形成执行的有向无环图RDD Graph。

DAG Scheduler:根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler。

TaskScheduler:将任务(Task)分发给Executor。

SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。
SparkEnv内构建并包含如下一些重要组件的引用。

1、MapOutPutTracker:负责Shuffle元信息的存储。
2、BroadcastManager:负责广播变量的控制与元信息的存储。
3、BlockManager:负责存储管理、创建和查找快。
4、MetricsSystem:监控运行时性能指标信息。
5、SparkConf:负责存储配置信息。

Spark的整体流程

1、Client提交应用。  
2、Master找到一个Worker启动Driver  
3、Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph  
4、再由DAGSchedule将RDD Graph转化为Stage的有向无环图提交给TaskSchedule。  
5、再由TaskSchedule提交任务给Executor执行。  
6、其它组件协同工作,确保整个应用顺利执行。  

图片:
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
Spark on Yarn流程:

1、基于YARN的Spark作业首先由客户端生成作业信息,提交给ResourceManager。  
2、ResourceManager在某一NodeManager汇报时把AppMaster分配给NodeManager。  
3、NodeManager启动SparkAppMaster。
4、SparkAppMastere启动后初始化然后向ResourceManager申请资源。  
5、申请到资源后,SparkAppMaster通过RPC让NodeManager启动相应的SparkExecutor。  
6、SparkExecutor向SparkAppMaster汇报并完成相应的任务。  
7、SparkClient会通过AppMaster获取作业运行状态。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小



程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java注解
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->Socket用法详解
  精通Spring-->创建综合购物网站应用
  Vue3开发-->Vue指令
  数据治理到底能治什么,怎么治
  spark-redis入门教程
  Yarn资源调度系统架构与原理分析
  MapReduce自定义分区实现
  合并两套环境的FastDFS数据
  Kubernetes集群监控方案
  Hadoop 之 HDFS
  搭建高可用的Replication集群归档大量的冷数据
  kafka作为流式处理的上一层,为什么吞吐量那么大?
  ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台
  Docker部署Hadoop集群
  Spark Thrift JDBCServer应用场景解析与实战案例
  大数据系统发展的技术路线
  数据仓库的两种建模方法
  大数据的概念、作用和处理流程
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。