Hadoop集群概念设计

Hadoop是什么
什么是Hadoop集群
Hadoop能做什么

Hadoop是什么?

  Hadoop是一种分析和处理大数据的软件平台,是Appach的一个用Java语言所实现的开源软件的加框,在大量计算机组成的集群当中实现了对于海量的数据进行的分布式计算。
  Hadoop的框架最核心的设计就是:Hadoop Distributed File System(以下简称HDFS)和MapReduce.HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
  Hadoop就是一个分布式计算的解决方案。

什么是Hadoop集群

  先给出图,看下面两个图:Master节点和Slave1、2节点设计图和Hadoop集群设计图。

Master节点和Slave1节点设计图
Hadoop集群概念设计

Hadoop集群设计图
Hadoop集群概念设计
看不懂没关系,请往下看。

  大数据在Hadoop处理的流程可以参照下面简单的图来进行理解:数据是通过了Hadoop的集群处理后得到的结果。
Hadoop集群概念设计
HDFS,Hadoop的分布式文件系统:
  大文件被分成默认64M一块的数据块分布存储在集群机器中.如下图中的文件 data1被分成3块,这3块以冗余镜像的方式分布在不同的机器中。
Hadoop集群概念设计
HDFS的关键元素:
  1)Block:将一个文件进行分块,通常是64M。
  2)NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一 一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在 Hadoop2.* 开始支持 activity-standy 模式----如果主 NameNode 失效,启动备用主机运行 NameNode。
  3)DataNode:分布在廉价的计算机上,用于存储Block块文件。
MapReduce:
Hadoop为每一个input split创建一个task调用Map计算,在此task中依次处理此split中的一个个记录(record),map会将结果以key–value 的形式输出,hadoop负责按key值将map的输出整理后作为Reduce的输入,Reduce Task的输出为整个job的输出,保存在HDFS上。
Hadoop集群概念设计
  在了解到Hadoop的框架最核心的两个设计之后,我们看下什么是Hadoop的集群。

  Hadoop的集群主要由 NameNode,DataNode,Secondary NameNode,JobTracker,TaskTracker组成.如下图所示:
Hadoop集群概念设计
● NameNode中记录了文件是如何被拆分成block以及这些block都存储到了哪些DateNode节点.NameNode同时保存了文件系统运行的状态信息.

● DataNode中存储的是被拆分的blocks.

● Secondary NameNode帮助NameNode收集文件系统运行的状态信息.

● JobTracker当有任务提交到Hadoop集群的时候负责Job的运行,负责调度多个TaskTracker.

● TaskTracker负责某一个map或者reduce任务.

  全部了解完之后,我们回看一开始的两个图:Master节点和Slave1节点设计图和Hadoop集群设计图
Master节点和Slave1节点设计图
Hadoop集群概念设计
Hadoop集群设计图
Hadoop集群概念设计

hadoop能做什么?

  hadoop擅长日志分析,facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析;淘宝搜索中的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。(2012年8月25新更新,天猫的推荐系统是hive,少量尝试mahout!)  
下面举例说明:  
  设想一下这样的应用场景. 我有一个100M 的数据库备份的sql 文件.我现在想在不导入到数据库的情况下直接用grep操作通过正则过滤出我想要的内容。例如:某个表中 含有相同关键字的记录那么有几种方式,一种是直接用Linux的命令 grep 还有一种就是通过编程来读取文件,然后对每行数据进行正则匹配得到结果好了 现在是100M 的数据库备份.上述两种方法都可以轻松应对.  
  那么如果是1G , 1T 甚至 1PB 的数据呢 ,上面2种方法还能行得通吗? 答案是不能.毕竟单台服务器的性能总有其上限.那么对于这种 超大数据文件怎么得到我们想要的结果呢?  
  有种方法 就是分布式计算, 分布式计算的核心就在于 利用分布式算法把运行在单台机器上的程序扩展到多台机器上并行运行.从而使数据处理能力成倍增加.但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求.导致了成本变得非常高.  
  Hadoop就是为了解决这个问题诞生的.Hadoop可以很轻易的把 很多linux的廉价pc 组成 分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据mapreduce的规则定义好接口方法,剩下的就交给Hadoop. 它会自动把相关的计算分布到各个结点上去,然后得出结果. 
  例如上述的例子 :Hadoop 要做的事 首先把 1PB的数据文件导入到 HDFS中, 然后编程人员定义好 map和reduce, 也就是把文件的行定义为key,每行的内容定义为value , 然后进行正则匹配,匹配成功则把结果 通过reduce聚合起来返回.Hadoop 就会把这个程序分布到N 个结点去并行的操作.  
  那么原本可能需要计算好几天,在有了足够多的结点之后就可以把时间缩小到几小时之内.  
  这也就是所谓的大数据云计算了.如果还是不懂的话再举个简单的例子  
  比如1亿个1相加得出计算结果, 我们很轻易知道结果是 1亿.但是计算机不知道.那么单台计算机处理的方式做一个一亿次的循环每次结果+1  
  那么分布式的处理方式则变成 我用 1万台 计算机,每个计算机只需要计算 1万个 1 相加 然后再有一台计算机把 1万台计算机得到的结果再相加,从而得到最后的结果。 
  理论上讲, 计算速度就提高了 1万倍. 当然上面可能是一个不恰当的例子.但所谓分布式,大数据,云计算 大抵也就是这么回事了.
(to be continued )

快速链接

上一篇 汇总目录 下一篇
云计算数据平台-hadoop集群