海量数据处理的几种方案扫盲

来源:互联网 发布:中医档案软件 编辑:程序博客网 时间:2024/06/03 17:40

先摘录如下:

hadoop扫盲篇


一、Hadoop是什么?

答:是google的核心算法MapReduce的一个开源实现。用于海量数据的并行处理。

hadoop的核心主要包含:HDFS和MapReduce
      HDFS是分布式文件系统,用于分布式存储海量数据。
      MapReduce是分布式数据处理模型,本质是并行处理。


二、多少数据算海量数据?

答:个人认为,TB(1024GB)级别往上就可以算海量数据。


三、谁在使用hadoop?

N多大型互联网公司,这里列的比较全:
http://wiki.apache.org/hadoop/PoweredBy

在国内,包括中国移动、百度、网易、淘宝、腾讯、金山和华为等众多公司都在研究和使用它


四、用它来做什么?

答:海量数据处理。。。似乎有点虚呵呵,我能想到的用hadoop的地方:
1、最简单的,做个数据备份/文件归档的地方,这利用了hadoop海量数据的存储能力
2、数据仓库/数据挖掘:分析web日志,分析用户的行为(如:用户使用搜索时,在搜索结果中点击第2页的概率有多大)
3、搜索引擎:设计hadoop的初衷,就是为了快速建立索引。
4、云计算:据说,中国移动的大云,就是基于hadoop的
5、研究:hadoop的本质就是分布式计算,又是开源的。有很多思想值得借鉴。


总之,你可以把hadoop看成是:分布式计算框架(或系统、或平台),可以说是用来做云计算的,呵呵。(云计算的本质就是:海量数据存储/并行处理,即hadoop中的HDFS和MapReduce)


MapReduce扫盲篇


1、MapReduce来龙去脉

MapReduce是一个说难懂也难懂、说好懂也好懂的概念。
说它难懂,是因为,如果你只理论上的去学习、去理解,确实很难懂。
说它好懂,是因为,如果你亲手在hadoop运行过几个MapReduce的job,并稍微学点hadoop的工作原理,基本上也就理解MapReduce的概念了。

所以,有句话说的特别好:“如果将编程比作运动的话,那么它绝对不是表演项目,而是竞技项目。”(摘自《Erlang程序设计》第10页)

但是,在这里,我还是想向不了解MapReduce的同学们介绍一下MapReduce。
MapReduce借用了函数式编程的概念,是google发明的一种数据处理模型。因为google几乎爬了互联网上的所有网页,要为处理这些网页并为搜索引擎建立索引是一项非常艰巨的任务,必须借助成千上万台机器同时工作(也就是分布式并行处理),才有可能完成建立索引的任务。

所以,google发明了MapReduce数据处理模型,而且他们还就此发表了相关论文。


后来,Doug Cutting老大就根据这篇论文硬生生的复制了一个MapReduce出来,也就是今天的Hadoop。如果没听说过hadoop,请参考《hadoop扫盲篇》。


2、MapReduce工作过程

知道了MapReduce是分布式数据处理编程模型后,下面我们看看它是怎么工作的。

MapReduce处理数据过程主要分成2个阶段:map阶段和reduce阶段。先执行map阶段,再执行reduce阶段。

1) 在正式执行map函数前,需要对输入进行“分片”(就是将海量数据分成大概相等的“块”,hadoop的一个分片默认是64M),以便于多个map同时工作,每一个map任务处理一个“分片”。
2) 分片完毕后,多台机器就可以同时进行map工作了。
   map函数要做的事情,相当于对数据进行“预处理”,输出所要的“关切”。
   map对每条记录的输出以<key,value> pair的形式输出。
3) 在进入reduce阶段之前,还要将各个map中相关的数据(key相同的数据)归结到一起,发往一个reducer。这里面就涉及到多个map的输出“混合地”对应多个reducer的情况,这个过程叫做“洗牌”。
4) 接下来进入reduce阶段。相同的key的map输出会到达同一个reducer。
   reducer对key相同的多个value进行“reduce操作”,最后一个key的一串value经过reduce函数的作用后,变成了一个value。


上面粗略的介绍了MapRedcue。来发张图,更有利于理解: