sqark简介

Spark是什么

  • Spark是基于内存计算的大数据并行计算框架

  • Spark是MapReduce的替代方案

Spark与Hadoop

Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,Hadoop更广泛地说还包括在其生态系统上的其他系统.

Spark的优势

中间结果输出

  • 基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行储存和容错.当一些查询翻译到MapReduce任务是,往往会产生多个Stage,而这些串联的Stage又依赖于底层的文件系统来存储每一个Stage的输出结果.

  • Spark将执行模型抽象为通用的有向无环图执行计划(Directed Acyclic Graph,DAG).这可以将多个Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中.类似的引擎包括Dryad,Tez

数据格式和内存布局

Spark抽象出分布式内存储存结构弹性分布式数据集RDD,进行数据存储.RDD能支持粗粒度写操作,但对于读取操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引.

执行策略

MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark任务在Shuffle中不是所有情景都需要排序.所以支持Hash的分布式聚合,调度中采用更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存中缓存.

任务调度的开销

  • 传统的MapReduce系统,如Hadoop,是为了运行常达数小时的批量作业而设计的

  • Spark采用了事件驱动的类库AKKA来启动任务,通过线程池复用线程来避免进程或线程启动和切换开销

Spark能带来什么

打造全栈多计算范式的高效数据流水线

Spark支持复杂查询(SQL查询,流式计算,机器学习和图算法)

轻量级快速处理

  • 这是由于Scala语言的简洁和丰富的表达力

  • Spark充分利用和集成Hadoop等其他第三方组件

  • Spark通过将中间结果缓存在内存减少磁盘I/O来达到性能的提升

易于使用,Spark支持多语言

  • Spark支持通过Scala,Java,Python编写程序

  • 同事允许在Shell中进行交互计算

  • 用户可以利用Spark像书写单机程序一样编写分布式程序

与HDFS等存储层兼容

  • Spark可以独立运行,除了可以运行在当下的YARN等集群管系统之外,它还可以读取已有的任何Hadoop数据

  • 它可以运行在任何Hadoop数据源上,比如Hive,HBase,HDFS等

Spark的局限性

  • RDD模型适合的是粗粒度的全局数据并行计算,不适合细粒度的,需要异步更新的计算

  • 如果针对特定工作负载达到最优性能,还是需要使用一些其他的大数据系统

Spark生态系统BDAS

Spark

  • Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map函数和reduce函数的计算模型,还提供了更为丰富的算子,如filter,join,groupByKey等.

  • Spark将分布式数据集(RDD),实现了应用任务调度,RPC,序列化和压缩,并为运行在其上的上层组件提供API.

  • 底层采用Scala这种函数式语言书写成

  • 所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口

  • Spark将数据在分布式环境下分区,然后将作业转化为有向无环图(DAG),并分阶段进行DAG的调度和任务的分布式并行处理

Shark

  • Shark是构建在Spark和Hive基础上的数据仓库

  • Shark已经完成学术使命,终止开发,但其架构和原理仍具有借鉴意义

  • 提供了能够查询Hive中所储存数据的一套SQL接口,兼容现有的Hive QL语法

  • 熟悉Hive QL和SQL的用户可以基于Shark进行快速的Ad-Hoc,Reporting等类型的SQL查询

  • Shark底层复用Hive的解析器,优化器以及元数据存储和序列化接口

  • Shark将Hive QL编译转化为一组Spark任务,进行分布式运算

Spark SQL

  • Spark SQL提供在大数据上的SQL查询功能

  • Spark SQL使用Catalyst做查询解析和优化器,并在底层使用Spark作为执行引擎实现的SQL的Operator

  • 用户可以在Spark上直接书写SQL

Spark Streaming

  • Spark Streaming通过将流数据按指定时间片累积为RDD,然后将RDD进行批处理,进而实现大规模的流数据处理

GraphX

  • GraphX基于BSP模型,在Spark之上,封装类似Pregel的接口,进而大规模同步全局的图计算

  • 当用户进行多轮迭代时,基于Spark内存计算的优势尤为明显

Tachyon

  • Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS

  • 为了提供更高的性能,将数据存储剥离Java Heap

  • 用户可以通过Tachyon实现RDD或者文件的跨应用共享,并提高容错机制,保证数据的可靠性

Mesos

  • Mesos是一个资源管理框架

  • 提供类似于YARN的功能

  • 用户可以在其中插件式地运行Spark,MapReduce,Tez等计算框架任务

  • Mesos对资源和任务进行隔离,并实现高效的资源任务调度

BlinkDB

  • BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎

  • 允许用户通过查询准确性和查询时间之间做出权衡,完成近似查询

  • 核心思想:通过一个自适应优化框架,随着时间的推移,从原始数据建立并维护一组多维样本,通过一个动态样本选择策略,选择一个适当大小的示例,然后基于查询的准确性和响应时间满足用户查询需求

你可能感兴趣的:(大数据)