数据并行

1、数据并行
技术上
机器学习 = 统计 + 最优化方法
数据科学 = 机器学习 + 计算机系统(map reduce)

特征工程(把原始数据变成向量)
bag of words,磁带模型

GFS几个重要的观点
数据存储于成百上千额服务器中
大数据块减少元数据的开销
使用商用硬件->失败是很正常的
    -失败是不可避免的,所以买便宜的硬件
没有复杂的一致性模型
    -单写者,数据只能添加
    -避免互相等待
ODM制造业的发展

embarrassing parallel
GFS已经解决的问题:数据分块

2、map reduce模型
map(k1, v1) - > split (shards) ,输入的就是原始数据的类型-> list (k2, v2)
reduce(k2, list(v2)) -> list(v2)
中间的k2就是想按哪个排序

itorator非常好的面向对象的方法,在抽象的数据结构上做的
一个map函数只处理一个数据点,maper机器处理的是一个数据块,一个map任务可以调多次map的函数。
map reduce一般处理几十秒到几分钟比较合适
文件系统目录是存在机器的内存里的,目录不能太多
shard是写在本地的磁盘上的,不放内存里(1、放不下,2、容易丢),不直接给reduce(1、通讯时间,不在计算的时候还做网络通讯;2、reduce中间死了(map机器死了);3、同一套机器,reduce还没起呢)
例题:map机器运行了一天,都没往reduce上送,1000台。需要多长时间reduce才能开始呢?
答:任务分给其他机器一起,且不能在map还没完的时候就开始reduce排序,但是可以先传着。

reduce得到shard是自己拉过来的,而不是map推过来的。(归并排序)

3、mapreduce一些性能优化讨论
1)慢的工作节点极大地延长完成时间(independent idempotent)
解决方案:接近结束时,生成任务备份
    - 谁先完成,谁“获胜”
所有可以重试的东西,都是可以幂等的。mapreduce会自动跳过烂的数据。
2)故障处理

4、总结
重要理解:严格的键值对模型(同样粒度的、确定的、幂等的/没有副作用的)
用来做什么:google(建立索引、文章聚类(迭代,简单、容错)、统计性的机器翻译)
yahool
实际上的问题:out of memory
根本问题:hot key
large intermediate results,中间结果太大(NLP的库一般写的都很烂,不会考虑用多少内存)
solution:
(垃圾收集机制)
mapreduce缺点(聪明的系统抵不过傻得用户,世界上不需要最优解,只需要不是太傻的解)
1、极其严格的数据流
2、常见的操作必须手写代码

5、灵活的数据处理:DRYAD
google很土,微软出高端的东西回应它。yahool曾经一度比google聪明,research。
pig latin代码:group … by; join
6、更高层次的抽象
7、另一个更高层次的抽象:DRYAD-LINK

hadoop生态系统
区别,mapreduce能用,数据库不能。
数据库考虑的是能写。
大数据系统设计的思想,要做什么事就设计一个什么样的系统,没有很大的通用性。

猜你喜欢

转载自blog.csdn.net/cristina__jing/article/details/79493767