目录
发展
MapReduce
MapReduce = Map + Reduce
2004年Google发表了《MapReduce: Simplified Data Processing on Large Clusters》
该论文论述了: MapReduce的编程模型 以及 如何在大量廉价机器上稳定地实现超大规模的并行数据处理
Hadoop
2004年Doug Cutting和Mike Cafarella在为他们的搜索引擎爬虫Nutch实现分布式架构的时候看到了Google的GFS&MapReduce论文
之后的几个月里按照论文实现出一个简易版的HDFS和MapReduce 这也就是Hadoop的最早起源
后来他们加入了Yahoo 并在Yahoo真正完善、推广和落地Hadoop大数据
Spark
2009年诞生于加州大学伯克利分校AMP(Algorithms、Machines, and People)实验室
Spark最初的设计目标是使数据分析更快: 不仅运行速度快 也要能快速、容易地编写程序
后来Spark核心开发团队还成了商业公司Databricks
| MapReduce | Spark | |
|---|---|---|
| 编程模型 | Map和Reduce | 不局限于Map和Reduce 还提供多种数据集操作类型 |
| 运算效率 | 每次迭代都要向磁盘写入、读取中间数据 I/O开销大效率低 |
中间结果直接存放到内存 更高的迭代运算效率 |
| 调度机制 | N/A | 基于DAG的任务调度执行机制更优 |

Logistic regression in Hadoop and Spark
特性
高性能
系统瓶颈从网络和磁盘I/O 转移到CPU利用率 => Spark2.x的Tungsten项目
Memory Management and Binary Processing: 绕过JVM的GC 类似C语言直接申请和管理内存 / 减少Java对象使用 例如使用BytesToBytesMap替代HashMap
Cache-aware Computation: 提高缓存命中 提高迭代运算效率 例如数据挖掘、机器学习
Code generation: 优化Spark SQL代码生成 提升CPU利用率
通用性
| 过去 | Spark | |
|---|---|---|
| 批处理 | MapReduce Apache Hive / Apache Pig |
Spark Core Spark SQL |
| 流处理 | Apache Storm | Spark Streaming |
| 机器学习 | Apache Mahout | Spark MLlib |
| 图计算 | Apache Hama | Spark GraphX |
多语言
| 编程语言 | 类型 | 开发效率 | 执行效率 | 交互编程 |
|---|---|---|---|---|
| Scala | 编译型 | 中 | 高 | 支持(原生) |
| Java | 编译型 | 低 | 高 | 不支持 |
| Python | 解释型 | 高 | 低 | 支持(PySpark) |
| SQL | 解释型 | 高 | 高 | 支持(原生) |