学习Spark:一.Spark简介

1.这是什么?

    Spark于2009年诞生于加州大学伯克利分校AMPLab(出身高贵呀)。目前,已经成为Apache软件基金会旗下的顶级项目(后妈同样很强)。Spark是基于内存计算的大数据并行计算架构。这里面有两个概念:内存计算,并行计算架构。

  • 内存计算,把数据放在内存中,运算的时候从内存中读取数据,而不是从硬盘中读取数据。
  • 并行计算框架,使用多台计算机同时工作解决一件计算任务的框架。

2.优势

  • 支持复杂查询。(能干的活多)
  • 轻量级快速处理。(代码少,速度快)
  • 易于使用。支持Scala.java.python编写程序,最新版的Spark1.4还支持R语言。
  • 于HDFS等存储层兼容。(Spark只负责计算,存储使用其他存储层)
  • 社区活跃程度高。(很多人支持,不怕倒下)

3.Spark生态系统BDAS

伯克利将Spark的整个生态系统称为伯克利数据分析栈(BDAS).其核心是Spark,围绕着Spark有着一系列的子项目,提供了更高层/更丰富的计算范式。底层同时也有其他重量级的选手,如分布式内存文件系统Tachyon,分布式文件系统HDFS,资源管理框架Mesos。

BDAS项目结构图
(1)Spark
Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、join、groupByKey等。Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scala这种函数式语言书写而成,并且所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。

(2)Shark
Shark是构建在Spark和Hive基础之上的数据仓库。目前,Shark已经完成学术使命,终止开发,但其架构和原理仍具有借鉴意义。它提供了能够查询Hive中所存储数据的一套SQL接口,兼容现有的Hive QL语法。这样,熟悉Hive QL或者SQL的用户可以基于Shark进行快速的Ad-Hoc、Reporting等类型的SQL查询。Shark底层复用Hive的解析器、优化器以及元数据存储和序列化接口。Shark会将Hive QL编译转化为一组Spark任务,进行分布式运算。

(3)Spark SQL
Spark SQL提供在大数据上的SQL查询功能,类似于Shark在整个生态系统的角色,它们可以统称为SQL on Spark。之前,Shark的查询编译和优化器依赖于Hive,使得Shark不得不维护一套Hive分支,而Spark SQL使用Catalyst做查询解析和优化器,并在底层使用Spark作为执行引擎实现SQL 的Operator。用户可以在Spark上直接书写SQL,相当于为Spark扩充了一套SQL算子,这无疑更加丰富了Spark的算子和功能,同时Spark SQL不断兼容不同的持久化存储(如HDFS、Hive等),为其发展奠定广阔的空间。

(4)Spark Streaming
Spark Streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处理,进而实现大规模的流数据处理。其吞吐量能够超越现有主流流处理框架Storm,并提供丰富的API用于流数据计算。

(5)GraphX
GraphX基于BSP模型,在Spark之上封装类似Pregel的接口,进行大规模同步全局的图计算,尤其是当用户进行多轮迭代时,基于Spark内存计算的优势尤为明显。

(6)Tachyon
Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性能,将数据存储剥离Java Heap。用户可以基于Tachyon实现RDD或者文件的跨应用共享,并提供高容错机制,保证数据的可靠性。

(7)Mesos
Mesos是一个资源管理框架,提供类似于YARN的功能。用户可以在其中插件式地运行Spark、MapReduce、Tez等计算框架的任务。Mesos会对资源和任务进行隔离,并实现高效的资源任务调度。

(8)BlinkDB
BlinkDB是一个用于在海量数据上进行交互式 SQL 的近似查询引擎。它允许用户通过在查询准确性和查询响应时间之间做出权衡,完成近似查询。其数据的精度被控制在允许的误差范围内。为了达到这个目标,BlinkDB的核心思想是:通过一个自适应优化框架,随着时间的推移,从原始数据建立并维护一组多维样本;通过一个动态样本选择策略,选择一个适当大小的示例,然后基于查询的准确性和响应时间满足用户查询需求。

4.Spark架构

这里写图片描述
Spark集群成功部署了之后,需要在主节点和从节点分别启动Master进程和Worker进程。Client客户机将计算任务提交到主节点中的master进程,master进程找到一个worker启动Driver,Driver向Master或ClusterManager申请资源,之后将任务转化成RDD DAG,DAGScheduler将RDD DAG转化位Stage的有向无环图图提交给TaskScheduler,再又TaskScheduler提交计算任务给Executor执行。

参考书籍

《Spark大数据处理:技术、应用与性能优化》

好的,针对你的问题,我来逐一回答: 1. Spark 的主要特点有: - 速度快:Spark 是基于内存计算的,因此比传统的基于磁盘的 Hadoop 处理速度更快。 - 易用性高:Spark 提供了易于使用的 API,如 Scala、Java 和 Python,使其易于上手和使用。 - 执行多种计算:Spark 不仅可以执行批处理计算,还可以执行流处理和机器学习等多种计算。 - 可扩展性强:Spark 可以通过添加更多的节点来扩展计算集群,从而支持更大规模的数据处理。 2. Spark 生态系统包括: - Spark SQL:用于处理结构化数据的 Spark 模块。 - Spark Streaming:用于处理实时数据流的 Spark 模块。 - MLlib:用于机器学习Spark 模块。 - GraphX:用于图数据处理的 Spark 模块。 - SparkR:用于 R 语言用户的 Spark 模块。 3. Spark 常见的转化操作包括: - map:对 RDD 中的每个元素应用一个函数,返回一个新的 RDD。 - flatMap:对 RDD 中的每个元素应用一个函数,返回零个或多个新的 RDD。 - filter:对 RDD 中的每个元素应用一个谓词函数,返回一个满足条件的子集 RDD。 - groupByKey:对 RDD 中的每个元素按键进行分组,返回一个包含键值对的元组的 RDD。 - reduceByKey:对 RDD 中的每个元素按键进行分组,然后将每个键对应的值缩减为单个值,返回一个包含键值对的元组的 RDD。 Spark 常见的行动操作包括: - count:返回 RDD 中的元素数量。 - collect:将 RDD 中的所有元素收集到一个数组中。 - take:返回 RDD 中的前 n 个元素。 - reduce:将 RDD 中的所有元素缩减为单个值。 - foreach:对 RDD 中的每个元素应用一个函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值