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> > <a href="http://hadoop.apache.org/">Hadoop</a> > <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"> |
---|
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"><!-- |
---|
90 | document.write("Last Published: " + document.lastModified); |
---|
91 | // --></script> |
---|
92 | </div> |
---|
93 | <!--+ |
---|
94 | |breadtrail |
---|
95 | +--> |
---|
96 | <div class="breadtrail"> |
---|
97 | |
---|
98 | |
---|
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"> “移åšè®¡ç®æ¯ç§»åšæ°æ®æŽåç®” </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åºçšéèŠäžäžª“äžæ¬¡åå
¥å€æ¬¡è¯»å”çæ件访é®æš¡åãäžäžªæ件ç»è¿å建ãåå
¥åå
³éä¹åå°±äžéèŠæ¹åãè¿äžå讟ç®åäºæ°æ®äžèŽæ§é®é¢ïŒå¹¶äžäœ¿é«ååéçæ°æ®è®¿é®æ䞺å¯èœã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"> “移åšè®¡ç®æ¯ç§»åšæ°æ®æŽåç®” </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æ¯ææ件ç“äžæ¬¡åå
¥å€æ¬¡è¯»å”è¯ä¹ãäžäžªå
žåçæ°æ®å倧å°æ¯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 Dhruba Borthakur</font> |
---|
639 | </p> |
---|
640 | </div> |
---|
641 | <!--+ |
---|
642 | |end content |
---|
643 | +--> |
---|
644 | <div class="clearboth"> </div> |
---|
645 | </div> |
---|
646 | <div id="footer"> |
---|
647 | <!--+ |
---|
648 | |start bottomstrip |
---|
649 | +--> |
---|
650 | <div class="lastmodified"> |
---|
651 | <script type="text/javascript"><!-- |
---|
652 | document.write("Last Published: " + document.lastModified); |
---|
653 | // --></script> |
---|
654 | </div> |
---|
655 | <div class="copyright"> |
---|
656 | Copyright © |
---|
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> |
---|