目录
发展
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的任务调度执行机制更优 |
特性
高性能
系统瓶颈从网络和磁盘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 | 解释型 | 高 | 高 | 支持(原生) |
网友评论