阿里巴巴工程师谈大数据-分布式计算,你想知道吗?

分布式存储(HDFS)和NoSQL数据库是解决大规模数据高效存储的问题, HDFS是底层的存储方案。NoSQL是在这底层技术之上的应用。
是解决数据存储的问题。
分布式计算是解决大规模数据高效处理的问题 。
是解决数据计算的问题
分布式并行编程可以大幅提高程序性能,实现高效的批量数据处理。分布式程序运行在大规模计算机集群上(廉价的服务器),可以并行执行大规模数据处理任务,从而获得海量的计算能力。
(1) MapReduce简介
MapReduce是一种并行编程模型,用于大规模数据集(大于1 TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度抽象到两个函数: Map和Reduce。
它极大地方便了分布式编程工作, 编程人员在不会分布式并行原理的情况下,也可以很容的将自己的程序运行在分布式系统上,完成海量数据集的计算。
摩尔定律失效: 大规模集成电路制作工艺将达到一个极限,从2005年开始摩尔定律逐渐失效,就不能把希望过多的寄托于性能更高的CPU上,人们开始借助于分布式并行编程来提高程序性能。获得海量计算能力。
谷歌公司最先提出了分布式并行编程模型MapReduce,Hadoop MapReduce是它的开源实现,后者比前者使用门槛低很多。
(2)MapReduce函数
MapReduce模型的核心思想是 “分而治之” 。
高度抽象到两个函数: Map和Reduce 。
2.1 Map函数:任务拆分
把一个大任务拆分成小任务在不同计算机上执行,通常是运行在存储数据的节点上。这样计算和数据就可以一起运行。不需要额外的数据传输开销。
Map任务的处理结果也保存在本地节点里面。
输入: Map < k1 , v1 >
输出: List < k2 , v2 >
2.2 Reduce函数 处理结果汇总
map函数最终的计算结果会作为Reduce函数的输入,最终由Reduce任务汇总输出最终结果。并把结果写入到分布式文件系统里面。
Reduce < k2 , List(v2) >
(3)设计理念
划重点:
MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销,尤其是在大规模数据环境下,这种开销尤为惊人,所以,移动计算要比移动数据更加经济。
本着这个理念,在一个集群中,只要有可能,MapReduce框架就会将
Map程序就近地在HDFS数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少了节点间的数据移动开销。
数据不动,CPU动
段誉是在天龙寺学的六脉神剑剑谱(数据),鸠摩智这个超强CPU也是去天龙寺抢的剑谱。

鸠摩智出场自配音响,足与扛着音响入战阵的乔帮主相媲美。
(4 ) 分布式计算举例

处理步骤:
1、 map函数拆分任务
名称节点拆分任务,保证在数据节点上本地计算
map函数输入
Map(小任务A, sum(10+20+30))
Map(小任务B, sum(40+50+60))
Map(小任务C, sum(70+80+90))
2、map结果输出
Map(小任务A, 60)
Map(小任务B, 150)
Map(小任务C,240)
输出的中间计算结果存储在本地, 数据节点里面。
3、Reduce汇总结果, map的输出,作为Reduce的输入
(由Shuffle函数负责对应他们之间的关系)
输入:
Reduce(结果汇总, sum(60+150+240) )
输出:Reduce(结果汇总,450)
(5)技术标签
MapReduce程序由三个步骤组成:
Map()步骤
其中名称节点导人输人数据,在小子集中解析这些数据,并将工作分配给数据节点。任何数据节点都将生成map0函数的中间结果,并以键/值对的形式存储在分布式文件中。输出文件位置在映射阶段结束时通知名称节点。
Shuffle ()步骤
‘洗牌’ :将中间结果分区排序整理后发给Reduce。
名称节点从数据节点收集答案,将值列表中共享相同密钥的键值对组合在一起,并按键值排序。排序可以是字典序、递增序或用户定义的序。
Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。
Reduce() 步骤
执行汇总操作。 并输出计算结果。
Hadoop框架是用Java实现的,但是MapReduce应用程序则不一定要用Java来写。
更多详细免费视频点击-分布式计算