【Spark】Spark/SparkStreaming/SparkSQL知识点概述

 
 
 
 

Spark概述

Spark初见

  • Spark诞生于美国加州大学伯克利分校
  • Spark是基于内存计算的大数据并行、实时计算框架
  • Spark最大的特点是基于内存的实时计算
  • 2013年Spark加入Apache孵化器后发展迅猛,如今已成为Apache基金会最重要的三大分布式开源项目之一(Hadoop、Spark、Storm)
  • 2014年打破Hadoop保持的基准排序记录——Spark用十分之一的计算资源,获得了比Hadoop快3倍的速度

Spark特点

  • 速度快:使用DAG执行引擎,以支持循环数据流与内存计算
  • 支持多种语言:支持使用Scala、Java、Python、R语言进行编程;可以通过Spark Shell进行交互
  • 通用技术栈:Spark提供强大而完整的技术栈——SQL、流式计算、机器学习、图算法
  • 运行模式多样:可运行于独立的集群模式,可运行与Hadoop,可运行与Amazon EC2等云环境…并可以访问HDFS、Hbase、Hive、Cassandra等多种数据源

Spark发展趋势

不难看出,2014年是Spark篡位的一年。
在这

Spark与Hadoop的对比

Hadoop的缺点

  • MapReduce计算模型延迟过高——只适用于离线批处理场景,无法胜任实时、快速计算
  • 中间结果需要写入磁盘,频繁通过HDFS读写磁盘
  • 存在拓扑限制,即前驱任务未完成,所有后继任务无法开始——因此难以胜任复杂、多阶段的计算任务

Spark的优点

  • Spark的计算模型也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种操作类型——编程模型比MapReduce更加灵活
  • Spark提供内存计算,可将中间结果存到内存中,对于迭代运算的效率更高
  • Spark基于DAG的任务调度执行机制,这明显优于HadoopMapReduce的迭代执行机制

Spark计算模型也是属于MapReduce的,并未完全脱离 !!!
但Spark在借鉴MapReduce优点的同时,很好地解决了MapReduce的问题 !!!

 
 
 

Spark生态系统

传统应用场景

大数据处理主要包括下面3种类型:

  • 复杂的批处理:时间跨度在数十分钟(min)到数小时(hour)之间——MapReduce
  • 基于历史数据的交互式查询:时间跨度在数十秒(sec)到数分钟(min)之间——Impala
  • 基于实时数据的流数据处理:时间跨度在数百毫秒(ms)到数秒(sec)之间——Storm

这难免会带来一些问题:

  • 不同场景之间的数据input/output无法做到无缝共享,通常需要进行数据格式的转换
  • 不同的软件需要不同的开发/维护团队,这带来了较高的使用成本
  • 难以对同一个集群中各个系统进行统一的资源协调/分配

Saprk应用场景

以BDAS(Berkeley Data Analytics Stack,伯克利数据分析软件栈)为例:

在这里插入图片描述

常用的组件为:

应用场景常用组件Spark生态系统组件
复杂的批处理MapReduce, HiveSpark
基于历史数据的交互式查询Impala, Dremel, DrillSpark SQL
基于实时数据的流数据处理Storm, S4Spark Streaming
基于历史数据的数据挖掘MahoutMLlib
图结构数据的处理Pregel, HamaGraphX

 
 
 

Spark SQL

从Shark说起

——什么是Shark?

  1. Hive on Spark
  2. 为了实现与Hive兼容,Shark重用了HiveQL
  3. 可以近似认为,仅仅是在物理执行计划阶段把MapReduce作业替换成了Spark作业

——Shark的设计导致了什么问题?

  1. 一是执行计划优化完全依赖于Hive,不方便添加新的优化策略
  2. 二是因为Spark是线程级并行,而MapReduce是进程级并行,因此Spark在尝试兼容Hive时存在线程安全问题,需要打补丁

Spark SQL架构

Spark SQL仅仅依赖HiveQL解析、Hive元数据,从抽象语法树开始,就全部由Spark SQL接管了

在这里插入图片描述
 
Spark SQL支持

Spark支持的数据源有RDD、HDFS、Hive、Cassandra,甚至JSON

Spark支持Scala、Java、Python三种语言,支持SQL-92规范

在这里插入图片描述

 
 
 

Spark Streaming

概述

  • Spark Streaming和Spark的本质一样——是一套框架
  • Spark Streaming是Spark Core API的一个扩展,可以实现高吞吐量的具备容错机制实时流数据处理
  • Spark Streaming接收Kafka、Flume、HDFS等各种来源的实时input,然后处理后output到HDFS、DataBase等各种地方

原理

  1. Spark Streaming不是像Strom那样,一条一条数据流的处理数据
  2. 而是将一条数据流按时间切分,然后以类似bat批处理的方式处理这些“小数据”——和spark思路逻辑相同

理解一下:假如外部数据不断涌入,按照一分钟切片,那么每个“一分钟”的内部的数据是连续的(连续流),这这些“一分钟”之间却是相互独立的(离散流)。

组成

  • Spark = RDD + RDD DAG
  • Spark Streaming = Dstream + Dstream Graph

理解一下:Dstream是它特有的数据类型,其实就是RDDs(一串RDD序列)——即在RDD的基础上,加上了时间维度

理解

Spark Streaming的本质就是,将连续的数据离散化、持久化,然后进行批量处理。

—— 持久化?为了容错,即数据流出错了,还有回溯的余地

—— 离散化?就是按时间分片,来形成处理单元,从而得以进行分批处理

 
 
 

Spark的部署和应用方式

三种部署方式

  1. Standalone(类似于MapReduce1.0,slot为资源分配单位)
  2. Spark on Mesos(Mesos与Spark有血缘关系,是Apache下的开源分布式资源管理框架)
  3. Spark on Yarn(Yarn是新一代资源管理调度框架)

图解(⭐️)

在这里插入图片描述

从Hadoop+Storm架构转向Spark架构

在这里插入图片描述

使用Spark架构的优点

  • 实现一键式安装和配置
  • 实现线程级别的人任务监控和警告
  • 降低硬件集群、软件维护、任务监控、应用开发的难度
  • 便于做成统一的硬件、计算平台资源池

需要说明的是,Spark Streaming无法实现毫秒级的流计算,因此在一些场景下仍需要采用流计算框架(Storm)——也就是说,Hadoop目前无法被Spark完全取代;况且部分取代也是需要一定的转移成本的。

Hadoop和Spark的统一部署

在这里插入图片描述

 
 
 
 

补充:Scala语言

几个关于Scala的知识点汇总:

  • Scala是一门多范式(multi-paradigm)的编程语言
  • Scala的设计初衷是要集成面向对象编程函数式编程的各种特性
  • Scala运行在Java虚拟机(JVM)上,并兼容现有的Java程序
  • Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库

直接HelloWorld:

object HelloWorld {
	def main(args: Array[String]): Unit = {
		println("Hello, world!")
	}
}
// 不难看出,和Java极为相似 >_<!!!
// 一个区分于Java的明显特征是,对于分号(;)无强制要求

将以上代码保存为HelloWorld.scala,然后就和Java一样:

>>> scalac HelloWorld.scala		// 将源码编译为字节码
>>> scala HelloWorld			// 把字节码放到虚拟机中运行

成功输出 >_<:

>>> Hello, world!

 
 
 
 

 
 
 
 

 
 
 
 

E N D END END

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值