一,spark是什么?
Spark是基于海量数据的分布式分析引擎。
Spark是在总结Hadoop的经验教训的基础上,基于MapReduce思想的分布式计算框架,包含所有Hadoop的优点,但不同于Hadoop中MapReduce将中间结果存储在Hdfs,spark的中间输出和结果可以保存在内存,从而避免了存储到Hdfs所需要的磁盘IO和网络传输,性能大为提升。
Spark是分布式计算引擎,其没有存储功能,所以Spark需要指定数据源和数据输出。
二,spark的特点
速度快
官网案例表明Spark比Hadoop快100倍,这得益于Spark基于DAG的先进调度机制、查询优化引擎、物理执行引擎,针对海量数据批式处理和流式处理都能保证高性能。
内存计算
-
spark在计算过程中尽量不把数据存储的文件系统,而是直接保存在内存中,这是Spark比Hadoop快的根本原因。
-
mapreduce任务以进程的方式运行在yarn集群中,比如程序中有100个MapTask,一个task就需要一个进程,这些task要运行就需要开启100个进程。
spark任务以线程的方式运行在进程中,比如程序中有100个MapTask,后期一个task就对应一个线程,这里就不再是进程,这些task需要运行,这里可以极端一点:只需要开启1个进程,在这个进程中启动100个线程就可以了。
进程中可以启动很多个线程,而开启一个进程与开启一个线程需要的时间和调度代价是不一样。 开启一个进程需要的时间远远大于开启一个线程。
易用性
Spark算子众多,语义丰富,可以通过 java/scala/python/R/SQL等不同语言快速去编写spark程序
通用性
spark框架不在是一个简单的框架,可以把spark理解成一个spark生态系统,内部包含很多模块,基于不同的应用场景可以选择对应的模块去使用,见下图:
- sparksql:通过sql去开发spark程序做一些离线分析
- sparkStreaming/Structured Streaming:实时计算
- Mlib:它封装了一些机器学习的算法库
- Graphx:图计算