Spark技术分享
牛逼哄哄的大数据分享来了,本期程序员哥哥从以下方面详细解读大数据Spark技术,介绍大数据在易货嘀产品系统中的应用。
关于Spark核心-RDD部分的内容,我们将在下期继续刊载。
1.大数据初窥
2.Spark 是什么?
3.Spark的特点
4.Spark vs Hadoop
5.Spark 编程模型
1.大数据介绍
大规模并行处理数据库
数据挖掘
分布式文件系统
分布式数据库
云计算平台
可扩展存储系统
一整套获取、存储、管理、计算、分析处理流程
Hadoop大数据生态圈
Spark生态圈
大数据体系通用架构方案
货嘀产品系统大数据体系实现
2.Spark 是什么
快速的 大规模数据处理 通用引擎
开源集群计算系统 快速分析 快速运行
Spark是Berkeley出品的一个cluster computation framework.它最初的目标是解决MapReduce磁盘读写的开销。Spark是Berkeley的BDAS(伯克利数据分析栈)的一个基础部分。
3.Spark的特点
1.运行速度快
Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。
易用性好
Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。(多API支持)
2.通用性强
Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理,Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即时查询、MLlib或MLbase的机器学习和GraphX的图处理,它们都是由AMP实验室提供,能够无缝的集成并提供一站式解决平台。
3.随处运行
Spark具有很强的适应性,能够读取HDFS、Cassandra、Hbase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。
4.Spark vs Hadoop
1.关于容错:
Hadoop容错机制通过备份迭代结果到其他分区,如果发生丢失则通过访问其他分区数据继续用于计算,造成磁盘空间压力,通常会同一个机架备份一份,跨机架备份一份,避免计算结果丢失运行失败的问题。
Spark的容错机制靠的是依赖链,有个lineage的概念即血统,如果某个阶段计算失败,可以通过血统往上推演,重新计算,得出结果,如果在流式计算阶段还有checkpoint的概念,不用从第一步开始计算,优先选择checkpoint的备份并结合血统关系继续计算,另外,如果计算过程中部分rdd作了缓存可以进一步提高重新计算的效率,达到容错机制。
2.关于存储效率:
MR在用于迭代计算过程中,每次都会将计算结果写入磁盘,并且复制备份,磁盘读写的开销很大,迭代运算效率较低,但较为稳定。
Spark的迭代过程中,计算结果一直在内存文件系统中,加快了读写速率,通过对缓存级别的配置,当内存不足时才会将一部分结果数据写入磁盘,这样大幅度提高了迭代计算的效率,由第一点可知,相比较hadoop而言节省了物理存储空间,加快了运算速率,但带来了内存的成本开销,容错性也有一定的优势,重点在于快。
Spark增加了序列化机制,从数据角度优化了数据读写效率。
3.关于通用性
Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、Lookup和Save等Actions操作。
5.Spark 编程模型
1.Spark的应用程序组成
a.Driver
b.Executor
2.Spark 应用程序基本概念
Application:基于Spark的用户程序,包含了一个Driver program 和集群中多个executor
Driver Program:运行Application的main()函数并且创建SparkContext,通常SparkContext代表Driver Program
Cluster Manager:在集群上获取资源的外部服务(例如:Standalone、Mesos、Yarn)
Worker Node:集群中任何可以运行Application代码的节点
Executor:是位某Application运行在worker node上的一个进程,改进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有个子独立的Executor
Task:被送到某个executor上的工作单元
Job:包含多个Task组成的并行计算,往往由Spark action催生,该术语可以经常在日志中看到
Stage:每个Job会被拆分很多组Task,每组Task被称为Stage,也可称TaskSet,该术语也可以经常在日志中看到
3.Spark 编程模型
6.Spark 运行架构
1.构建spark Appliction运行环境( 启动 SparkContext )
2.申请运行Executor资源, 并启动。
3.StandaloneExecutorBackend,executor向SparkContext申请Task。
4.SparkContext将应用程序代码发放给executor。
5.SparkContext构建成DAG图、将DAG图分解成Stage、将Taskset发送给Task Scheduler、最后由Task Scheduler将Task发放给Executor运行。
6.Task在Executor上运行,运行完毕释放所有资源。
总结
1.内存计算提供了支持 DAG 图的分布式并行计算框架,减少多次计算之间中间结果 IO 开销
2.提供 Cache 机制来支持多次迭代计算或者数据共享,减少 IO 开销
3.RDD 之间维护了血统关系,一旦 RDD fail 掉了,能通过父 RDD 自动重建,保证了容错性
4.移动计算而非移动数据, RDD Partition 可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算
5.使用多线程池模型来减少 task 启动开稍
6.shuffle 过程中避免不必要的 sort 操作
7.采用容错的、高可伸缩性的 akka 作为通讯框架
领取专属 10元无门槛券
私享最新 技术干货