distcp.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  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>DistCp</title>
  9. <link type="text/css" href="skin/basic.css" rel="stylesheet">
  10. <link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
  11. <link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
  12. <link type="text/css" href="skin/profile.css" rel="stylesheet">
  13. <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>
  14. <link rel="shortcut icon" href="images/favicon.ico">
  15. </head>
  16. <body onload="init()">
  17. <script type="text/javascript">ndeSetTextSize();</script>
  18. <div id="top">
  19. <!--+
  20. |breadtrail
  21. +-->
  22. <div class="breadtrail">
  23. <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>
  24. </div>
  25. <!--+
  26. |header
  27. +-->
  28. <div class="header">
  29. <!--+
  30. |start group logo
  31. +-->
  32. <div class="grouplogo">
  33. <a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
  34. </div>
  35. <!--+
  36. |end group logo
  37. +-->
  38. <!--+
  39. |start Project Logo
  40. +-->
  41. <div class="projectlogo">
  42. <a href="http://hadoop.apache.org/core/"><img class="logoImage" alt="Hadoop" src="images/core-logo.gif" title="Scalable Computing Platform"></a>
  43. </div>
  44. <!--+
  45. |end Project Logo
  46. +-->
  47. <!--+
  48. |start Search
  49. +-->
  50. <div class="searchbox">
  51. <form action="http://www.google.com/search" method="get" class="roundtopsmall">
  52. <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;
  53. <input name="Search" value="Search" type="submit">
  54. </form>
  55. </div>
  56. <!--+
  57. |end search
  58. +-->
  59. <!--+
  60. |start Tabs
  61. +-->
  62. <ul id="tabs">
  63. <li>
  64. <a class="unselected" href="http://hadoop.apache.org/core/">项目</a>
  65. </li>
  66. <li>
  67. <a class="unselected" href="http://wiki.apache.org/hadoop">维基</a>
  68. </li>
  69. <li class="current">
  70. <a class="selected" href="index.html">Hadoop 0.18文档</a>
  71. </li>
  72. </ul>
  73. <!--+
  74. |end Tabs
  75. +-->
  76. </div>
  77. </div>
  78. <div id="main">
  79. <div id="publishedStrip">
  80. <!--+
  81. |start Subtabs
  82. +-->
  83. <div id="level2tabs"></div>
  84. <!--+
  85. |end Endtabs
  86. +-->
  87. <script type="text/javascript"><!--
  88. document.write("Last Published: " + document.lastModified);
  89. // --></script>
  90. </div>
  91. <!--+
  92. |breadtrail
  93. +-->
  94. <div class="breadtrail">
  95. &nbsp;
  96. </div>
  97. <!--+
  98. |start Menu, mainarea
  99. +-->
  100. <!--+
  101. |start Menu
  102. +-->
  103. <div id="menu">
  104. <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>
  105. <div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
  106. <div class="menuitem">
  107. <a href="index.html">概述</a>
  108. </div>
  109. <div class="menuitem">
  110. <a href="quickstart.html">快速入门</a>
  111. </div>
  112. <div class="menuitem">
  113. <a href="cluster_setup.html">集群搭建</a>
  114. </div>
  115. <div class="menuitem">
  116. <a href="hdfs_design.html">HDFS构架设计</a>
  117. </div>
  118. <div class="menuitem">
  119. <a href="hdfs_user_guide.html">HDFS使用指南</a>
  120. </div>
  121. <div class="menuitem">
  122. <a href="hdfs_permissions_guide.html">HDFS权限指南</a>
  123. </div>
  124. <div class="menuitem">
  125. <a href="hdfs_quota_admin_guide.html">HDFS配额管理指南</a>
  126. </div>
  127. <div class="menuitem">
  128. <a href="commands_manual.html">命令手册</a>
  129. </div>
  130. <div class="menuitem">
  131. <a href="hdfs_shell.html">FS Shell使用指南</a>
  132. </div>
  133. <div class="menupage">
  134. <div class="menupagetitle">DistCp使用指南</div>
  135. </div>
  136. <div class="menuitem">
  137. <a href="mapred_tutorial.html">Map-Reduce教程</a>
  138. </div>
  139. <div class="menuitem">
  140. <a href="native_libraries.html">Hadoop本地库</a>
  141. </div>
  142. <div class="menuitem">
  143. <a href="streaming.html">Streaming</a>
  144. </div>
  145. <div class="menuitem">
  146. <a href="hadoop_archives.html">Hadoop Archives</a>
  147. </div>
  148. <div class="menuitem">
  149. <a href="hod.html">Hadoop On Demand</a>
  150. </div>
  151. <div class="menuitem">
  152. <a href="http://hadoop.apache.org/core/docs/r0.18.2/api/index.html">API参考</a>
  153. </div>
  154. <div class="menuitem">
  155. <a href="http://hadoop.apache.org/core/docs/r0.18.2/jdiff/changes.html">API Changes</a>
  156. </div>
  157. <div class="menuitem">
  158. <a href="http://wiki.apache.org/hadoop/">维基</a>
  159. </div>
  160. <div class="menuitem">
  161. <a href="http://wiki.apache.org/hadoop/FAQ">常见问题</a>
  162. </div>
  163. <div class="menuitem">
  164. <a href="http://hadoop.apache.org/core/mailing_lists.html">邮件列表</a>
  165. </div>
  166. <div class="menuitem">
  167. <a href="http://hadoop.apache.org/core/docs/r0.18.2/releasenotes.html">发行说明</a>
  168. </div>
  169. <div class="menuitem">
  170. <a href="http://hadoop.apache.org/core/docs/r0.18.2/changes.html">变更日志</a>
  171. </div>
  172. </div>
  173. <div id="credit"></div>
  174. <div id="roundbottom">
  175. <img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
  176. <!--+
  177. |alternative credits
  178. +-->
  179. <div id="credit2"></div>
  180. </div>
  181. <!--+
  182. |end Menu
  183. +-->
  184. <!--+
  185. |start content
  186. +-->
  187. <div id="content">
  188. <div title="Portable Document Format" class="pdflink">
  189. <a class="dida" href="distcp.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
  190. PDF</a>
  191. </div>
  192. <h1>DistCp</h1>
  193. <div id="minitoc-area">
  194. <ul class="minitoc">
  195. <li>
  196. <a href="#%E6%A6%82%E8%BF%B0">概述</a>
  197. </li>
  198. <li>
  199. <a href="#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95">使用方法</a>
  200. <ul class="minitoc">
  201. <li>
  202. <a href="#%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95">基本使用方法</a>
  203. </li>
  204. <li>
  205. <a href="#options">选项</a>
  206. <ul class="minitoc">
  207. <li>
  208. <a href="#%E9%80%89%E9%A1%B9%E7%B4%A2%E5%BC%95">选项索引</a>
  209. </li>
  210. <li>
  211. <a href="#uo">更新和覆盖</a>
  212. </li>
  213. </ul>
  214. </li>
  215. </ul>
  216. </li>
  217. <li>
  218. <a href="#etc">附录</a>
  219. <ul class="minitoc">
  220. <li>
  221. <a href="#Map%E6%95%B0%E7%9B%AE">Map数目</a>
  222. </li>
  223. <li>
  224. <a href="#cpver">不同HDFS版本间的拷贝</a>
  225. </li>
  226. <li>
  227. <a href="#Map%2FReduce%E5%92%8C%E5%89%AF%E6%95%88%E5%BA%94">Map/Reduce和副效应</a>
  228. </li>
  229. </ul>
  230. </li>
  231. </ul>
  232. </div>
  233. <a name="N1000D"></a><a name="%E6%A6%82%E8%BF%B0"></a>
  234. <h2 class="h3">概述</h2>
  235. <div class="section">
  236. <p>DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。
  237. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。
  238. 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。
  239. 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。
  240. 这篇文档会为常用DistCp操作提供指南并阐述它的工作模型。
  241. </p>
  242. </div>
  243. <a name="N10017"></a><a name="%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95"></a>
  244. <h2 class="h3">使用方法</h2>
  245. <div class="section">
  246. <a name="N1001D"></a><a name="%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95"></a>
  247. <h3 class="h4">基本使用方法</h3>
  248. <p>DistCp最常用在集群之间的拷贝:</p>
  249. <p>
  250. <span class="codefrag">bash$ hadoop distcp hdfs://nn1:8020/foo/bar \</span>
  251. <br>
  252. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  253. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  254. hdfs://nn2:8020/bar/foo</span>
  255. </p>
  256. <p>这条命令会把nn1集群的<span class="codefrag">/foo/bar</span>目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务,
  257. 然后每个TaskTracker分别执行从nn1到nn2的拷贝操作。注意DistCp使用绝对路径进行操作。
  258. </p>
  259. <p>命令行中可以指定多个源目录:</p>
  260. <p>
  261. <span class="codefrag">bash$ hadoop distcp hdfs://nn1:8020/foo/a \</span>
  262. <br>
  263. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  264. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  265. hdfs://nn1:8020/foo/b \</span>
  266. <br>
  267. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  268. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  269. hdfs://nn2:8020/bar/foo</span>
  270. </p>
  271. <p>或者使用<span class="codefrag">-f</span>选项,从文件里获得多个源:<br>
  272. <span class="codefrag">bash$ hadoop distcp -f hdfs://nn1:8020/srclist \</span>
  273. <br>
  274. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  275. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  276. &nbsp;hdfs://nn2:8020/bar/foo</span>
  277. <br>
  278. </p>
  279. <p>其中<span class="codefrag">srclist</span> 的内容是<br>
  280. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a</span>
  281. <br>
  282. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b</span>
  283. </p>
  284. <p>当从多个源拷贝时,如果两个源冲突,DistCp会停止拷贝并提示出错信息,
  285. 如果在目的位置发生冲突,会根据<a href="#options">选项设置</a>解决。
  286. 默认情况会跳过已经存在的目标文件(比如不用源文件做替换操作)。每次操作结束时
  287. 都会报告跳过的文件数目,但是如果某些拷贝操作失败了,但在之后的尝试成功了,
  288. 那么报告的信息可能不够精确(请参考<a href="#etc">附录</a>)。
  289. </p>
  290. <p>每个TaskTracker必须都能够与源端和目的端文件系统进行访问和交互。
  291. 对于HDFS来说,源和目的端要运行相同版本的协议或者使用向下兼容的协议。
  292. (请参考<a href="#cpver">不同版本间的拷贝</a> )。
  293. </p>
  294. <p>拷贝完成后,建议生成源端和目的端文件的列表,并交叉检查,来确认拷贝真正成功。
  295. 因为DistCp使用Map/Reduce和文件系统API进行操作,所以这三者或它们之间有任何问题
  296. 都会影响拷贝操作。一些Distcp命令的成功执行可以通过再次执行带-update参数的该命令来完成,
  297. 但用户在如此操作之前应该对该命令的语法很熟悉。
  298. </p>
  299. <p>值得注意的是,当另一个客户端同时在向源文件写入时,拷贝很有可能会失败。
  300. 尝试覆盖HDFS上正在被写入的文件的操作也会失败。
  301. 如果一个源文件在拷贝之前被移动或删除了,拷贝失败同时输出异常
  302. FileNotFoundException。</p>
  303. <a name="N1007B"></a><a name="options"></a>
  304. <h3 class="h4">选项</h3>
  305. <a name="N10081"></a><a name="%E9%80%89%E9%A1%B9%E7%B4%A2%E5%BC%95"></a>
  306. <h4>选项索引</h4>
  307. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  308. <tr>
  309. <th colspan="1" rowspan="1"> 标识 </th><th colspan="1" rowspan="1"> 描述 </th><th colspan="1" rowspan="1"> 备注 </th>
  310. </tr>
  311. <tr>
  312. <td colspan="1" rowspan="1"><span class="codefrag">-p[rbugp]</span></td>
  313. <td colspan="1" rowspan="1">Preserve<br>
  314. &nbsp;&nbsp;r: replication number<br>
  315. &nbsp;&nbsp;b: block size<br>
  316. &nbsp;&nbsp;u: user<br>
  317. &nbsp;&nbsp;g: group<br>
  318. &nbsp;&nbsp;p: permission<br>
  319. </td>
  320. <td colspan="1" rowspan="1">修改次数不会被保留。并且当指定
  321. <span class="codefrag">-update</span> 时,更新的状态<strong>不</strong>会
  322. 被同步,除非文件大小不同(比如文件被重新创建)。
  323. </td>
  324. </tr>
  325. <tr>
  326. <td colspan="1" rowspan="1"><span class="codefrag">-i</span></td>
  327. <td colspan="1" rowspan="1">忽略失败</td>
  328. <td colspan="1" rowspan="1">就像在 <a href="#etc">附录</a>中提到的,这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
  329. </td>
  330. </tr>
  331. <tr>
  332. <td colspan="1" rowspan="1"><span class="codefrag">-log &lt;logdir&gt;</span></td>
  333. <td colspan="1" rowspan="1">记录日志到 &lt;logdir&gt;</td>
  334. <td colspan="1" rowspan="1">DistCp为每个文件的每次尝试拷贝操作都记录日志,并把日志作为map的输出。
  335. 如果一个map失败了,当重新执行时这个日志不会被保留。
  336. </td>
  337. </tr>
  338. <tr>
  339. <td colspan="1" rowspan="1"><span class="codefrag">-m &lt;num_maps&gt;</span></td>
  340. <td colspan="1" rowspan="1">同时拷贝的最大数目</td>
  341. <td colspan="1" rowspan="1">指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。
  342. </td>
  343. </tr>
  344. <tr>
  345. <td colspan="1" rowspan="1"><span class="codefrag">-overwrite</span></td>
  346. <td colspan="1" rowspan="1">覆盖目标</td>
  347. <td colspan="1" rowspan="1">如果一个map失败并且没有使用<span class="codefrag">-i</span>选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。
  348. 就像<a href="#uo">下面</a>提到的,它会改变生成目标路径的语义,所以
  349. 用户要小心使用这个选项。
  350. </td>
  351. </tr>
  352. <tr>
  353. <td colspan="1" rowspan="1"><span class="codefrag">-update</span></td>
  354. <td colspan="1" rowspan="1">如果源和目标的大小不一样则进行覆盖</td>
  355. <td colspan="1" rowspan="1">像之前提到的,这不是"同步"操作。
  356. 执行覆盖的唯一标准是源文件和目标文件大小是否相同;如果不同,则源文件替换目标文件。
  357. 像 <a href="#uo">下面</a>提到的,它也改变生成目标路径的语义,
  358. 用户使用要小心。
  359. </td>
  360. </tr>
  361. <tr>
  362. <td colspan="1" rowspan="1"><span class="codefrag">-f &lt;urilist_uri&gt;</span></td>
  363. <td colspan="1" rowspan="1">使用&lt;urilist_uri&gt; 作为源文件列表</td>
  364. <td colspan="1" rowspan="1">这等价于把所有文件名列在命令行中。
  365. <span class="codefrag">urilist_uri</span> 列表应该是完整合法的URI。
  366. </td>
  367. </tr>
  368. </table>
  369. <a name="N10133"></a><a name="uo"></a>
  370. <h4>更新和覆盖</h4>
  371. <p>这里给出一些 <span class="codefrag">-update</span>和 <span class="codefrag">-overwrite</span>的例子。
  372. 考虑一个从<span class="codefrag">/foo/a</span> 和
  373. <span class="codefrag">/foo/b</span> 到 <span class="codefrag">/bar/foo</span>的拷贝,源路径包括:
  374. </p>
  375. <p>
  376. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a</span>
  377. <br>
  378. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a/aa</span>
  379. <br>
  380. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a/ab</span>
  381. <br>
  382. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b</span>
  383. <br>
  384. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b/ba</span>
  385. <br>
  386. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b/ab</span>
  387. </p>
  388. <p>如果没设置<span class="codefrag">-update</span>或 <span class="codefrag">-overwrite</span>选项,
  389. 那么两个源都会映射到目标端的
  390. <span class="codefrag">/bar/foo/ab</span>。
  391. 如果设置了这两个选项,每个源目录的内容都会和目标目录的
  392. <strong>内容</strong> 做比较。DistCp碰到这类冲突的情况会终止操作并退出。</p>
  393. <p>默认情况下,<span class="codefrag">/bar/foo/a</span> 和
  394. <span class="codefrag">/bar/foo/b</span> 目录都会被创建,所以并不会有冲突。</p>
  395. <p>现在考虑一个使用<span class="codefrag">-update</span>合法的操作:<br>
  396. <span class="codefrag">distcp -update hdfs://nn1:8020/foo/a \</span>
  397. <br>
  398. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  399. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  400. hdfs://nn1:8020/foo/b \</span>
  401. <br>
  402. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  403. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  404. hdfs://nn2:8020/bar</span>
  405. </p>
  406. <p>其中源路径/大小:</p>
  407. <p>
  408. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a</span>
  409. <br>
  410. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a/aa 32</span>
  411. <br>
  412. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/a/ab 32</span>
  413. <br>
  414. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b</span>
  415. <br>
  416. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b/ba 64</span>
  417. <br>
  418. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn1:8020/foo/b/bb 32</span>
  419. </p>
  420. <p>和目的路径/大小:</p>
  421. <p>
  422. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar</span>
  423. <br>
  424. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/aa 32</span>
  425. <br>
  426. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/ba 32</span>
  427. <br>
  428. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/bb 64</span>
  429. </p>
  430. <p>会产生:</p>
  431. <p>
  432. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar</span>
  433. <br>
  434. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/aa 32</span>
  435. <br>
  436. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/ab 32</span>
  437. <br>
  438. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/ba 64</span>
  439. <br>
  440. <span class="codefrag">&nbsp;&nbsp;&nbsp;&nbsp;hdfs://nn2:8020/bar/bb 32</span>
  441. </p>
  442. <p>只有nn2的<span class="codefrag">aa</span>文件没有被覆盖。如果指定了
  443. <span class="codefrag">-overwrite</span>选项,所有文件都会被覆盖。
  444. </p>
  445. </div> <!-- Usage -->
  446. <a name="N101E4"></a><a name="etc"></a>
  447. <h2 class="h3">附录</h2>
  448. <div class="section">
  449. <a name="N101EA"></a><a name="Map%E6%95%B0%E7%9B%AE"></a>
  450. <h3 class="h4">Map数目</h3>
  451. <p>DistCp会尝试着均分需要拷贝的内容,这样每个map拷贝差不多相等大小的内容。
  452. 但因为文件是最小的拷贝粒度,所以配置增加同时拷贝(如map)的数目不一定会增加实际同时拷贝的数目以及总吞吐量。
  453. </p>
  454. <p>如果没使用<span class="codefrag">-m</span>选项,DistCp会尝试在调度工作时指定map的数目
  455. 为 <span class="codefrag">min (total_bytes / bytes.per.map, 20 * num_task_trackers)</span>,
  456. 其中<span class="codefrag">bytes.per.map</span>默认是256MB。</p>
  457. <p>建议对于长时间运行或定期运行的作业,根据源和目标集群大小、拷贝数量大小以及带宽调整map的数目。
  458. </p>
  459. <a name="N10203"></a><a name="cpver"></a>
  460. <h3 class="h4">不同HDFS版本间的拷贝</h3>
  461. <p>对于不同Hadoop版本间的拷贝,用户应该使用HftpFileSystem。
  462. 这是一个只读文件系统,所以DistCp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。
  463. 源的格式是
  464. <span class="codefrag">hftp://&lt;dfs.http.address&gt;/&lt;path&gt;</span>
  465. (默认情况<span class="codefrag">dfs.http.address</span>是
  466. &lt;namenode&gt;:50070)。</p>
  467. <a name="N10213"></a><a name="Map%2FReduce%E5%92%8C%E5%89%AF%E6%95%88%E5%BA%94"></a>
  468. <h3 class="h4">Map/Reduce和副效应</h3>
  469. <p>像前面提到的,map拷贝输入文件失败时,会带来一些副效应。
  470. </p>
  471. <ul>
  472. <li>除非使用了<span class="codefrag">-i</span>,任务产生的日志会被新的尝试替换掉。
  473. </li>
  474. <li>除非使用了<span class="codefrag">-overwrite</span>,文件被之前的map成功拷贝后当又一次执行拷贝时会被标记为
  475. "被忽略"。</li>
  476. <li>如果map失败了<span class="codefrag">mapred.map.max.attempts</span>次,剩下的map任务会被终止(除非使用了<span class="codefrag">-i</span>)。
  477. </li>
  478. <li>如果<span class="codefrag">mapred.speculative.execution</span>被设置为
  479. <span class="codefrag">final</span>和<span class="codefrag">true</span>,则拷贝的结果是未定义的。</li>
  480. </ul>
  481. </div> <!-- Appendix -->
  482. </div>
  483. <!--+
  484. |end content
  485. +-->
  486. <div class="clearboth">&nbsp;</div>
  487. </div>
  488. <div id="footer">
  489. <!--+
  490. |start bottomstrip
  491. +-->
  492. <div class="lastmodified">
  493. <script type="text/javascript"><!--
  494. document.write("Last Published: " + document.lastModified);
  495. // --></script>
  496. </div>
  497. <div class="copyright">
  498. Copyright &copy;
  499. 2007 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
  500. </div>
  501. <!--+
  502. |end bottomstrip
  503. +-->
  504. </div>
  505. </body>
  506. </html>