文本上的算法读书笔记四--分布式系统

第三篇 应用篇

如何计算的更快

随着数据量的爆炸式增长,如何存储和计算海量数据就成了一个问题。解决的方法之一是使用分布式系统,可以更快更好的完成用户的请求。

程序优化

程序执行时,经过将目标文件中的代码和数据从磁盘拷贝到主存,从存储器拷贝到寄存器堆,再从寄存器中拷贝到显示器上。

花费大量的时间把信息从一个地方拷贝到另一个地方。需要系统设计者考虑怎么设计存储器使拷贝操作尽可能快。

存储器结构,越上层的速度越快但存储量小,相反,越下层的速度越慢但存储量大。

程序的优化有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累加起来,这样完成统计词频。

猜你喜欢

转载自blog.csdn.net/qq_24495287/article/details/82988974