source: proiecte/HadoopJUnit/hadoop-0.20.1/docs/cn/hdfs_design.html @ 120

Last change on this file since 120 was 120, checked in by (none), 14 years ago

Added the mail files for the Hadoop JUNit Project

  • Property svn:executable set to *
File size: 38.0 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
5<meta content="Apache Forrest" name="Generator">
6<meta name="Forrest-version" content="0.8">
7<meta name="Forrest-skin-name" content="pelt">
8<title> 
9      Hadoop分垃匏文件系统架构和讟计
10    </title>
11<link type="text/css" href="skin/basic.css" rel="stylesheet">
12<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
13<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
14<link type="text/css" href="skin/profile.css" rel="stylesheet">
15<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
16<link rel="shortcut icon" href="images/favicon.ico">
17</head>
18<body onload="init()">
19<script type="text/javascript">ndeSetTextSize();</script>
20<div id="top">
21<!--+
22    |breadtrail
23    +-->
24<div class="breadtrail">
25<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/">Hadoop</a> &gt; <a href="http://hadoop.apache.org/core/">Core</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
26</div>
27<!--+
28    |header
29    +-->
30<div class="header">
31<!--+
32    |start group logo
33    +-->
34<div class="grouplogo">
35<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
36</div>
37<!--+
38    |end group logo
39    +-->
40<!--+
41    |start Project Logo
42    +-->
43<div class="projectlogo">
44<a href="http://hadoop.apache.org/core/"><img class="logoImage" alt="Hadoop" src="images/core-logo.gif" title="Scalable Computing Platform"></a>
45</div>
46<!--+
47    |end Project Logo
48    +-->
49<!--+
50    |start Search
51    +-->
52<div class="searchbox">
53<form action="http://www.google.com/search" method="get" class="roundtopsmall">
54<input value="hadoop.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
55                    <input name="Search" value="Search" type="submit">
56</form>
57</div>
58<!--+
59    |end search
60    +-->
61<!--+
62    |start Tabs
63    +-->
64<ul id="tabs">
65<li>
66<a class="unselected" href="http://hadoop.apache.org/core/">项目</a>
67</li>
68<li>
69<a class="unselected" href="http://wiki.apache.org/hadoop">绎基</a>
70</li>
71<li class="current">
72<a class="selected" href="index.html">Hadoop 0.18文档</a>
73</li>
74</ul>
75<!--+
76    |end Tabs
77    +-->
78</div>
79</div>
80<div id="main">
81<div id="publishedStrip">
82<!--+
83    |start Subtabs
84    +-->
85<div id="level2tabs"></div>
86<!--+
87    |end Endtabs
88    +-->
89<script type="text/javascript"><!--
90document.write("Last Published: " + document.lastModified);
91//  --></script>
92</div>
93<!--+
94    |breadtrail
95    +-->
96<div class="breadtrail">
97
98             &nbsp;
99           </div>
100<!--+
101    |start Menu, mainarea
102    +-->
103<!--+
104    |start Menu
105    +-->
106<div id="menu">
107<div onclick="SwitchMenu('menu_selected_1.1', 'skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">文档</div>
108<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
109<div class="menuitem">
110<a href="index.html">抂述</a>
111</div>
112<div class="menuitem">
113<a href="quickstart.html">快速入闚</a>
114</div>
115<div class="menuitem">
116<a href="cluster_setup.html">集矀搭建</a>
117</div>
118<div class="menupage">
119<div class="menupagetitle">HDFS构架讟计</div>
120</div>
121<div class="menuitem">
122<a href="hdfs_user_guide.html">HDFS䜿甚指南</a>
123</div>
124<div class="menuitem">
125<a href="hdfs_permissions_guide.html">HDFS权限指南</a>
126</div>
127<div class="menuitem">
128<a href="hdfs_quota_admin_guide.html">HDFS配额管理指南</a>
129</div>
130<div class="menuitem">
131<a href="commands_manual.html">呜什手册</a>
132</div>
133<div class="menuitem">
134<a href="hdfs_shell.html">FS Shell䜿甚指南</a>
135</div>
136<div class="menuitem">
137<a href="distcp.html">DistCp䜿甚指南</a>
138</div>
139<div class="menuitem">
140<a href="mapred_tutorial.html">Map-Reduce教皋</a>
141</div>
142<div class="menuitem">
143<a href="native_libraries.html">Hadoop本地库</a>
144</div>
145<div class="menuitem">
146<a href="streaming.html">Streaming</a>
147</div>
148<div class="menuitem">
149<a href="hadoop_archives.html">Hadoop Archives</a>
150</div>
151<div class="menuitem">
152<a href="hod.html">Hadoop On Demand</a>
153</div>
154<div class="menuitem">
155<a href="http://hadoop.apache.org/core/docs/r0.18.2/api/index.html">API参考</a>
156</div>
157<div class="menuitem">
158<a href="http://hadoop.apache.org/core/docs/r0.18.2/jdiff/changes.html">API Changes</a>
159</div>
160<div class="menuitem">
161<a href="http://wiki.apache.org/hadoop/">绎基</a>
162</div>
163<div class="menuitem">
164<a href="http://wiki.apache.org/hadoop/FAQ">垞见问题</a>
165</div>
166<div class="menuitem">
167<a href="http://hadoop.apache.org/core/mailing_lists.html">邮件列衚</a>
168</div>
169<div class="menuitem">
170<a href="http://hadoop.apache.org/core/docs/r0.18.2/releasenotes.html">发行诎明</a>
171</div>
172<div class="menuitem">
173<a href="http://hadoop.apache.org/core/docs/r0.18.2/changes.html">变曎日志</a>
174</div>
175</div>
176<div id="credit"></div>
177<div id="roundbottom">
178<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
179<!--+
180  |alternative credits
181  +-->
182<div id="credit2"></div>
183</div>
184<!--+
185    |end Menu
186    +-->
187<!--+
188    |start content
189    +-->
190<div id="content">
191<div title="Portable Document Format" class="pdflink">
192<a class="dida" href="hdfs_design.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
193        PDF</a>
194</div>
195<h1> 
196      Hadoop分垃匏文件系统架构和讟计
197    </h1>
198<div id="minitoc-area">
199<ul class="minitoc">
200<li>
201<a href="#%E5%BC%95%E8%A8%80"> åŒ•èš€ </a>
202</li>
203<li>
204<a href="#%E5%89%8D%E6%8F%90%E5%92%8C%E8%AE%BE%E8%AE%A1%E7%9B%AE%E6%A0%87"> å‰æå’Œè®Ÿè®¡ç›®æ ‡ </a>
205<ul class="minitoc">
206<li>
207<a href="#%E7%A1%AC%E4%BB%B6%E9%94%99%E8%AF%AF"> ç¡¬ä»¶é”™è¯¯ </a>
208</li>
209<li>
210<a href="#%E6%B5%81%E5%BC%8F%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE"> æµåŒæ•°æ®è®¿é—® </a>
211</li>
212<li>
213<a href="#%E5%A4%A7%E8%A7%84%E6%A8%A1%E6%95%B0%E6%8D%AE%E9%9B%86"> å€§è§„暡数据集 </a>
214</li>
215<li>
216<a href="#%E7%AE%80%E5%8D%95%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7%E6%A8%A1%E5%9E%8B"> ç®€å•çš„䞀臎性暡型 </a>
217</li>
218<li>
219<a href="#%E2%80%9C%E7%A7%BB%E5%8A%A8%E8%AE%A1%E7%AE%97%E6%AF%94%E7%A7%BB%E5%8A%A8%E6%95%B0%E6%8D%AE%E6%9B%B4%E5%88%92%E7%AE%97%E2%80%9D"> &ldquo;移劚计算比移劚数据曎划算&rdquo; </a>
220</li>
221<li>
222<a href="#%E5%BC%82%E6%9E%84%E8%BD%AF%E7%A1%AC%E4%BB%B6%E5%B9%B3%E5%8F%B0%E9%97%B4%E7%9A%84%E5%8F%AF%E7%A7%BB%E6%A4%8D%E6%80%A7"> åŒ‚构蜯硬件平台闎的可移怍性 </a>
223</li>
224</ul>
225</li>
226<li>
227<a href="#Namenode+%E5%92%8C+Datanode"> Namenode 和 Datanode </a>
228</li>
229<li>
230<a href="#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%90%8D%E5%AD%97%E7%A9%BA%E9%97%B4+%28namespace%29"> æ–‡ä»¶ç³»ç»Ÿçš„名字空闎 (namespace) </a>
231</li>
232<li>
233<a href="#%E6%95%B0%E6%8D%AE%E5%A4%8D%E5%88%B6"> æ•°æ®å€åˆ¶ </a>
234<ul class="minitoc">
235<li>
236<a href="#%E5%89%AF%E6%9C%AC%E5%AD%98%E6%94%BE%3A+%E6%9C%80%E6%9C%80%E5%BC%80%E5%A7%8B%E7%9A%84%E4%B8%80%E6%AD%A5"> å‰¯æœ¬å­˜æ”Ÿ: 最最匀始的䞀步 </a>
237</li>
238<li>
239<a href="#%E5%89%AF%E6%9C%AC%E9%80%89%E6%8B%A9"> å‰¯æœ¬é€‰æ‹© </a>
240</li>
241<li>
242<a href="#%E5%AE%89%E5%85%A8%E6%A8%A1%E5%BC%8F"> å®‰å…šæš¡åŒ </a>
243</li>
244</ul>
245</li>
246<li>
247<a href="#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%85%83%E6%95%B0%E6%8D%AE%E7%9A%84%E6%8C%81%E4%B9%85%E5%8C%96"> æ–‡ä»¶ç³»ç»Ÿå…ƒæ•°æ®çš„持久化 </a>
248</li>
249<li>
250<a href="#%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE"> é€šè®¯åè®® </a>
251</li>
252<li>
253<a href="#%E5%81%A5%E5%A3%AE%E6%80%A7"> å¥å£®æ€§ </a>
254<ul class="minitoc">
255<li>
256<a href="#%E7%A3%81%E7%9B%98%E6%95%B0%E6%8D%AE%E9%94%99%E8%AF%AF%EF%BC%8C%E5%BF%83%E8%B7%B3%E6%A3%80%E6%B5%8B%E5%92%8C%E9%87%8D%E6%96%B0%E5%A4%8D%E5%88%B6"> ç£ç›˜æ•°æ®é”™è¯¯ïŒŒå¿ƒè·³æ£€æµ‹å’Œé‡æ–°å€åˆ¶ </a>
257</li>
258<li>
259<a href="#%E9%9B%86%E7%BE%A4%E5%9D%87%E8%A1%A1"> é›†çŸ€å‡è¡¡ </a>
260</li>
261<li>
262<a href="#%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7"> æ•°æ®å®Œæ•Žæ€§ </a>
263</li>
264<li>
265<a href="#%E5%85%83%E6%95%B0%E6%8D%AE%E7%A3%81%E7%9B%98%E9%94%99%E8%AF%AF"> å…ƒæ•°æ®ç£ç›˜é”™è¯¯ </a>
266</li>
267<li>
268<a href="#%E5%BF%AB%E7%85%A7"> å¿«ç…§ </a>
269</li>
270</ul>
271</li>
272<li>
273<a href="#%E6%95%B0%E6%8D%AE%E7%BB%84%E7%BB%87"> æ•°æ®ç»„织 </a>
274<ul class="minitoc">
275<li>
276<a href="#%E6%95%B0%E6%8D%AE%E5%9D%97"> æ•°æ®å— </a>
277</li>
278<li>
279<a href="#Staging"> Staging </a>
280</li>
281<li>
282<a href="#%E6%B5%81%E6%B0%B4%E7%BA%BF%E5%A4%8D%E5%88%B6"> æµæ°Žçº¿å€åˆ¶ </a>
283</li>
284</ul>
285</li>
286<li>
287<a href="#%E5%8F%AF%E8%AE%BF%E9%97%AE%E6%80%A7"> å¯è®¿é—®æ€§ </a>
288<ul class="minitoc">
289<li>
290<a href="#DFSShell"> DFSShell </a>
291</li>
292<li>
293<a href="#DFSAdmin"> DFSAdmin </a>
294</li>
295<li>
296<a href="#%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8E%A5%E5%8F%A3"> æµè§ˆå™šæŽ¥å£ </a>
297</li>
298</ul>
299</li>
300<li>
301<a href="#%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%E5%9B%9E%E6%94%B6"> å­˜å‚šç©ºé—Žå›žæ”¶ </a>
302<ul class="minitoc">
303<li>
304<a href="#%E6%96%87%E4%BB%B6%E7%9A%84%E5%88%A0%E9%99%A4%E5%92%8C%E6%81%A2%E5%A4%8D"> æ–‡ä»¶çš„删陀和恢倍 </a>
305</li>
306<li>
307<a href="#%E5%87%8F%E5%B0%91%E5%89%AF%E6%9C%AC%E7%B3%BB%E6%95%B0"> å‡å°‘副本系数 </a>
308</li>
309</ul>
310</li>
311<li>
312<a href="#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99"> å‚考资料 </a>
313</li>
314</ul>
315</div>
316   
317<a name="N10014"></a><a name="%E5%BC%95%E8%A8%80"></a>
318<h2 class="h3"> åŒ•èš€ </h2>
319<div class="section">
320<p>
321              Hadoop分垃匏文件系统(<acronym title="Hadoop分垃匏文件系统">HDFS</acronym>)被讟计成适合运行圚通甚硬件(commodity hardware)䞊的分垃匏文件系统。它和现有的分垃匏文件系统有埈倚共同点。䜆同时它和其他的分垃匏文件系统的区别也是埈明星的。HDFS是䞀䞪高床容错性的系统适合郚眲圚廉价的机噚䞊。HDFS胜提䟛高吞吐量的数据访问非垞适合倧规暡数据集䞊的应甚。HDFS攟宜了䞀郚分POSIX纊束来实现流匏读取文件系统数据的目的。HDFS圚最匀始是䜜䞺Apache Nutch搜玢匕擎项目的基础架构而匀发的。HDFS是Apache Hadoop Core项目的䞀郚分。这䞪项目的地址是<a href="http://hadoop.apache.org/core/">http://hadoop.apache.org/core/</a>。
322      </p>
323</div>
324
325   
326<a name="N10026"></a><a name="%E5%89%8D%E6%8F%90%E5%92%8C%E8%AE%BE%E8%AE%A1%E7%9B%AE%E6%A0%87"></a>
327<h2 class="h3"> å‰æå’Œè®Ÿè®¡ç›®æ ‡ </h2>
328<div class="section">
329<a name="N1002C"></a><a name="%E7%A1%AC%E4%BB%B6%E9%94%99%E8%AF%AF"></a>
330<h3 class="h4"> ç¡¬ä»¶é”™è¯¯ </h3>
331<p>
332        硬件错误是垞态而䞍是匂垞。HDFS可胜由成癟䞊千的服务噚所构成每䞪服务噚䞊存傚着文件系统的郚分数据。我们面对的现实是构成系统的组件数目是巚倧的而䞔任䞀组件郜有可胜倱效这意味着总是有䞀郚分HDFS的组件是䞍工䜜的。因歀错误检测和快速、自劚的恢倍是HDFS最栞心的架构目标。
333       </p>
334<a name="N10036"></a><a name="%E6%B5%81%E5%BC%8F%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE"></a>
335<h3 class="h4"> æµåŒæ•°æ®è®¿é—® </h3>
336<p>
337运行圚HDFS䞊的应甚和普通的应甚䞍同需芁流匏访问它们的数据集。HDFS的讟计䞭曎倚的考虑到了数据批倄理而䞍是甚户亀互倄理。比之数据访问的䜎延迟问题曎关键的圚于数据访问的高吞吐量。POSIX标准讟眮的埈倚硬性纊束对HDFS应甚系统䞍是必需的。䞺了提高数据的吞吐量圚䞀些关键方面对POSIX的语义做了䞀些修改。       
338        </p>
339<a name="N10040"></a><a name="%E5%A4%A7%E8%A7%84%E6%A8%A1%E6%95%B0%E6%8D%AE%E9%9B%86"></a>
340<h3 class="h4"> å€§è§„暡数据集 </h3>
341<p>
342        运行圚HDFS䞊的应甚具有埈倧的数据集。HDFS䞊的䞀䞪兞型文件倧小䞀般郜圚G字节至T字节。因歀HDFS被调节以支持倧文件存傚。它应该胜提䟛敎䜓䞊高的数据䌠蟓垊宜胜圚䞀䞪集矀里扩展到数癟䞪节点。䞀䞪单䞀的HDFS实䟋应该胜支撑数以千䞇计的文件。
343        </p>
344<a name="N1004A"></a><a name="%E7%AE%80%E5%8D%95%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7%E6%A8%A1%E5%9E%8B"></a>
345<h3 class="h4"> ç®€å•çš„䞀臎性暡型 </h3>
346<p>
347        HDFS应甚需芁䞀䞪&ldquo;䞀次写入倚次读取&rdquo;的文件访问暡型。䞀䞪文件经过创建、写入和关闭之后就䞍需芁改变。这䞀假讟简化了数据䞀臎性问题并䞔䜿高吞吐量的数据访问成䞺可胜。Map/Reduce应甚或者眑络爬虫应甚郜非垞适合这䞪暡型。目前还有计划圚将来扩充这䞪暡型䜿之支持文件的附加写操䜜。
348        </p>
349<a name="N10058"></a><a name="%E2%80%9C%E7%A7%BB%E5%8A%A8%E8%AE%A1%E7%AE%97%E6%AF%94%E7%A7%BB%E5%8A%A8%E6%95%B0%E6%8D%AE%E6%9B%B4%E5%88%92%E7%AE%97%E2%80%9D"></a>
350<h3 class="h4"> &ldquo;移劚计算比移劚数据曎划算&rdquo; </h3>
351<p>
352        䞀䞪应甚请求的计算犻它操䜜的数据越近就越高效圚数据蟟到海量级别的时候曎是劂歀。因䞺这样就胜降䜎眑络阻塞的圱响提高系统数据的吞吐量。将计算移劚到数据附近比之将数据移劚到应甚所圚星然曎奜。HDFS䞺应甚提䟛了将它们自己移劚到数据附近的接口。
353        </p>
354<a name="N10062"></a><a name="%E5%BC%82%E6%9E%84%E8%BD%AF%E7%A1%AC%E4%BB%B6%E5%B9%B3%E5%8F%B0%E9%97%B4%E7%9A%84%E5%8F%AF%E7%A7%BB%E6%A4%8D%E6%80%A7"></a>
355<h3 class="h4"> åŒ‚构蜯硬件平台闎的可移怍性 </h3>
356<p>
357        HDFS圚讟计的时候就考虑到平台的可移怍性。这种特性方䟿了HDFS䜜䞺倧规暡数据应甚平台的掚广。
358        </p>
359</div>
360
361 
362   
363<a name="N1006D"></a><a name="Namenode+%E5%92%8C+Datanode"></a>
364<h2 class="h3"> Namenode 和 Datanode </h2>
365<div class="section">
366<p>
367      HDFS采甹master/slave架构。䞀䞪HDFS集矀是由䞀䞪Namenode和䞀定数目的Datanodes组成。Namenode是䞀䞪䞭心服务噚莟莣管理文件系统的名字空闎(namespace)以及客户端对文件的访问。集矀䞭的Datanode䞀般是䞀䞪节点䞀䞪莟莣管理它所圚节点䞊的存傚。HDFS暎露了文件系统的名字空闎甚户胜借以文件的圢匏圚䞊面存傚数据。从内郚看䞀䞪文件其实被分成䞀䞪或倚䞪数据块这些块存傚圚䞀组Datanode䞊。Namenode执行文件系统的名字空闎操䜜比劂打匀、关闭、重呜名文件或目圕。它也莟莣确定数据块到具䜓Datanode节点的映射。Datanode莟莣倄理文件系统客户端的读写请求。圚Namenode的统䞀调床䞋进行数据块的创建、删陀和倍制。
368      </p>
369<div id="" style="text-align: center;">
370<img id="" class="figure" alt="HDFS 架构" src="images/hdfsarchitecture.gif"></div>
371<p>
372      Namenode和Datanode被讟计成可以圚普通的商甚机噚䞊运行。这些机噚䞀般运行着GNU/Linux操䜜系统(<acronym title="操䜜系统">OS</acronym>)。HDFS采甹Java语蚀匀发因歀任䜕支持Java的机噚郜可以郚眲Namenode或Datanode。由于采甚了可移怍性极区的Java语蚀䜿埗HDFS可以郚眲到倚种类型的机噚䞊。䞀䞪兞型的郚眲场景是䞀台机噚䞊只运行䞀䞪Namenode实䟋而集矀䞭的其它机噚分别运行䞀䞪Datanode实䟋。这种架构并䞍排斥圚䞀台机噚䞊运行倚䞪Datanode只䞍过这样的情况比蟃少见。
373      </p>
374<p>
375      集矀䞭单䞀Namenode的结构倧倧简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者这样甚户数据氞远䞍䌚流过Namenode。
376      </p>
377</div> 
378
379   
380<a name="N10089"></a><a name="%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%90%8D%E5%AD%97%E7%A9%BA%E9%97%B4+%28namespace%29"></a>
381<h2 class="h3"> æ–‡ä»¶ç³»ç»Ÿçš„名字空闎 (namespace) </h2>
382<div class="section">
383<p>
384      HDFS支持䌠统的层次型文件组织结构。甚户或者应甚皋序可以创建目圕然后将文件保存圚这些目圕里。文件系统名字空闎的层次结构和倧倚数现有的文件系统类䌌甚户可以创建、删陀、移劚或重呜名文件。圓前HDFS䞍支持甚户磁盘配额和访问权限控制也䞍支持硬铟接和蜯铟接。䜆是HDFS架构并䞍劚碍实现这些特性。
385      </p>
386<p>
387      Namenode莟莣绎技文件系统的名字空闎任䜕对文件系统名字空闎或属性的修改郜将被Namenode记圕䞋来。应甚皋序可以讟眮HDFS保存的文件的副本数目。文件副本的数目称䞺文件的副本系数这䞪信息也是由Namenode保存的。
388      </p>
389</div>
390
391   
392<a name="N10096"></a><a name="%E6%95%B0%E6%8D%AE%E5%A4%8D%E5%88%B6"></a>
393<h2 class="h3"> æ•°æ®å€åˆ¶ </h2>
394<div class="section">
395<p>
396      HDFS被讟计成胜借圚䞀䞪倧集矀䞭跚机噚可靠地存傚超倧文件。它将每䞪文件存傚成䞀系列的数据块陀了最后䞀䞪所有的数据块郜是同样倧小的。䞺了容错文件的所有数据块郜䌚有副本。每䞪文件的数据块倧小和副本系数郜是可配眮的。应甚皋序可以指定某䞪文件的副本数目。副本系数可以圚文件创建的时候指定也可以圚之后改变。HDFS䞭的文件郜是䞀次性写入的并䞔䞥栌芁求圚任䜕时候只胜有䞀䞪写入者。
397      </p>
398<p>
399      Namenode党权管理数据块的倍制它呚期性地从集矀䞭的每䞪Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工䜜正垞。块状态报告包含了䞀䞪该Datanode䞊所有数据块的列衚。
400    </p>
401<div id="" style="text-align: center;">
402<img id="" class="figure" alt="HDFS Datanodes" src="images/hdfsdatanodes.gif"></div>
403<a name="N100A6"></a><a name="%E5%89%AF%E6%9C%AC%E5%AD%98%E6%94%BE%3A+%E6%9C%80%E6%9C%80%E5%BC%80%E5%A7%8B%E7%9A%84%E4%B8%80%E6%AD%A5"></a>
404<h3 class="h4"> å‰¯æœ¬å­˜æ”Ÿ: 最最匀始的䞀步 </h3>
405<p>
406        副本的存攟是HDFS可靠性和性胜的关键。䌘化的副本存攟策略是HDFS区分于其他倧郚分分垃匏文件系统的重芁特性。这种特性需芁做倧量的调䌘并需芁经验的积环。HDFS采甚䞀种称䞺机架感知(rack-aware)的策略来改进数据的可靠性、可甚性和眑络垊宜的利甚率。目前实现的副本存攟策略只是圚这䞪方向䞊的第䞀步。实现这䞪策略的短期目标是验证它圚生产环境䞋的有效性观察它的行䞺䞺实现曎先进的策略打䞋测试和研究的基础。
407        </p>
408<p>
409        倧型HDFS实䟋䞀般运行圚跚越倚䞪机架的计算机组成的集矀䞊䞍同机架䞊的䞀台机噚之闎的通讯需芁经过亀换机。圚倧倚数情况䞋同䞀䞪机架内的䞀台机噚闎的垊宜䌚比䞍同机架的䞀台机噚闎的垊宜倧。       
410        </p>
411<p>
412        通过䞀䞪<a href="cluster_setup.html#Hadoop%E7%9A%84%E6%9C%BA%E6%9E%B6%E6%84%9F%E7%9F%A5">机架感知</a>的过皋Namenode可以确定每䞪Datanode所属的机架id。䞀䞪简单䜆没有䌘化的策略就是将副本存攟圚䞍同的机架䞊。这样可以有效防止圓敎䞪机架倱效时数据的䞢倱并䞔允讞读数据的时候充分利甚倚䞪机架的垊宜。这种策略讟眮可以将副本均匀分垃圚集矀䞭有利于圓组件倱效情况䞋的莟蜜均衡。䜆是因䞺这种策略的䞀䞪写操䜜需芁䌠蟓数据块到倚䞪机架这增加了写的代价。
413        </p>
414<p>
415        圚倧倚数情况䞋副本系数是3HDFS的存攟策略是将䞀䞪副本存攟圚本地机架的节点䞊䞀䞪副本攟圚同䞀机架的及䞀䞪节点䞊最后䞀䞪副本攟圚䞍同机架的节点䞊。这种策略减少了机架闎的数据䌠蟓这就提高了写操䜜的效率。机架的错误远远比节点的错误少所以这䞪策略䞍䌚圱响到数据的可靠性和可甚性。于歀同时因䞺数据块只攟圚䞀䞪䞍是䞉䞪䞍同的机架䞊所以歀策略减少了读取数据时需芁的眑络䌠蟓总垊宜。圚这种策略䞋副本并䞍是均匀分垃圚䞍同的机架䞊。䞉分之䞀的副本圚䞀䞪节点䞊䞉分之二的副本圚䞀䞪机架䞊其他副本均匀分垃圚剩䞋的机架䞭这䞀策略圚䞍损害数据可靠性和读取性胜的情况䞋改进了写的性胜。
416        </p>
417<p>
418        圓前这里介绍的默讀副本存攟策略正圚匀发的过皋䞭。
419        </p>
420<a name="N100C0"></a><a name="%E5%89%AF%E6%9C%AC%E9%80%89%E6%8B%A9"></a>
421<h3 class="h4"> å‰¯æœ¬é€‰æ‹© </h3>
422<p>
423        䞺了降䜎敎䜓的垊宜消耗和读取延时HDFS䌚尜量让读取皋序读取犻它最近的副本。劂果圚读取皋序的同䞀䞪机架䞊有䞀䞪副本那么就读取该副本。劂果䞀䞪HDFS集矀跚越倚䞪数据䞭心那么客户端也将銖先读本地数据䞭心的副本。
424        </p>
425<a name="N100CA"></a><a name="%E5%AE%89%E5%85%A8%E6%A8%A1%E5%BC%8F"></a>
426<h3 class="h4"> å®‰å…šæš¡åŒ </h3>
427<p>
428        Namenode启劚后䌚进入䞀䞪称䞺安党暡匏的特殊状态。倄于安党暡匏的Namenode是䞍䌚进行数据块的倍制的。Namenode从所有的 Datanode接收心跳信号和块状态报告。块状态报告包括了某䞪Datanode所有的数据块列衚。每䞪数据块郜有䞀䞪指定的最小副本数。圓Namenode检测确讀某䞪数据块的副本数目蟟到这䞪最小倌那么该数据块就䌚被讀䞺是副本安党(safely replicated)的圚䞀定癟分比这䞪参数可配眮的数据块被Namenode检测确讀是安党之后加䞊䞀䞪额倖的30秒等埅时闎Namenode将退出安党暡匏状态。接䞋来它䌚确定还有哪些数据块的副本没有蟟到指定数目并将这些数据块倍制到其他Datanode䞊。
429        </p>
430</div>
431
432   
433<a name="N100D5"></a><a name="%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%85%83%E6%95%B0%E6%8D%AE%E7%9A%84%E6%8C%81%E4%B9%85%E5%8C%96"></a>
434<h2 class="h3"> æ–‡ä»¶ç³»ç»Ÿå…ƒæ•°æ®çš„持久化 </h2>
435<div class="section">
436<p>
437        Namenode䞊保存着HDFS的名字空闎。对于任䜕对文件系统元数据产生修改的操䜜Namenode郜䌚䜿甚䞀种称䞺EditLog的事务日志记圕䞋来。䟋劂圚HDFS䞭创建䞀䞪文件Namenode就䌚圚Editlog䞭插入䞀条记圕来衚瀺同样地修改文件的副本系数也将埀Editlog插入䞀条记圕。Namenode圚本地操䜜系统的文件系统䞭存傚这䞪Editlog。敎䞪文件系统的名字空闎包括数据块到文件的映射、文件的属性等郜存傚圚䞀䞪称䞺FsImage的文件䞭这䞪文件也是攟圚Namenode所圚的本地文件系统䞊。
438        </p>
439<p>
440        Namenode圚内存䞭保存着敎䞪文件系统的名字空闎和文件数据块映射(Blockmap)的映像。这䞪关键的元数据结构讟计埗埈玧凑因而䞀䞪有4G内存的Namenode足借支撑倧量的文件和目圕。圓Namenode启劚时它从硬盘䞭读取Editlog和FsImage将所有Editlog䞭的事务䜜甚圚内存䞭的FsImage䞊并将这䞪新版本的FsImage从内存䞭保存到本地磁盘䞊然后删陀旧的Editlog因䞺这䞪旧的Editlog的事务郜已经䜜甚圚FsImage䞊了。这䞪过皋称䞺䞀䞪检查点(checkpoint)。圚圓前实现䞭检查点只发生圚Namenode启劚时圚䞍久的将来将实现支持呚期性的检查点。
441        </p>
442<p>
443        Datanode将HDFS数据以文件的圢匏存傚圚本地的文件系统䞭它并䞍知道有关HDFS文件的信息。它把每䞪HDFS数据块存傚圚本地文件系统的䞀䞪单独的文件䞭。Datanode并䞍圚同䞀䞪目圕创建所有的文件实际䞊它甚试探的方法来确定每䞪目圕的最䜳文件数目并䞔圚适圓的时候创建子目圕。圚同䞀䞪目圕䞭创建所有的本地文件并䞍是最䌘的选择这是因䞺本地文件系统可胜无法高效地圚单䞪目圕䞭支持倧量的文件。圓䞀䞪Datanode启劚时它䌚扫描本地文件系统产生䞀䞪这些本地文件对应的所有HDFS数据块的列衚然后䜜䞺报告发送到Namenode这䞪报告就是块状态报告。         
444        </p>
445</div>
446
447   
448<a name="N100E5"></a><a name="%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE"></a>
449<h2 class="h3"> é€šè®¯åè®® </h2>
450<div class="section">
451<p>
452      所有的HDFS通讯协议郜是建立圚TCP/IP协议之䞊。客户端通过䞀䞪可配眮的<acronym title="Transmission Control Protocol">TCP</acronym>端口连接到Namenode通过ClientProtocol协议䞎Namenode亀互。而Datanode䜿甚DatanodeProtocol协议䞎Namenode亀互。䞀䞪远皋过皋调甚(<acronym title="Remote Procedure Call">RPC</acronym>)暡型被抜象出来封装ClientProtocol和Datanodeprotocol协议。圚讟计䞊Namenode䞍䌚䞻劚发起RPC而是响应来自客户端或 Datanode 的RPC请求。
453      </p>
454</div> 
455
456   
457<a name="N100F7"></a><a name="%E5%81%A5%E5%A3%AE%E6%80%A7"></a>
458<h2 class="h3"> å¥å£®æ€§ </h2>
459<div class="section">
460<p>
461              HDFS的䞻芁目标就是即䜿圚出错的情况䞋也芁保证数据存傚的可靠性。垞见的䞉种出错情况是Namenode出错, Datanode出错和眑络割裂(network partitions)。
462      </p>
463<a name="N10100"></a><a name="%E7%A3%81%E7%9B%98%E6%95%B0%E6%8D%AE%E9%94%99%E8%AF%AF%EF%BC%8C%E5%BF%83%E8%B7%B3%E6%A3%80%E6%B5%8B%E5%92%8C%E9%87%8D%E6%96%B0%E5%A4%8D%E5%88%B6"></a>
464<h3 class="h4"> ç£ç›˜æ•°æ®é”™è¯¯ïŒŒå¿ƒè·³æ£€æµ‹å’Œé‡æ–°å€åˆ¶ </h3>
465<p>
466        每䞪Datanode节点呚期性地向Namenode发送心跳信号。眑络割裂可胜富臎䞀郚分Datanode跟Namenode倱去联系。Namenode通过心跳信号的猺倱来检测这䞀情况并将这些近期䞍再发送心跳信号Datanode标记䞺宕机䞍䌚再将新的<acronym title="Input/Output">IO</acronym>请求发给它们。任䜕存傚圚宕机Datanode䞊的数据将䞍再有效。Datanode的宕机可胜䌚匕起䞀些数据块的副本系数䜎于指定倌Namenode䞍断地检测这些需芁倍制的数据块䞀旊发现就启劚倍制操䜜。圚䞋列情况䞋可胜需芁重新倍制某䞪Datanode节点倱效某䞪副本遭到损坏Datanode䞊的硬盘错误或者文件的副本系数增倧。
467        </p>
468<a name="N1010E"></a><a name="%E9%9B%86%E7%BE%A4%E5%9D%87%E8%A1%A1"></a>
469<h3 class="h4"> é›†çŸ€å‡è¡¡ </h3>
470<p>
471        HDFS的架构支持数据均衡策略。劂果某䞪Datanode节点䞊的空闲空闎䜎于特定的䞎界点按照均衡策略系统就䌚自劚地将数据从这䞪Datanode移劚到其他空闲的Datanode。圓对某䞪文件的请求突然增加那么也可胜启劚䞀䞪计划创建该文件新的副本并䞔同时重新平衡集矀䞭的其他数据。这些均衡策略目前还没有实现。
472        </p>
473<a name="N10118"></a><a name="%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7"></a>
474<h3 class="h4"> æ•°æ®å®Œæ•Žæ€§ </h3>
475<p>
476        <!-- XXX "checksum checking" sounds funny -->
477        从某䞪Datanode获取的数据块有可胜是损坏的损坏可胜是由Datanode的存傚讟倇错误、眑络错误或者蜯件bug造成的。HDFS客户端蜯件实现了对HDFS文件内容的校验和(checksum)检查。圓客户端创建䞀䞪新的HDFS文件䌚计算这䞪文件每䞪数据块的校验和并将校验和䜜䞺䞀䞪单独的隐藏文件保存圚同䞀䞪HDFS名字空闎䞋。圓客户端获取文件内容后它䌚检验从Datanode获取的数据跟盞应的校验和文件䞭的校验和是吊匹配劂果䞍匹配客户端可以选择从其他Datanode获取该数据块的副本。
478        </p>
479<a name="N10124"></a><a name="%E5%85%83%E6%95%B0%E6%8D%AE%E7%A3%81%E7%9B%98%E9%94%99%E8%AF%AF"></a>
480<h3 class="h4"> å…ƒæ•°æ®ç£ç›˜é”™è¯¯ </h3>
481<p>
482        FsImage和Editlog是HDFS的栞心数据结构。劂果这些文件损坏了敎䞪HDFS实䟋郜将倱效。因而Namenode可以配眮成支持绎技倚䞪FsImage和Editlog的副本。任䜕对FsImage或者Editlog的修改郜将同步到它们的副本䞊。这种倚副本的同步操䜜可胜䌚降䜎Namenode每秒倄理的名字空闎事务数量。然而这䞪代价是可以接受的因䞺即䜿HDFS的应甚是数据密集的它们也非元数据密集的。圓Namenode重启的时候它䌚选取最近的完敎的FsImage和Editlog来䜿甚。
483        </p>
484<p> 
485        Namenode是HDFS集矀䞭的单点故障(single point of failure)所圚。劂果Namenode机噚故障是需芁手工干预的。目前自劚重启或圚及䞀台机噚䞊做Namenode故障蜬移的功胜还没实现。
486        </p>
487<a name="N10131"></a><a name="%E5%BF%AB%E7%85%A7"></a>
488<h3 class="h4"> å¿«ç…§ </h3>
489<p>
490        快照支持某䞀特定时刻的数据的倍制倇仜。利甚快照可以让HDFS圚数据损坏时恢倍到过去䞀䞪已知正确的时闎点。HDFS目前还䞍支持快照功胜䜆计划圚将来的版本进行支持。
491        </p>
492</div>
493   
494<a name="N1013C"></a><a name="%E6%95%B0%E6%8D%AE%E7%BB%84%E7%BB%87"></a>
495<h2 class="h3"> æ•°æ®ç»„织 </h2>
496<div class="section">
497<a name="N10144"></a><a name="%E6%95%B0%E6%8D%AE%E5%9D%97"></a>
498<h3 class="h4"> æ•°æ®å— </h3>
499<p>
500        HDFS被讟计成支持倧文件适甚HDFS的是那些需芁倄理倧规暡的数据集的应甚。这些应甚郜是只写入数据䞀次䜆华读取䞀次或倚次并䞔读取速床应胜满足流匏读取的需芁。HDFS支持文件的&ldquo;䞀次写入倚次读取&rdquo;语义。䞀䞪兞型的数据块倧小是64MB。因而HDFS䞭的文件总是按照64M被切分成䞍同的块每䞪块尜可胜地存傚于䞍同的Datanode䞭。
501        </p>
502<a name="N1014E"></a><a name="Staging"></a>
503<h3 class="h4"> Staging </h3>
504<p>
505        客户端创建文件的请求其实并没有立即发送给Namenode事实䞊圚刚匀始阶段HDFS客户端䌚先将文件数据猓存到本地的䞀䞪䞎时文件。应甚皋序的写操䜜被透明地重定向到这䞪䞎时文件。圓这䞪䞎时文件环积的数据量超过䞀䞪数据块的倧小客户端才䌚联系Namenode。Namenode将文件名插入文件系统的层次结构䞭并䞔分配䞀䞪数据块给它。然后返回Datanode的标识笊和目标数据块给客户端。接着客户端将这块数据从本地䞎时文件䞊䌠到指定的Datanode䞊。圓文件关闭时圚䞎时文件䞭剩䜙的没有䞊䌠的数据也䌚䌠蟓到指定的Datanode䞊。然后客户端告诉Namenode文件已经关闭。歀时Namenode才将文件创建操䜜提亀到日志里进行存傚。劂果Namenode圚文件关闭前宕机了则该文件将䞢倱。
506        </p>
507<p>
508        䞊述方法是对圚HDFS䞊运行的目标应甚进行讀真考虑后埗到的结果。这些应甚需芁进行文件的流匏写入。劂果䞍采甚客户端猓存由于眑络速床和眑络堵塞䌚对吞䌰量造成比蟃倧的圱响。这种方法并䞍是没有先䟋的早期的文件系统比劂<acronym title="Andrew File System">AFS</acronym>就甚客户端猓存来提高性胜。䞺了蟟到曎高的数据䞊䌠效率已经攟束了POSIX标准的芁求。
509        </p>
510<a name="N10161"></a><a name="%E6%B5%81%E6%B0%B4%E7%BA%BF%E5%A4%8D%E5%88%B6"></a>
511<h3 class="h4"> æµæ°Žçº¿å€åˆ¶ </h3>
512<p>
513        圓客户端向HDFS文件写入数据的时候䞀匀始是写到本地䞎时文件䞭。假讟该文件的副本系数讟眮䞺3圓本地䞎时文件环积到䞀䞪数据块的倧小时客户端䌚从Namenode获取䞀䞪Datanode列衚甚于存攟副本。然后客户端匀始向第䞀䞪Datanode䌠蟓数据第䞀䞪Datanode䞀小郚分䞀小郚分(4 KB)地接收数据将每䞀郚分写入本地仓库并同时䌠蟓该郚分到列衚䞭第二䞪Datanode节点。第二䞪Datanode也是这样䞀小郚分䞀小郚分地接收数据写入本地仓库并同时䌠给第䞉䞪Datanode。最后第䞉䞪Datanode接收数据并存傚圚本地。因歀Datanode胜流氎线匏地从前䞀䞪节点接收数据并圚同时蜬发给䞋䞀䞪节点数据以流氎线的方匏从前䞀䞪Datanode倍制到䞋䞀䞪。
514        </p>
515</div>
516
517   
518<a name="N1016C"></a><a name="%E5%8F%AF%E8%AE%BF%E9%97%AE%E6%80%A7"></a>
519<h2 class="h3"> å¯è®¿é—®æ€§ </h2>
520<div class="section">
521<p>
522      HDFS给应甚提䟛了倚种访问方匏。甚户可以通过<a href="http://hadoop.apache.org/core/docs/current/api/">Java API</a>接口访问也可以通过C语蚀的封装API访问还可以通过浏览噚的方匏访问HDFS䞭的文件。通过<acronym title="Web-based Distributed Authoring and Versioning">WebDAV</acronym>协议访问的方匏正圚匀发䞭。
523      </p>
524<a name="N10181"></a><a name="DFSShell"></a>
525<h3 class="h4"> DFSShell </h3>
526<p>
527        HDFS以文件和目圕的圢匏组织甚户数据。它提䟛了䞀䞪呜什行的接口(DFSShell)让甚户䞎HDFS䞭的数据进行亀互。呜什的语法和甚户熟悉的其他shell(䟋劂 bash, csh)工具类䌌。䞋面是䞀些劚䜜/呜什的瀺䟋
528        </p>
529<table class="ForrestTable" cellspacing="1" cellpadding="4">
530         
531<tr>
532           
533<th colspan="1" rowspan="1"> åŠšäœœ </th><th colspan="1" rowspan="1"> å‘œä»€ </th>
534         
535</tr>
536         
537<tr>
538           
539<td colspan="1" rowspan="1"> åˆ›å»ºäž€äžªåäžº <span class="codefrag">/foodir</span> çš„目圕 </td> <td colspan="1" rowspan="1"> <span class="codefrag">bin/hadoop dfs -mkdir /foodir</span> </td>
540         
541</tr>
542         
543<tr>
544           
545<td colspan="1" rowspan="1"> åˆ›å»ºäž€äžªåäžº <span class="codefrag">/foodir</span> çš„目圕 </td> <td colspan="1" rowspan="1"> <span class="codefrag">bin/hadoop dfs -mkdir /foodir</span> </td>
546         
547</tr>
548         
549<tr>
550           
551<td colspan="1" rowspan="1"> æŸ¥çœ‹åäžº <span class="codefrag">/foodir/myfile.txt</span> çš„文件内容 </td> <td colspan="1" rowspan="1"> <span class="codefrag">bin/hadoop dfs -cat /foodir/myfile.txt</span> </td>
552         
553</tr>
554       
555</table>
556<p>
557        DFSShell 可以甚圚那些通过脚本语蚀和文件系统进行亀互的应甚皋序䞊。
558        </p>
559<a name="N101D6"></a><a name="DFSAdmin"></a>
560<h3 class="h4"> DFSAdmin </h3>
561<p>
562                DFSAdmin 呜什甚来管理HDFS集矀。这些呜什只有HDSF的管理员才胜䜿甚。䞋面是䞀些劚䜜/呜什的瀺䟋
563        </p>
564<table class="ForrestTable" cellspacing="1" cellpadding="4">
565         
566<tr>
567           
568<th colspan="1" rowspan="1"> åŠšäœœ </th><th colspan="1" rowspan="1"> å‘œä»€ </th>
569         
570</tr>
571         
572<tr>
573           
574<td colspan="1" rowspan="1"> å°†é›†çŸ€çœ®äºŽå®‰å…šæš¡åŒ </td> <td colspan="1" rowspan="1"> <span class="codefrag">bin/hadoop dfsadmin -safemode enter</span> </td>
575         
576</tr>
577         
578<tr>
579           
580<td colspan="1" rowspan="1"> æ˜Ÿç€ºDatanode列衚 </td> <td colspan="1" rowspan="1"> <span class="codefrag">bin/hadoop dfsadmin -report</span> </td>
581         
582</tr>
583         
584<tr>
585           
586<td colspan="1" rowspan="1"> äœ¿Datanode节点 <span class="codefrag">datanodename</span>退圹</td><td colspan="1" rowspan="1"> <span class="codefrag">bin/hadoop dfsadmin -decommission datanodename</span> </td>
587         
588</tr>
589       
590</table>
591<a name="N10221"></a><a name="%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8E%A5%E5%8F%A3"></a>
592<h3 class="h4"> æµè§ˆå™šæŽ¥å£ </h3>
593<p>
594        䞀䞪兞型的HDFS安装䌚圚䞀䞪可配眮的TCP端口匀启䞀䞪Web服务噚甚于暎露HDFS的名字空闎。甚户可以甚浏览噚来浏览HDFS的名字空闎和查看文件的内容。
595       </p>
596</div> 
597
598   
599<a name="N1022C"></a><a name="%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%E5%9B%9E%E6%94%B6"></a>
600<h2 class="h3"> å­˜å‚šç©ºé—Žå›žæ”¶ </h2>
601<div class="section">
602<a name="N10232"></a><a name="%E6%96%87%E4%BB%B6%E7%9A%84%E5%88%A0%E9%99%A4%E5%92%8C%E6%81%A2%E5%A4%8D"></a>
603<h3 class="h4"> æ–‡ä»¶çš„删陀和恢倍 </h3>
604<p>
605       åœ“甚户或应甚皋序删陀某䞪文件时这䞪文件并没有立刻从HDFS䞭删陀。实际䞊HDFS䌚将这䞪文件重呜名蜬移到<span class="codefrag">/trash</span>目圕。只芁文件还圚<span class="codefrag">/trash</span>目圕䞭该文件就可以被迅速地恢倍。文件圚<span class="codefrag">/trash</span>䞭保存的时闎是可配眮的圓超过这䞪时闎时Namenode就䌚将该文件从名字空闎䞭删陀。删陀文件䌚䜿埗该文件盞关的数据块被释攟。泚意从甚户删陀文件到HDFS空闲空闎的增加之闎䌚有䞀定时闎的延迟。</p>
606<p>
607只芁被删陀的文件还圚<span class="codefrag">/trash</span>目圕䞭甚户就可以恢倍这䞪文件。劂果甚户想恢倍被删陀的文件他/她可以浏览<span class="codefrag">/trash</span>目圕扟回该文件。<span class="codefrag">/trash</span>目圕仅仅保存被删陀文件的最后副本。<span class="codefrag">/trash</span>目圕䞎其他的目圕没有什么区别陀了䞀点圚该目圕䞊HDFS䌚应甚䞀䞪特殊策略来自劚删陀文件。目前的默讀策略是删陀<span class="codefrag">/trash</span>䞭保留时闎超过6小时的文件。将来这䞪策略可以通过䞀䞪被良奜定义的接口配眮。
608        </p>
609<a name="N10257"></a><a name="%E5%87%8F%E5%B0%91%E5%89%AF%E6%9C%AC%E7%B3%BB%E6%95%B0"></a>
610<h3 class="h4"> å‡å°‘副本系数 </h3>
611<p>
612        圓䞀䞪文件的副本系数被减小后Namenode䌚选择过剩的副本删陀。䞋次心跳检测时䌚将该信息䌠递给Datanode。Datanode遂即移陀盞应的数据块集矀䞭的空闲空闎加倧。同样圚调甚<span class="codefrag">setReplication</span> API结束和集矀䞭空闲空闎增加闎䌚有䞀定的延迟。</p>
613</div>
614
615
616   
617<a name="N10265"></a><a name="%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99"></a>
618<h2 class="h3"> å‚考资料 </h2>
619<div class="section">
620<p>
621      HDFS Java API:
622      <a href="http://hadoop.apache.org/core/docs/current/api/"> 
623        http://hadoop.apache.org/core/docs/current/api/
624      </a>
625     
626</p>
627<p>
628      HDFS 源代码:
629      <a href="http://hadoop.apache.org/core/version_control.html"> 
630        http://hadoop.apache.org/core/version_control.html
631      </a>
632     
633</p>
634</div> 
635
636 
637<p align="right">
638<font size="-2">by&nbsp;Dhruba Borthakur</font>
639</p>
640</div>
641<!--+
642    |end content
643    +-->
644<div class="clearboth">&nbsp;</div>
645</div>
646<div id="footer">
647<!--+
648    |start bottomstrip
649    +-->
650<div class="lastmodified">
651<script type="text/javascript"><!--
652document.write("Last Published: " + document.lastModified);
653//  --></script>
654</div>
655<div class="copyright">
656        Copyright &copy;
657         2007 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
658</div>
659<!--+
660    |end bottomstrip
661    +-->
662</div>
663</body>
664</html>
Note: See TracBrowser for help on using the repository browser.