MR和Hadoop已被证明是高性能处理海量数据的最佳解决方案。然而,MR在迭代计算中性能不足:多个MR作业之间的输出必须被写入HDFS。在单个MR作业中,因为MR框架存在的一些缺点也存在性能不足。
1 Apache Spark是什么?
- 一个快速的企业级大规模数据处理引擎,可以与Apache Hadoop进行互操作
- 用Scala编写的。Scala是一种兼顾面向对象和函数式的编程语言,在JVM中运行
- Spark让应用程序在处理过程中能可靠地在内存中分发数据。其能够让应用程序避免低效率磁盘I/O,以内存速度进行计算。
- 相比MR,Spark程序在内存储存模式下执行的速度快100倍,在磁盘存储模式下速度快10倍
- 通过Scala、python和R的交互式shell,为java、python和R语言提供本地支持
- Spark提供一系列的库
- Spark可以运行在Hadoop、Mesos、standalone集群管理器,内部硬件系统或云计算平台上
Spark是一个计算引擎,可以把数据存储在内存里或Tachyon上进行处理。Spark具有从存储在HDFS或Hadoop API支持的其他存储系统中的任何文件创建分布式数据集的能力。
Spark不是Hadoop,不需要Hadoop运行它。Spark支持文本文件、序列文件、Avro、Parquet和其他任何Hadoop输入格式。
2 MapReduce的问题
- MR为每个映射器和哈建起创建单独的JVM,启动JVM需要相当长的时间
- MR代码需要大量样板代码。程序员要从映射(map)化简(reduce)角度设计业务问题,很难开发。
- MR作业在每个作业之间将数据写入磁盘,不适合迭代处理
- 更高级别的抽象能为MR作业提供更好的编程手段。
- MR也没有理想API
MR速度慢是因为MR作业中每个作业都把数据存储在磁盘上,对同一数据集的多查询会分别读取数据,产生大量磁盘读写。
Spark把中间数据存储在内存中,根据需要多次重复使用,提高了性能。
3 Spark的架构
Spark的架构组件有 Spark Core,Spark SQL,Dataset、DataFrame、Spark Streaming、Structured Streaming、Mlib、GraphX、SparkR