Spark相关知识介绍

Spark解决的问题 spark的设计初衷 spark和Mapreduce的对比 Spark的编程

1 Spark解决的问题

spark产生:替代MapReduce计算,解决MapReduce计算缓慢的问题

注:Hive解决MapReduce编程复杂的问题

Hadoop生态体系:hdfs+zookeeper +mapreduce/hive+hbase+storm+mahout+其他工具;

  • hdfs做存储
  • zookeeper做协调
  • mapreduce/hive做计算
  • hbase解决实时的增删改查
  • storm做流式处理
  • mouaot做机器学习

spark体系:
hdfs+zokeeper +spark+hbase+storm+mahout+其他工具;

2 spark的设计初衷

设计一个统一的计算引擎解,完美的融入hadoop生态体系决所有的各类型计算;

  • 1.离线批处理;
  • 2.交互式查询
  • 3.图计算
  • 4.流失计算
  • 5.机器学习/迭代计算
  • 6.Spark支持R语言 科学计算,数据分析

3 spark和Mapreduce的对比

3.1 减少磁盘IO

MapReduce:基于磁盘,计算结果放到磁盘中
Spark: 基于内存(尽量把临时数据缓存到内存)

3.2 增加并行度:

MapReduceMapTask ReduceTask 一个进程一个Task(默认)
sparkShuffleMapTask ResultTask 使用的是一个线程

3.3避免重复计算:

可以把数据强制持久化到内存中,以供其他的task使用。

3.4 可选的shuffle和排序

可选的shuffle:

MapReduce:提供一种通用的shuffleCombiner Partitioner sorter,shuffle的策略是一个固定的套路,如果设置了combiner会执行Combiner,如果设置的ReduceTask的个数超过1,那么Partitioner就会执行数据的分区;如果有reducer节段的话,那么sorter的数据排序就一定会执行。

Spark:提供了四重shuffle策略,分别适用不同的场景;HashShuffle,SortShuffle

可选的排序:
MapReduce:如果有reducer节段的话,那么sorter的数据排序就一定会执行;

Spark:用户指定执行,否则不排序;

3.5 灵活的内存管理策略

要多少给多少,可以合理的分配到底哪个阶段哦,哪个组件,使用多少。
MapReduceMapTask JVM在启动的时候就指定了最多能使用多少内存,如果超出就OOM

Sparkworker启动了很多个进程executor,每个executor并发运行多个线程,每个线程执行一个程序;

每个executor和每一个task都会指定固定的内存大小去使用,如果excutor的内存固定,task的内存也有上限,也可能出现OOM,但是spark的任务线程,出来能使用JVM的内存之外,还可以使用操作系统的内存。

6 Spark的编程

1.获取编程入口
SparkContext
SqlContext/HiveContext
StreamingContext
2.通过编程入口加载数据
RDD
DataFrame
DataSet
3.对数据进行处理得到结果
各种算子(80个)
4.对结果进行处理
测试:打印
线上:存储到各种数据存储地(文件系统+数据库)
5.关闭编程入口


本文作者:foochane
本文链接:https://foochane.cn/article/2019061301.html
版权声明:本文采用 知识共享署名 4.0 国际许可协议 ,转载请注明出处!
  目录