免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2095 | 回复: 0

[Hadoop&HBase] hadoop中的实现细节 [复制链接]

论坛徽章:
0
发表于 2011-12-23 02:39 |显示全部楼层
<DIV>
<DIV class=Section0 style="LAYOUT-GRID:  15.6pt none">
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 15pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">浅谈</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 15pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">hadoop<FONT face=宋体>云计算模型</FONT></SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 15pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">沈岩</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">(首都师范大学信息工程学院&nbsp;北京&nbsp;<FONT face="Times New Roman">1000</FONT></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">48</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">)</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">摘要:</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">随着人们的需求的不断增加,传统的互联网技术已经不能够满足人们的需要。为了有效的解决数据海啸问题,国内外提出了很多不同的模型,但是以</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">google<FONT face=宋体>的</FONT><FONT face="Times New Roman">MapReduce</FONT><FONT face=宋体>并行模型被广泛的采用。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">关键词:</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HBase&nbsp;<FONT face=宋体>并行计算&nbsp;</FONT><FONT face="Times New Roman">MapReduce</FONT><FONT face=宋体>模型&nbsp;</FONT><FONT face="Times New Roman">hadoop&nbsp;</FONT><FONT face=宋体>云计算</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p16 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">1</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;引言</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;数据海啸的出现使得传统的oracle数据库及其它商业数据库收到了相应的冲击。由于google技术上的需要,他们自主研发的MapReduce并行计算框架应运而生,而由于google的该项目并不开源,所以Hadoop诞生了。现在hadoop几乎成为了云计算的代名词。利用hadoop可以对集群进行控制,同时也可以更加便捷的构建企业级的应用。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hadoop是google的云计算的开源的实现,是Apache开源组织的一个分布式框架</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">,本文以hadoop中的HDFS及HBase的相关技术来剖析hadoop的实现</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p16 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">hadoop的优点</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p16 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">hadoop的开源特性给hadoop增加了很多的优势,很多的开发者可以利用hadoop研发自己的产品,而且能够真正的解决大规模的相对无关的数据。Hadoop的开发者当初的目标就是实现google的三大核心技术,并将其推广到大众。并且在批处理作业的大规模分布式计算上有很卓越的成就。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p16 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hadoop的缺点</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p16 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hadoop的缺点也是不容小觑的。没有一种编程模型是适合所有情况的,hadoop自身实现非常的简单并没有实现太多的复杂的技术。当数据之间关联度比较大的时候,Hadoop的MapReduce编程模型的效果就会大大折扣。而且MapReduce的执行效果对于批处理作业有很好的效果,但是对于实时性较强的应用来说就不合适。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hadoop的使用环境:</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">1)&nbsp;</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">硬件错误是常态而不是异常态。云计算环境有成千上万个server节点,大多数的硬件可能出错的概率较高,所以如何进行错误恢复和检测是hadoop文件系统的技术核心。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">2)&nbsp;</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">访问文件与其他的应用不同,因为普通的文件访问追求低延迟,而在hadoop中访问文件时,hadoop系统追求的是高吞吐量。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">3)&nbsp;</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">以支持大数据集合为目标,一个存储在上面的典型文件大小一般都在千兆至</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">T</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">字节,一个单一</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">实例应该能支撑数以千万计的文件。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">4)&nbsp;</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好,</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">提供给应用这样的接口。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; VERTICAL-ALIGN: super; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">【</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; VERTICAL-ALIGN: super; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">2</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; VERTICAL-ALIGN: super; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">】</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hadoop结构</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">H</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">adoop</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">采用</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">master/slave</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">架构。一个</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">集群是有一个</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">和一定数目的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">组成。在</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">namenode上同时有jobtracker任务在运行负责将任务分发到不同的节点上。在下图中可以看到在伪分布式系统中namenode节点和datanode节点的输出信息的不同。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p19 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 21pt"><IMG height=95 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-31.png" width=494><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">图表&nbsp;</SPAN><SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">1</SPAN></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;hadoop<FONT face=宋体>伪分布式系统的节点信息</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">是一个中心服&nbsp;务器,负责管理文件系统的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">namespace</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">和客户端对文件的访问。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">在集群中分布在各个节点上,负责管理节点上它们附带的存储。在内&nbsp;部,一个文件其实分成一个或多个</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">block</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">,每个块一般在内存当中是</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">128M</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">,所以如果文件中出现了很多的细小的文件的时候,会侵蚀大量的内存空间,这对</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS非常不利,但是hadoop采用了har归档文件的方式将这些文件放在一个归档文件当中,有效的解决了这个问题,</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">这些</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">block</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">存储在</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">集合里。在</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS文件中的操作是类似于本地文件的操作下面的例子是列出当前目录里面的所有的文件的内容。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><IMG height=229 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-325.png" width=554><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p19 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'">图表&nbsp;</SPAN><SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'">2</SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'">&nbsp;HDFS&nbsp;<FONT face=黑体>文件操作</FONT></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">执行文件系统的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">namespace</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">操作,例如&nbsp;打开、关闭、重命名文件和目录,同时决定</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">block</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">到具体</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">节点的映射。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">在</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">的指挥下进行</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">block</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">的创&nbsp;建、删除和复制。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">和</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">都是设计成可以跑在普通的廉价的运行</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">linux</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">的机器上。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">采用</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">java</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">语言开发,因此可以部&nbsp;署在很大范围的机器上。一个典型的部署场景是一台机器跑一个单独的</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">节点,集群中的其他机器各跑一个</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">实例。这个架构并不排&nbsp;除一台机器上跑多个</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Datanode</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">,不过这比较少见</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 21pt"><SPAN><IMG height=435 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-4296.png" width=508></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">&nbsp;</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p19 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'">图表&nbsp;</SPAN><SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'">3</SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;HDFS<FONT face=黑体>的结构示意图</FONT></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">HDFS保证可靠性的相关措施</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">1)</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">冗余备份,为了容错,文件的所有数据块都会有副本(副本数量就是备份因子)。HDFS都是一次性写入的,保证任何时候都有一个写者。Datanode使用本地文件系统存储HDFS中的数据,他对HDFS一无所知,只用一个一个的文件存储HDFS中的数据块,当Datanode启动的时候,他会遍历HDFS,产生一份HDFS数据块与本地文件的对应关系的报告。并把这个报告给namenode节点,块报告中包含了所有的datanode节点的所有块的列表。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">2)</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">副本存放,当复制因子是3的时候,hadoop会采用机架感知的策略,将一个副本放在本地的机架里,一个副本放在同一个机架里,一个副本放在不同的机架里。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="MARGIN-TOP: 6px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 22px; WIDTH: 184px; POSITION: absolute; HEIGHT: 104px"><IMG height=104 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-27087.png" width=184></SPAN><SPAN style="MARGIN-TOP: 31px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 309px; WIDTH: 65px; POSITION: absolute; HEIGHT: 69px"><IMG height=69 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-18106.png" width=65></SPAN><SPAN style="MARGIN-TOP: 31px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 227px; WIDTH: 65px; POSITION: absolute; HEIGHT: 69px"><IMG height=69 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-15337.png" width=65></SPAN><SPAN style="MARGIN-TOP: 7px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 210px; WIDTH: 184px; POSITION: absolute; HEIGHT: 104px"><IMG height=104 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-11453.png" width=184></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="MARGIN-TOP: 9px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 129px; WIDTH: 65px; POSITION: absolute; HEIGHT: 69px"><IMG height=69 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-19593.png" width=65></SPAN><SPAN style="MARGIN-TOP: 11px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 46px; WIDTH: 65px; POSITION: absolute; HEIGHT: 69px"><IMG height=69 src="file:///C:/DOCUME~1/shenyan/LOCALS~1/Temp/ksohtml/wps_clip_image-11258.png" width=65></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p19 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p19 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'">图表&nbsp;</SPAN><SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Cambria'; mso-spacerun: 'yes'">4</SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'">&nbsp;&nbsp;机架感知的策略</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">3)</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">心跳检测</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Namenode<FONT face=宋体>周期性的从</FONT><FONT face="Times New Roman">datanode</FONT><FONT face=宋体>接受心跳包和块报告,收到心跳包说明</FONT><FONT face="Times New Roman">datanode</FONT><FONT face=宋体>工作正常。</FONT><FONT face="Times New Roman">Namenode</FONT><FONT face=宋体>会标记最近没有心跳的</FONT><FONT face="Times New Roman">datanode</FONT><FONT face=宋体>为死机,</FONT><FONT face="Times New Roman">namenode</FONT><FONT face=宋体>会不断的检测这些需要复制的数据块,并在需要的时候重新复制。原因主要是由于</FONT><FONT face="Times New Roman">datanode</FONT><FONT face=宋体>上的节点不可用,数据副本损坏,</FONT><FONT face="Times New Roman">datanode</FONT><FONT face=宋体>节点磁盘错误或复制因子增大等等。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">剖析<FONT face="Times New Roman">MapReduce</FONT><FONT face=宋体>工作机制</FONT></SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">1.</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">客户端:提交<FONT face="Times New Roman">MapReduce</FONT><FONT face=宋体>作业</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">2.</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Jobtracker<FONT face=宋体>负责协调作业运行&nbsp;类:</FONT><FONT face="Times New Roman">JobTracker</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">3.</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Tasktracker&nbsp;<FONT face=宋体>运行划分后的作业任务&nbsp;类:</FONT><FONT face="Times New Roman">TaskTracker</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">4.</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">分布式文件系统,用来在其他的实体间共享作业文件。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;Runjob<FONT face=宋体>提交作业后,第一步</FONT><FONT face="Times New Roman">.runjob</FONT><FONT face=宋体>并周期性的轮询作业的进度,如果发现上次与这次的报告有变化,将进度报告给控制台。第二步</FONT><FONT face="Times New Roman">Jobclient</FONT><FONT face=宋体>向</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>申请一个新的作业</FONT><FONT face="Times New Roman">ID</FONT><FONT face=宋体>。第三步</FONT><FONT face="Times New Roman">.</FONT><FONT face=宋体>将运行作业需要的资源</FONT><FONT face="Times New Roman">(</FONT><FONT face=宋体>包括作业</FONT><FONT face="Times New Roman">jar</FONT><FONT face=宋体>文件、配置文件、输入分片等</FONT><FONT face="Times New Roman">)</FONT><FONT face=宋体>复制到一个以作业</FONT><FONT face="Times New Roman">ID</FONT><FONT face=宋体>命名的</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>的文件系统中。作业</FONT><FONT face="Times New Roman">jar</FONT><FONT face=宋体>的副本较多(由</FONT><FONT face="Times New Roman">mapred.submit.replication</FONT><FONT face=宋体>属性控制)第四步</FONT><FONT face="Times New Roman">.</FONT><FONT face=宋体>告知</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>作业准备执行(通过</FONT><FONT face="Times New Roman">submitjob</FONT><FONT face=宋体>方法实现)。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">作业的初始化</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;当<FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>接收到对其</FONT><FONT face="Times New Roman">submitjob</FONT><FONT face=宋体>方法的调用后,交由作业调度器进行调度,并对其进行初始化。为了创建任务运行列表,作业调度器从共享文件系统中获取</FONT><FONT face="Times New Roman">jobclient</FONT><FONT face=宋体>已经算好的输入分片信息。然后将每个分片分配到</FONT><FONT face="Times New Roman">map</FONT><FONT face=宋体>任务。创建的</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务的数量由</FONT><FONT face="Times New Roman">jobconf</FONT><FONT face=宋体>的</FONT><FONT face="Times New Roman">mapred.reduce.task</FONT><FONT face=宋体>属性决定,然后调度器创建相应的数量的要运行的</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务,任务在此时被指定</FONT><FONT face="Times New Roman">ID</FONT><FONT face=宋体>。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">任务的分配</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;Tasktracker<FONT face=宋体>运行一个简单的循环来定期发送“心跳”给</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>。对于</FONT><FONT face="Times New Roman">map</FONT><FONT face=宋体>任务和</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务,</FONT><FONT face="Times New Roman">tasktracker</FONT><FONT face=宋体>有固定数量的任务槽。例如,一个</FONT><FONT face="Times New Roman">tasktracker</FONT><FONT face=宋体>可能可以同时运行两个或多个</FONT><FONT face="Times New Roman">map</FONT><FONT face=宋体>任务和</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务。准确的数量由</FONT><FONT face="Times New Roman">tasktracker</FONT><FONT face=宋体>核的数量和内存的大小来决定。如果</FONT><FONT face="Times New Roman">tasktracker</FONT><FONT face=宋体>至少有一个空闲的</FONT><FONT face="Times New Roman">map</FONT><FONT face=宋体>任务槽,</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>会为它选择一个</FONT><FONT face="Times New Roman">map</FONT><FONT face=宋体>任务,否则选择一个</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务。为选择一个</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务,</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>简单地从待运行的</FONT><FONT face="Times New Roman">reduce</FONT><FONT face=宋体>任务列表中选取下一个执行,用不着考虑数据的本地化。然而对于</FONT><FONT face="Times New Roman">map</FONT><FONT face=宋体>任务,</FONT><FONT face="Times New Roman">jobtracker</FONT><FONT face=宋体>会考虑</FONT><FONT face="Times New Roman">tasktracker</FONT><FONT face=宋体>的网络位置,并选择一个距离其输入分片文件最近的</FONT><FONT face="Times New Roman">tasktracker</FONT><FONT face=宋体>。在最理想的情况下,任务是数据本地化的。同样也可能是机架本地化的。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; VERTICAL-ALIGN: super; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">【<FONT face="Times New Roman">3</FONT><FONT face=宋体>】</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">分布式结构化数据表<FONT face="Times New Roman">Hbase</FONT></SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">传统的<FONT face="Times New Roman">SQL</FONT><FONT face=宋体>与</FONT><FONT face="Times New Roman">Hbase</FONT><FONT face=宋体>的区别</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; VERTICAL-ALIGN: super; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">【<FONT face="Times New Roman">1</FONT><FONT face=宋体>】</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hadoop<FONT face=宋体>是一个处理数据的框架,比关系型数据库要好很多。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">1)</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Hbase<FONT face=宋体>目标是处理大量的非结构化数据,而</FONT><FONT face="Times New Roman">SQL</FONT><FONT face=宋体>是处理大量的结构化数据。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">2)</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">商业的关系型数据库是非常昂贵的。他们的设计更趋向于扩大规模。为了运行一个更大的数据库,商家不得不为支持一个更大更强健的数据库而购买一个更大的、处理速度更快的服务器。然而,随着数据集合的不断的扩大,高端的服务器已经不能满足数据规模的扩大了,而且在本地磁盘上的查询速度主要与寻道的时间相关,当硬盘容量增加时,寻道时间是制约查询速度的瓶颈,而<FONT face="Times New Roman">hadoop</FONT><FONT face=宋体>是一个具有向外延伸特性的框架结构,如果需要更多的资源,只需要向这个集群里增加更多的廉价的</FONT><FONT face="Times New Roman">PC</FONT><FONT face=宋体>机器就可以了。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">3)</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">从电力成本的角度上来说,分布式系统的节能能力要高于<FONT face="Times New Roman">SQL</FONT><FONT face=宋体>系统的节能能力。一台这样的高性能高配置的电脑比四台低端配置的</FONT><FONT face="Times New Roman">PC</FONT><FONT face=宋体>机的能耗要多,这说明昂贵的硬件开销仍然不能够满足实际的需要。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">4<FONT face=宋体>)关系型数据库是处理数据之间存在依赖关系的数据,而大量的数据类型是相对无关的,比如图片,</FONT><FONT face="Times New Roman">xml</FONT><FONT face=宋体>,文本文档一些实例,大量的数据是无组织的,无结构化的数据。</FONT><FONT face="Times New Roman">Hadoop</FONT><FONT face=宋体>用&nbsp;</FONT><FONT face="Times New Roman">key/value</FONT><FONT face=宋体>的方式,这种方式处理大量的无结构化的数据时就变得很灵活了。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">5<FONT face=宋体>)查询方式不同。</FONT><FONT face="Times New Roman">SQL</FONT><FONT face=宋体>语言是利用查询语句来对内容进行检索的,而</FONT><FONT face="Times New Roman">hadoop</FONT><FONT face=宋体>是通过编程和脚本来实现对数据的查询与检索的,很多的</FONT><FONT face="Times New Roman">SQL</FONT><FONT face=宋体>使用者不习惯</FONT><FONT face="Times New Roman">hadoop</FONT><FONT face=宋体>的编程模式,但是</FONT><FONT face="Times New Roman">hadoop</FONT><FONT face=宋体>给用户提供了接口,可以使用类似</FONT><FONT face="Times New Roman">SQL</FONT><FONT face=宋体>语言的</FONT><FONT face="Times New Roman">pig</FONT><FONT face=宋体>语言来实现相关的内容检索,让其自动的转换为</FONT><FONT face="Times New Roman">mapreduce</FONT><FONT face=宋体>程序。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">6<FONT face=宋体>)</FONT><FONT face="Times New Roman">hadoop</FONT><FONT face=宋体>适合于对于大量数据的脱机处理,而不是对大量数据的在线的交易。</FONT><FONT face="Times New Roman">Hadoop</FONT><FONT face=宋体>不适合于随机读写,实时性能不太好。但是他适合于一次写入,多次读取的数据存储类型。</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">4&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">总结</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: left"><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;目前基本上hadoop成为了人们眼中的云计算的代名词。对于PB级别的海量数据处理,hadoop起着无法替代的作用,中国移动出产了大云计划。通过修改和改装hadoop平台实现了对hadoop的海量数据的处理。</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'">参考文献</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; FONT-FAMILY: '黑体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">[1]</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">Chunk&nbsp;Lam.Hadoop&nbsp;in&nbsp;action&nbsp;2010</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">[2]</SPAN><SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; COLOR: rgb(0,0,0); FONT-STYLE: normal; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">http://hadoop.apache.org/core/docs/current/hdfs_design.html</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">[3]Tom&nbsp;White.&nbsp;hadoop&nbsp;the&nbsp;definitive&nbsp;guide&nbsp;2011</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P>
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"></SPAN></P></DIV></DIV>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP