15.大数据与MapReduce
第15章 大数据与MapReduce
大数据 概述
大数据: 收集到的数据已经远远超出了我们的处理能力。
大数据 场景
1 | 假如你为一家网络购物商店工作,很多用户访问该网站,其中有些人会购买商品,有些人则随意浏览后就离开。 |
MapRedece
Hadoop 概述
1 | Hadoop 是 MapRedece 框架的一个免费开源实现。 |
MapRedece 原理
MapRedece 工作原理
- 主节点控制 MapReduce 的作业流程
- MapReduce 的作业可以分成map任务和reduce任务
- map 任务之间不做数据交流,reduce 任务也一样
- 在 map 和 reduce 阶段中间,有一个 sort 和 combine 阶段
- 数据被重复存放在不同的机器上,以防止某个机器失效
- mapper 和 reducer 传输的数据形式为 key/value对

MapRedece 特点
1 | 优点: 使程序以并行的方式执行,可在短时间内完成大量工作。 |
Hadoop 流(Python 调用)
理论简介
例如: Hadoop流可以像Linux命令一样执行
1 | cat inputFile.txt | python mapper.py | sort | python reducer.py > outputFile.txt |
类似的Hadoop流就可以在多台机器上分布式执行,用户可以通过Linux命令来测试Python语言编写的MapReduce脚本。
实战脚本
1 | # 测试 Mapper |
MapReduce 机器学习
Mahout in Action
- 简单贝叶斯: 它属于为数不多的可以很自然的使用MapReduce的算法。通过统计在某个类别下某特征的概率。
- k-近邻算法: 高维数据下(如文本、图像和视频)流行的近邻查找方法是局部敏感哈希算法。
- 支持向量机(SVM): 使用随机梯度下降算法求解,如Pegasos算法。
- 奇异值分解: Lanczos算法是一个有效的求解近似特征值的算法。
- k-均值聚类: canopy算法初始化k个簇,然后再运行K-均值求解结果。
使用 mrjob 库将 MapReduce 自动化
理论简介
- MapReduce 作业流自动化的框架: Cascading 和 Oozie.
- mrjob 是一个不错的学习工具,与2010年底实现了开源,来之于 Yelp(一个餐厅点评网站).
1 | python src/python/15.BigData_MapReduce/mrMean.py < data/15.BigData_MapReduce/inputFile.txt > data/15.BigData_MapReduce/myOut.txt |
实战脚本
1 | # 测试 mrjob的案例 |
项目案例: 分布式 SVM 的 Pegasos 算法
Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
Pegasos 工作原理
- 从训练集中随机挑选一些样本点添加到待处理列表中
- 按序判断每个样本点是否被正确分类
- 如果是则忽略
- 如果不是则将其加入到待更新集合。
- 批处理完毕后,权重向量按照这些错分的样本进行更新。
上述算法伪代码如下:
1 | 将 回归系数w 初始化为0 |
开发流程
1 | 收集数据: 数据按文本格式存放。 |
收集数据
文本文件数据格式如下:
1 | 0.365032 2.465645 -1 |
准备数据
1 | def loadDataSet(fileName): |
分析数据: 无
训练算法
1 | def batchPegasos(dataSet, labels, lam, T, k): |
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/15.BigData_MapReduce/pegasos.py
运行方式: python /opt/git/MachineLearning/src/python/15.BigData_MapReduce/mrSVM.py < data/15.BigData_MapReduce/inputFile.txt
MR版本的代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/15.BigData_MapReduce/mrSVM.py
- 作者: 片刻 小瑶
- GitHub地址: https://github.com/apachecn/AiLearning
- 版权声明: 欢迎转载学习 => 请标注信息来源于 ApacheCN
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!










