第三篇 应用篇
如何计算的更快
随着数据量的爆炸式增长,如何存储和计算海量数据就成了一个问题。解决的方法之一是使用分布式系统,可以更快更好的完成用户的请求。
程序优化
程序执行时,经过将目标文件中的代码和数据从磁盘拷贝到主存,从存储器拷贝到寄存器堆,再从寄存器中拷贝到显示器上。
花费大量的时间把信息从一个地方拷贝到另一个地方。需要系统设计者考虑怎么设计存储器使拷贝操作尽可能快。
存储器结构,越上层的速度越快但存储量小,相反,越下层的速度越慢但存储量大。
程序的优化有3个方向:
1).系统级(分布式系统)
2).算法/数据结构级(傅里叶变换,trie树,优先队列,空间换时间)
3).代码级
尽可能使用上层存储器,访问速度快,少调用函数,参数尽可能少,参数尽可能是引用和指针,减少拷贝,数据尽可能少
局部性原理。
为什么要分布式系统?
分布式模型大概有这几种:
(1)多线程,最基本的方法
(2)graphics Processing units ,利用图形处理器的高度并行结构来提高速度
(3)Message Passing Interface,一种消息传递编程模型
(4)MapReduce
设计好分布式系统,需要考虑的事情比如:集群负载均衡,数据的正确性和完整性,服务器的错误处理等等。
4.3 Hadoop
软件平台,是Apache 开源组织的一个分布式计算开源框架,可以很容易地开发和运行处理海量数据的应用。核心设计是MapReduce和HDFS,可以认为是基于HDFS的MapReduce的实现。
分布式分解系统(HDFS)
采用master/slave架构。包括Namenode和Datanode。
Namenode是中心服务器,负责管理文件系统的名字空间以及客户端对文件的访问。
Datanode一般是一个节点一个,负责管理所在节点上的存储。
MapReduce
用来处理键/值对。Map输出键值对,Reduce输出键值对。
如统计词频,假设有一堆分好的词,现在的任务是统计每个词出现的次数。
首先将文本分成若干份,然后每一份数据,分配给一个Mapper,将每个词赋值为1,然后按照某种规律(字母序,这样同一个词才能分配到一个Reducer)发给相应的Reducer,Reducer就是把相同的key的value累加起来,这样完成统计词频。