Spark:基于内存的分布式的计算框架,是一个针对海量数据处理的非常快的通用的计算引擎(计算框架)。
特点:
先进架构 采用Scala语言编写,底层采用actormodel的akka作为通讯框架,代码十分简洁高效。基于DAG图执行引擎,减少多次计算中间结果写到HDFS的开销。建立在统一抽象的RDD之上,以基本一致的方式应对不同的大数据处理。
高效 基于cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。基于内存运算比MR要快100倍,基于硬盘的运算也比MR快10倍。
易用 提供广泛的数据集操作类型(20+种),而MR只有两种。Spark支持Java,Python和ScalaAPI,支持交互的Python和Scala的shell
整体解决方案 Spark内存中批处理 SparkSQL交互式查询 SparkStreaming流式计算 Graphx和MLib提供的常用图计算和机器学习算法。
与Hadoop无缝链接 可以使用Yarn作为集群管理框架,读取HDFS、Hbase等一切Hadoop数据。
核心组件:
SparkCore: 核心部分 包含Spark基本功能(任务调度 内存管理 容错机制等)
SparkSQL: Spark中交互式处理模块
SparkStreaming: Spark中流式数据处理的模块
SparkMLib:Spark机器学习相关模块 => Mahout
SparkGraphX: Spark中图形计算的模块
SparkManagers:集群管理 (HadoopYARN、ApacheMesos、Spark自带的单独调度器)
spark与mapreduce的比较
MapReduce: 分布式的计算框架 -> Hive问题:shuffle:大文件的排序+读写磁盘+网络传输 => 比较慢只有两种执行算子/API: MapTask(数据转换+过滤)和ReduceTask(数据聚合) ==> 定制化稍微有点差。不适合迭代式的计算。对于需要快速执行的产生结果的应用场景不适合。Spark:为了解决MapReduce执行慢、不适合迭代执行的问题。
Spark计算的核心思路就是将数据集缓存在内存中加快读取速度,Spark的中间结果放到内存中,一次创建数据集,可以多次迭代运算,减少IOK开销。适合运算比较多的ML和DL。