hod_user_guide.html 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251
  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 On Demand用户指南
  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"><!--
  90. document.write("Last Published: " + document.lastModified);
  91. // --></script>
  92. </div>
  93. <!--+
  94. |breadtrail
  95. +-->
  96. <div class="breadtrail">
  97. &nbsp;
  98. </div>
  99. <!--+
  100. |start Menu, mainarea
  101. +-->
  102. <!--+
  103. |start Menu
  104. +-->
  105. <div id="menu">
  106. <div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">文档</div>
  107. <div id="menu_1.1" class="menuitemgroup">
  108. <div class="menuitem">
  109. <a href="index.html">概述</a>
  110. </div>
  111. <div class="menuitem">
  112. <a href="quickstart.html">快速入门</a>
  113. </div>
  114. <div class="menuitem">
  115. <a href="cluster_setup.html">集群搭建</a>
  116. </div>
  117. <div class="menuitem">
  118. <a href="hdfs_design.html">HDFS构架设计</a>
  119. </div>
  120. <div class="menuitem">
  121. <a href="hdfs_user_guide.html">HDFS使用指南</a>
  122. </div>
  123. <div class="menuitem">
  124. <a href="hdfs_permissions_guide.html">HDFS权限指南</a>
  125. </div>
  126. <div class="menuitem">
  127. <a href="hdfs_quota_admin_guide.html">HDFS配额管理指南</a>
  128. </div>
  129. <div class="menuitem">
  130. <a href="commands_manual.html">命令手册</a>
  131. </div>
  132. <div class="menuitem">
  133. <a href="hdfs_shell.html">FS Shell使用指南</a>
  134. </div>
  135. <div class="menuitem">
  136. <a href="distcp.html">DistCp使用指南</a>
  137. </div>
  138. <div class="menuitem">
  139. <a href="mapred_tutorial.html">Map-Reduce教程</a>
  140. </div>
  141. <div class="menuitem">
  142. <a href="native_libraries.html">Hadoop本地库</a>
  143. </div>
  144. <div class="menuitem">
  145. <a href="streaming.html">Streaming</a>
  146. </div>
  147. <div class="menuitem">
  148. <a href="hadoop_archives.html">Hadoop Archives</a>
  149. </div>
  150. <div class="menuitem">
  151. <a href="hod.html">Hadoop On Demand</a>
  152. </div>
  153. <div class="menuitem">
  154. <a href="http://hadoop.apache.org/core/docs/r0.18.2/api/index.html">API参考</a>
  155. </div>
  156. <div class="menuitem">
  157. <a href="http://hadoop.apache.org/core/docs/r0.18.2/jdiff/changes.html">API Changes</a>
  158. </div>
  159. <div class="menuitem">
  160. <a href="http://wiki.apache.org/hadoop/">维基</a>
  161. </div>
  162. <div class="menuitem">
  163. <a href="http://wiki.apache.org/hadoop/FAQ">常见问题</a>
  164. </div>
  165. <div class="menuitem">
  166. <a href="http://hadoop.apache.org/core/mailing_lists.html">邮件列表</a>
  167. </div>
  168. <div class="menuitem">
  169. <a href="http://hadoop.apache.org/core/docs/r0.18.2/releasenotes.html">发行说明</a>
  170. </div>
  171. <div class="menuitem">
  172. <a href="http://hadoop.apache.org/core/docs/r0.18.2/changes.html">变更日志</a>
  173. </div>
  174. </div>
  175. <div id="credit"></div>
  176. <div id="roundbottom">
  177. <img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
  178. <!--+
  179. |alternative credits
  180. +-->
  181. <div id="credit2"></div>
  182. </div>
  183. <!--+
  184. |end Menu
  185. +-->
  186. <!--+
  187. |start content
  188. +-->
  189. <div id="content">
  190. <div title="Portable Document Format" class="pdflink">
  191. <a class="dida" href="hod_user_guide.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
  192. PDF</a>
  193. </div>
  194. <h1>
  195. Hadoop On Demand用户指南
  196. </h1>
  197. <div id="minitoc-area">
  198. <ul class="minitoc">
  199. <li>
  200. <a href="#%E7%AE%80%E4%BB%8B">简介</a>
  201. </li>
  202. <li>
  203. <a href="#HOD%E4%BD%BF%E7%94%A8%E5%85%A5%E9%97%A8">HOD使用入门</a>
  204. <ul class="minitoc">
  205. <li>
  206. <a href="#%E4%B8%80%E4%B8%AA%E5%85%B8%E5%9E%8BHOD%E4%BC%9A%E8%AF%9D">一个典型HOD会话</a>
  207. </li>
  208. <li>
  209. <a href="#%E4%BD%BF%E7%94%A8HOD%E8%BF%90%E8%A1%8CHadoop%E8%84%9A%E6%9C%AC">使用HOD运行Hadoop脚本</a>
  210. </li>
  211. </ul>
  212. </li>
  213. <li>
  214. <a href="#HOD%E7%9A%84%E5%8A%9F%E8%83%BD">HOD的功能</a>
  215. <ul class="minitoc">
  216. <li>
  217. <a href="#%E4%BE%9B%E5%BA%94%E4%B8%8E%E7%AE%A1%E7%90%86Hadoop%E9%9B%86%E7%BE%A4">供应与管理Hadoop集群</a>
  218. </li>
  219. <li>
  220. <a href="#%E4%BD%BF%E7%94%A8tarball%E5%88%86%E5%8F%91Hadoop">使用tarball分发Hadoop</a>
  221. </li>
  222. <li>
  223. <a href="#%E4%BD%BF%E7%94%A8%E5%A4%96%E9%83%A8HDFS">使用外部HDFS</a>
  224. </li>
  225. <li>
  226. <a href="#%E9%85%8D%E7%BD%AEHadoop%E7%9A%84%E9%80%89%E9%A1%B9">配置Hadoop的选项</a>
  227. </li>
  228. <li>
  229. <a href="#%E6%9F%A5%E7%9C%8BHadoop%E7%9A%84Web-UI">查看Hadoop的Web-UI</a>
  230. </li>
  231. <li>
  232. <a href="#%E6%94%B6%E9%9B%86%E5%92%8C%E6%9F%A5%E7%9C%8BHadoop%E6%97%A5%E5%BF%97">收集和查看Hadoop日志</a>
  233. </li>
  234. <li>
  235. <a href="#%E9%97%B2%E7%BD%AE%E9%9B%86%E7%BE%A4%E7%9A%84%E8%87%AA%E5%8A%A8%E5%9B%9E%E6%94%B6">闲置集群的自动回收</a>
  236. </li>
  237. <li>
  238. <a href="#%E6%8C%87%E5%AE%9A%E9%A2%9D%E5%A4%96%E7%9A%84%E4%BD%9C%E4%B8%9A%E5%B1%9E%E6%80%A7">指定额外的作业属性</a>
  239. </li>
  240. <li>
  241. <a href="#%E6%8D%95%E8%8E%B7HOD%E5%9C%A8Torque%E4%B8%AD%E7%9A%84%E9%80%80%E5%87%BA%E7%A0%81">捕获HOD在Torque中的退出码</a>
  242. </li>
  243. <li>
  244. <a href="#%E5%91%BD%E4%BB%A4%E8%A1%8C">命令行</a>
  245. </li>
  246. <li>
  247. <a href="#HOD%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9"> HOD配置选项</a>
  248. </li>
  249. </ul>
  250. </li>
  251. <li>
  252. <a href="#%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4">故障排除</a>
  253. <ul class="minitoc">
  254. <li>
  255. <a href="#%E5%88%86%E9%85%8D%E6%93%8D%E4%BD%9C%E6%97%B6">分配操作时hod挂起</a>
  256. </li>
  257. <li>
  258. <a href="#%E5%9B%9E%E6%94%B6%E6%93%8D%E4%BD%9C%E6%97%B6">回收操作时hod挂起</a>
  259. </li>
  260. <li>
  261. <a href="#%E5%A4%B1%E8%B4%A5%E6%97%B6%E7%9A%84%E9%94%99%E8%AF%AF%E4%BB%A3%E7%A0%81%E5%92%8C%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF">hod失败时的错误代码和错误信息</a>
  262. </li>
  263. <li>
  264. <a href="#Hadoop+DFSClient%E8%AD%A6%E5%91%8ANotReplicatedYetException%E4%BF%A1%E6%81%AF">Hadoop DFSClient警告NotReplicatedYetException信息</a>
  265. </li>
  266. <li>
  267. <a href="#%E6%88%90%E5%8A%9F%E5%88%86%E9%85%8D%E7%9A%84%E9%9B%86%E7%BE%A4%E4%B8%8A%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8CHadoop%E4%BD%9C%E4%B8%9A">成功分配的集群上无法运行Hadoop作业</a>
  268. </li>
  269. <li>
  270. <a href="#%E6%88%91%E7%9A%84Hadoop%E4%BD%9C%E4%B8%9A%E8%A2%AB%E4%B8%AD%E6%AD%A2%E4%BA%86">我的Hadoop作业被中止了</a>
  271. </li>
  272. <li>
  273. <a href="#Hadoop%E4%BD%9C%E4%B8%9A%E5%A4%B1%E8%B4%A5%E5%B9%B6%E8%BF%94%E5%9B%9E%E6%B6%88%E6%81%AF%EF%BC%9A%E2%80%98Job+tracker+still+initializing%E2%80%99">Hadoop作业失败并返回消息:&lsquo;Job tracker still initializing&rsquo;</a>
  274. </li>
  275. <li>
  276. <a href="#Torque%E7%9A%84%E9%80%80%E5%87%BA%E4%BB%A3%E7%A0%81%E6%B2%A1%E6%9C%89%E5%8C%85%E5%90%ABHOD%E7%9A%84">Torque的退出代码没有包含HOD的</a>
  277. </li>
  278. <li>
  279. <a href="#Hadoop%E6%97%A5%E5%BF%97%E6%9C%AA%E8%A2%AB%E4%B8%8A%E4%BC%A0%E5%88%B0DFS">Hadoop日志未被上传到DFS</a>
  280. </li>
  281. <li>
  282. <a href="#%E5%AE%9A%E4%BD%8DRingmaster%E6%97%A5%E5%BF%97">定位Ringmaster日志</a>
  283. </li>
  284. <li>
  285. <a href="#%E5%AE%9A%E4%BD%8DHodring%E6%97%A5%E5%BF%97">定位Hodring日志</a>
  286. </li>
  287. </ul>
  288. </li>
  289. </ul>
  290. </div>
  291. <a name="N1000C"></a><a name="%E7%AE%80%E4%BB%8B"></a>
  292. <h2 class="h3">简介</h2>
  293. <div class="section">
  294. <a name="Introduction" id="Introduction"></a>
  295. <p>Hadoop On Demand (HOD)是一个能在大规模物理集群上供应虚拟Hadoop集群的系统。它使用Torque资源管理器进行节点分配。在所分配的节点上,它能启动Hadoop Map/Reduce以及HDFS守护进程。它能自动为Hadoop守护进程及客户端生成合适的配置文件(Hadoop-site.xml)。HOD还能够将Hadoop分发到它分配的虚拟集群节点上。总之,HOD方便管理者和用户快速安装与使用Hadoop。它也是需要在同一物理集群上测试各自版本的Hadoop开发者和测试者的实用工具。</p>
  296. <p>HOD支持Hadoop 0.15及其后续版本。</p>
  297. <p>后面的文档包括一个快速入门指南能让你快速上手HOD,一个所有HOD特性的详细手册,命令行选项,一些已知问题和故障排除的信息。</p>
  298. </div>
  299. <a name="N1001E"></a><a name="HOD%E4%BD%BF%E7%94%A8%E5%85%A5%E9%97%A8"></a>
  300. <h2 class="h3">HOD使用入门</h2>
  301. <div class="section">
  302. <a name="Getting_Started_Using_HOD_0_4" id="Getting_Started_Using_HOD_0_4"></a>
  303. <p>在这部分,我们将会逐步骤地介绍使用HOD涉及到的最基本的操作。在开始遵循这些步骤之前,我们假定HOD及其依赖的软硬件均已被正确安装和配置。这步通常由集群的系统管理员负责。</p>
  304. <p>HOD的用户界面是一个命令行工具,叫做<span class="codefrag">hod</span>。它被一个通常由系统管理员为用户设置好的配置文件所驱动。用户在使用<span class="codefrag">hod</span>的时候可以覆盖这个配置,文档的后面会由介绍。使用<span class="codefrag">hod</span>时有如下两种方式可以指定配置文件:</p>
  305. <ul>
  306. <li>在命令行中指定,使用 -c 选项。例如<span class="codefrag">hod &lt;operation&gt; &lt;required-args&gt; -c path-to-the-configuration-file [ohter-options]</span>
  307. </li>
  308. <li>在运行<span class="codefrag">hod</span>的地方设置环境变量<em>HOD_CONF_DIR</em>。这个变量应指向指向一个本地目录,其中有名为<em>hodrc</em>的文件。这与Hadoop中的<em>HADOOP_CONF_DIR</em>与<em>hadoop-site.xml</em>文件是类似的。如果命令行中未指定配置文件,<span class="codefrag">hod</span>会查找<em>HOD_CONF_DIR</em>环境变量指定目录下的<em>hodrc</em>文件。</li>
  309. </ul>
  310. <p>下面的例子中,我们将不会明确指出这个配置选项,假定其已正确指定。</p>
  311. <a name="N1005B"></a><a name="%E4%B8%80%E4%B8%AA%E5%85%B8%E5%9E%8BHOD%E4%BC%9A%E8%AF%9D"></a>
  312. <h3 class="h4">一个典型HOD会话</h3>
  313. <a name="HOD_Session" id="HOD_Session"></a>
  314. <p>一个典型HOD会话至少包括三个步骤:分配,执行Hadoop作业,回收。为此,执行如下步骤。</p>
  315. <p>
  316. <strong>创建一个集群目录</strong>
  317. </p>
  318. <a name="Create_a_Cluster_Directory" id="Create_a_Cluster_Directory"></a>
  319. <p>
  320. <em>集群目录</em>是本地文件系统上的一个目录,<span class="codefrag">hod</span>会为它分配的集群产生对应的Hadoop配置<em>hadoop-site.xml</em>,放在这个目录下。这个目录可以按下文所述方式传递给<span class="codefrag">hod</span>操作。如果这个目录不存在,HOD会自动创建这个目录。一但分配好了集群,用户可通过Hadoop --config选项指定集群目录,在之上运行Hadoop作业。</p>
  321. <p>
  322. <strong><em>allocate</em>操作</strong>
  323. </p>
  324. <a name="Operation_allocate" id="Operation_allocate"></a>
  325. <p>
  326. <em>allocate</em>操作用来分配一组节点并在之上安装和提供Hadoop。它的语法如下。注意它要求指定参数集群目录(-d, --hod.clusterdir)和节点个数(-n, --hod.nodecount):</p>
  327. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  328. <tr>
  329. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes [OPTIONS]</span></td>
  330. </tr>
  331. </table>
  332. <p>如果命令成功执行,<span class="codefrag">cluster_dir/hadoop-site.xml</span>会被生成,文件中包含了分配出的集群的信息。它也会打印出关于Hadoop的web UI的信息。</p>
  333. <p>试运行这个命令会产生如下输出。注意在这个例子中集群目录是<span class="codefrag">~/hod-clusters/test</span>,我们要分配5个节点:</p>
  334. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  335. <tr>
  336. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d ~/hod-clusters/test -n 5</span>
  337. <br>
  338. <span class="codefrag">INFO - HDFS UI on http://foo1.bar.com:53422</span>
  339. <br>
  340. <span class="codefrag">INFO - Mapred UI on http://foo2.bar.com:55380</span>
  341. <br>
  342. </td>
  343. </tr>
  344. </table>
  345. <p>
  346. <strong>在分配的集群上执行Hadoop作业</strong>
  347. </p>
  348. <a name="Running_Hadoop_jobs_using_the_al" id="Running_Hadoop_jobs_using_the_al"></a>
  349. <p>现在,可以用一般的方式在分配的集群上执行Hadoop作业了。这是假定像<em>JAVA_HOME</em>,指向Hadoop安装的路径已被正确地设置了:</p>
  350. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  351. <tr>
  352. <td colspan="1" rowspan="1"><span class="codefrag">$ hadoop --config cluster_dir hadoop_command hadoop_command_args</span></td>
  353. </tr>
  354. </table>
  355. <p>或者</p>
  356. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  357. <tr>
  358. <td colspan="1" rowspan="1"><span class="codefrag">$ export HADOOP_CONF_DIR=cluster_dir</span>
  359. <br>
  360. <span class="codefrag">$ hadoop hadoop_command hadoop_command_args</span></td>
  361. </tr>
  362. </table>
  363. <p>继续我们的例子,下面的命令会在分配的集群上运行wordcount的例子:</p>
  364. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  365. <tr>
  366. <td colspan="1" rowspan="1"><span class="codefrag">$ hadoop --config ~/hod-clusters/test jar /path/to/hadoop/hadoop-examples.jar wordcount /path/to/input /path/to/output</span></td>
  367. </tr>
  368. </table>
  369. <p>或者</p>
  370. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  371. <tr>
  372. <td colspan="1" rowspan="1"><span class="codefrag">$ export HADOOP_CONF_DIR=~/hod-clusters/test</span>
  373. <br>
  374. <span class="codefrag">$ hadoop jar /path/to/hadoop/hadoop-examples.jar wordcount /path/to/input /path/to/output</span></td>
  375. </tr>
  376. </table>
  377. <p>
  378. <strong> <em>deallocate</em>操作</strong>
  379. </p>
  380. <a name="Operation_deallocate" id="Operation_deallocate"></a>
  381. <p>
  382. <em>deallocate</em>操作用来回收分配到的集群。当完成集群使用之后,必须执行回收操作使这些节点可以为其他用户所用。<em>deallocate</em>操作的语法如下。注意它需要集群目录(-d, --hod.clusterdir)作为参数:</p>
  383. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  384. <tr>
  385. <td colspan="1" rowspan="1"><span class="codefrag">$ hod deallocate -d cluster_dir</span></td>
  386. </tr>
  387. </table>
  388. <p>继续我们的例子,如下命令会回收集群:</p>
  389. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  390. <tr>
  391. <td colspan="1" rowspan="1"><span class="codefrag">$ hod deallocate -d ~/hod-clusters/test</span></td>
  392. </tr>
  393. </table>
  394. <p>如你所见,HOD允许用户分配一个集群,随意的使用它来运行Hadoop作业。例如,通过从多个shell中启动使用同一个配置的hadoop,用户可以做到在同一个集群上并发运行多个作业。</p>
  395. <a name="N10128"></a><a name="%E4%BD%BF%E7%94%A8HOD%E8%BF%90%E8%A1%8CHadoop%E8%84%9A%E6%9C%AC"></a>
  396. <h3 class="h4">使用HOD运行Hadoop脚本</h3>
  397. <a name="HOD_Script_Mode" id="HOD_Script_Mode"></a>
  398. <p>HOD的<em>script操作</em>能将集群的分配,使用和回收组织在一起。这对那些想运行Hadoop作业脚本,期望HOD能在脚本结束后自动完成清理操作的用户特别管用。用<span class="codefrag">hod</span>执行Hadoop脚本,需要这么做:</p>
  399. <p>
  400. <strong>创建脚本文件</strong>
  401. </p>
  402. <a name="Create_a_script_file" id="Create_a_script_file"></a>
  403. <p>这是一个普通的shell脚本,通常里面会包含hadoop命令,如:</p>
  404. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  405. <tr>
  406. <td colspan="1" rowspan="1"><span class="codefrag">$ hadoop jar jar_file options</span></td>
  407. </tr>
  408. </table>
  409. <p>当然,用户可以向脚本中添加任何有效的命令。HOD会在执行这个脚本时自动地设置<em>HADOOP_CONF_DIR</em>指向分配的集群。用户不必对此担心。不过,像分配操作时一样,用户需要指定一个集群目录。</p>
  410. <p>
  411. <strong>运行脚本</strong>
  412. </p>
  413. <a name="Running_the_script" id="Running_the_script"></a>
  414. <p>
  415. <em>脚本操作</em>的语法如下。注意它需要集群目录(-d, --hod.clusterdir),节点个数(-n, --hod.nodecount)以及脚本文件(-s, --hod.script)作为参数:</p>
  416. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  417. <tr>
  418. <td colspan="1" rowspan="1"><span class="codefrag">$ hod script -d cluster_directory -n number_of_nodes -s script_file</span></td>
  419. </tr>
  420. </table>
  421. <p>注意一但脚本执行完毕,HOD就会回收集群,这意味着脚本必须要做到等hadoop作业完成后脚本才结束。用户写脚本时必须注意这点。</p>
  422. </div>
  423. <a name="N1016C"></a><a name="HOD%E7%9A%84%E5%8A%9F%E8%83%BD"></a>
  424. <h2 class="h3">HOD的功能</h2>
  425. <div class="section">
  426. <a name="HOD_0_4_Features" id="HOD_0_4_Features"></a><a name="N10174"></a><a name="%E4%BE%9B%E5%BA%94%E4%B8%8E%E7%AE%A1%E7%90%86Hadoop%E9%9B%86%E7%BE%A4"></a>
  427. <h3 class="h4">供应与管理Hadoop集群</h3>
  428. <a name="Provisioning_and_Managing_Hadoop" id="Provisioning_and_Managing_Hadoop"></a>
  429. <p>HOD主要功能是供应Hadoop的Map/Reduce和HDFS集群。这些在见入门一节已经做过描述。 此外,要是还有节点可用,并且组织上也批准,一个用户可以在同一时间内使用HOD分配多个Map/Reduce集群。对于分配到的不同集群,用户需要为上面提到的<span class="codefrag">cluster_dir</span>参数指定不同的路径。HOD提供<em>list</em>和<em>info</em>操作可以管理多个集群。</p>
  430. <p>
  431. <strong><em>list</em>操作</strong>
  432. </p>
  433. <a name="Operation_list" id="Operation_list"></a>
  434. <p>list操作能列举到目前为止用户所创建的所有集群。存放hadoop-site.xml的集群目录,与JobTracker和/或HDFS的连接及状态也会被显示出来。list操作的使用语法如下:</p>
  435. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  436. <tr>
  437. <td colspan="1" rowspan="1"><span class="codefrag">$ hod list</span></td>
  438. </tr>
  439. </table>
  440. <p>
  441. <strong><em>info</em>操作</strong>
  442. </p>
  443. <a name="Operation_info" id="Operation_info"></a>
  444. <p>info操作会显示指定集群相关的信息。这些信息包括Torque作业id,HOD Ringmaster进程,Hadoop的JobTracker和NameNode守护进程等重要守护进程的位置。info操作的语法如下。注意它需要集群目录(-d, --hod.clusterdir)作为参数:</p>
  445. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  446. <tr>
  447. <td colspan="1" rowspan="1"><span class="codefrag">$ hod info -d cluster_dir</span></td>
  448. </tr>
  449. </table>
  450. <p>
  451. <span class="codefrag">cluster_dir</span>应为前面<em>allocate</em>操作中指定的有效集群目录。</p>
  452. <a name="N101BE"></a><a name="%E4%BD%BF%E7%94%A8tarball%E5%88%86%E5%8F%91Hadoop"></a>
  453. <h3 class="h4">使用tarball分发Hadoop</h3>
  454. <a name="Using_a_tarball_to_distribute_Ha" id="Using_a_tarball_to_distribute_Ha"></a>
  455. <p>供应Hadoop时,HOD可以使用集群节点上已经安装好的Hadoop,也可以将hadoop的tarball作为供应操作的一部分在节点上进行分发和安装。如果使用tarball选项,就不必非得使用预装的Hadoop了,也不要求集群节点上必须有一个预装的版本。这对开发/QE环境下在一个共享集群上测试不同版本hadoop的开发者尤其有用。</p>
  456. <p>要使用预装的Hadoop,你必须在hodrc中的<span class="codefrag">gridservice-hdfs</span>部分和<span class="codefrag">gridservice-mapred</span>部分指定<span class="codefrag">pkgs</span>选项。它必须指向集群中所有节点上Hadoop的安装路径。</p>
  457. <p>指定Tarball的语法如下:</p>
  458. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  459. <tr>
  460. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes -t hadoop_tarball_location</span></td>
  461. </tr>
  462. </table>
  463. <p>例如,下面的命令根据tarball<span class="codefrag">~/share/hadoop.tar.gz</span>分配Hadoop:</p>
  464. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  465. <tr>
  466. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d ~/hadoop-cluster -n 10 -t ~/share/hadoop.tar.gz</span></td>
  467. </tr>
  468. </table>
  469. <p>类似地,使用hod脚本的语法如下:</p>
  470. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  471. <tr>
  472. <td colspan="1" rowspan="1"><span class="codefrag">$ hod script -d cluster_directory -s scritp_file -n number_of_nodes -t hadoop_tarball_location</span></td>
  473. </tr>
  474. </table>
  475. <p>上面语法中指定的hadoop_tarball_location应指向从所有计算节点都可以访问的共享文件系统的路径。当前,HOD只支持挂载的NFS。</p>
  476. <p>
  477. <em>注意:</em>
  478. </p>
  479. <ul>
  480. <li>为了获得更好分发性能,建议Hadoop tarball只包含库与二进制文件,不包含源代码或文档。</li>
  481. <li>当你希望在用tarball方式分配的集群上执行作业,你必须使用兼容的Hadoop版本提交你的作业。最好的方式是解压,使用Tarball中的版本。</li>
  482. <li>你需要确保在tar分发包的conf目录下没有Hadoop配置文件hadoop-env.sh和hadoop-site.xml。如果这些文件存在并包含错误的值,集群分配可能会失败。
  483. </li>
  484. </ul>
  485. <a name="N10214"></a><a name="%E4%BD%BF%E7%94%A8%E5%A4%96%E9%83%A8HDFS"></a>
  486. <h3 class="h4">使用外部HDFS</h3>
  487. <a name="Using_an_external_HDFS" id="Using_an_external_HDFS"></a>
  488. <p>在典型的由HOD提供的Hadoop集群中,HDFS已经被静态地(未使用HOD)设置好。这能使数据在HOD提供的集群被回收后还可以持久保存在HDFS中。为使用静态配置的HDFS,你的hodrc必须指向一个外部HDFS。具体就是,在hodrc的<span class="codefrag">gridservice-hdfs</span>部分将下面选项设置为正确的值:</p>
  489. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  490. <tr>
  491. <td colspan="1" rowspan="1">external = true</td>
  492. </tr>
  493. <tr>
  494. <td colspan="1" rowspan="1">host = HDFS NameNode主机名</td>
  495. </tr>
  496. <tr>
  497. <td colspan="1" rowspan="1">fs_port = HDFS NameNode端口</td>
  498. </tr>
  499. <tr>
  500. <td colspan="1" rowspan="1">info_port = HDFS NameNode web UI的端口</td>
  501. </tr>
  502. </table>
  503. <p>
  504. <em>注意:</em>你也可以从命令行开启这个选项。即,你这样去使用一个静态HDFS:<br>
  505. </p>
  506. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  507. <tr>
  508. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes --gridservice-hdfs.external</span></td>
  509. </tr>
  510. </table>
  511. <p>如果需要,HOD即可以供应HDFS集群也可以供应Map/Reduce的集群HOD。这需要设置hodrc中的<span class="codefrag">gridservice-hdfs</span>部分的下列选项:</p>
  512. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  513. <tr>
  514. <td colspan="1" rowspan="1">external = false</td>
  515. </tr>
  516. </table>
  517. <a name="N10258"></a><a name="%E9%85%8D%E7%BD%AEHadoop%E7%9A%84%E9%80%89%E9%A1%B9"></a>
  518. <h3 class="h4">配置Hadoop的选项</h3>
  519. <a name="Options_for_Configuring_Hadoop" id="Options_for_Configuring_Hadoop"></a>
  520. <p>HOD提供一个非常方便的机制能配置它提供的Hadoop守护进程和它在客户端生成的hadoop-site.xml。通过在HOD配置文件中指定配置参数,或在分配集群时在命令行指定都可做到这点。</p>
  521. <p>
  522. <strong>配置Hadoop守护进程</strong>
  523. </p>
  524. <a name="Configuring_Hadoop_Daemons" id="Configuring_Hadoop_Daemons"></a>
  525. <p>要配置Hadoop守护进程,你可以这么做:</p>
  526. <p>对于Map/Reduce,指定<span class="codefrag">gridservice-mapred</span>部分的<span class="codefrag">server-params</span>项的指为一个以逗号分割的key-value对列表。同配置动态HDFS集群一样,设置<span class="codefrag">gridservice-hdfs</span>部分的<span class="codefrag">server-params</span>项。如果这些参数应被标记成<em>final</em>,将这些参数包含到相应部分的<span class="codefrag">final-server-params</span>项中。</p>
  527. <p>例如:</p>
  528. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  529. <tr>
  530. <td colspan="1" rowspan="1"><span class="codefrag">server-params = mapred.reduce.parallel.copies=20,io.sort.factor=100,io.sort.mb=128,io.file.buffer.size=131072</span></td>
  531. </tr>
  532. <tr>
  533. <td colspan="1" rowspan="1"><span class="codefrag">final-server-params = mapred.child.java.opts=-Xmx512m,dfs.block.size=134217728,fs.inmemory.size.mb=128</span></td>
  534. </tr>
  535. </table>
  536. <p>要从命令行指定选项,你可以用如下语法:</p>
  537. <p>配置Map/Reduce守护进程:</p>
  538. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  539. <tr>
  540. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes -Mmapred.reduce.parallel.copies=20 -Mio.sort.factor=100</span></td>
  541. </tr>
  542. </table>
  543. <p>在上述例子中,<em>mapred.reduce.parallel.copies</em>参数和<em>io.sort.factor</em>参数将会被添加到<span class="codefrag">server-params</span>中,如果已经在<span class="codefrag">server-params</span>中存在,则它们会被覆盖。要将这些参数指定成<em>final</em>类型,你可以:</p>
  544. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  545. <tr>
  546. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes -Fmapred.reduce.parallel.copies=20 -Fio.sort.factor=100</span></td>
  547. </tr>
  548. </table>
  549. <p>不过,应注意final参数无法被命令行改写的,只有在未指定的情形才能追加。</p>
  550. <p>配置动态供应的HDFS守护进程的选项与此相似。用-H替换-M以,用-S替换-F即可。</p>
  551. <p>
  552. <strong>配置Hadoop的作业提交(客户端)程序</strong>
  553. </p>
  554. <a name="Configuring_Hadoop_Job_Submissio" id="Configuring_Hadoop_Job_Submissio"></a>
  555. <p>如上所述,当allocate操作成功后,<span class="codefrag">cluster_dir/hadoop-site.xml</span>将会生成,其中会包含分配的集群的JobTracker和NameNode的信息。这个配置用于向集群提交作业。HOD提供选项可将其它的hadoop配置参数添加到该文件,其语法如下:</p>
  556. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  557. <tr>
  558. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes -Cmapred.userlog.limit.kb=200 -Cmapred.child.java.opts=-Xmx512m</span></td>
  559. </tr>
  560. </table>
  561. <p>上例中,<em>mapred.userlog.limit.kb</em>和<em>mapred.child.java.opts</em>会被添加到hod产生的hadoop-site.xml中。</p>
  562. <a name="N102EA"></a><a name="%E6%9F%A5%E7%9C%8BHadoop%E7%9A%84Web-UI"></a>
  563. <h3 class="h4">查看Hadoop的Web-UI</h3>
  564. <a name="Viewing_Hadoop_Web_UIs" id="Viewing_Hadoop_Web_UIs"></a>
  565. <p>HOD的allocate操作会打印出JobTracker和NameNode的Web UI的URL。例如:</p>
  566. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  567. <tr>
  568. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d ~/hadoop-cluster -n 10 -c ~/hod-conf-dir/hodrc</span>
  569. <br>
  570. <span class="codefrag">INFO - HDFS UI on http://host242.foo.com:55391</span>
  571. <br>
  572. <span class="codefrag">INFO - Mapred UI on http://host521.foo.com:54874</span>
  573. </td>
  574. </tr>
  575. </table>
  576. <p>上面提到的<em>info</em>操作可以给你同样的信息。</p>
  577. <a name="N1030C"></a><a name="%E6%94%B6%E9%9B%86%E5%92%8C%E6%9F%A5%E7%9C%8BHadoop%E6%97%A5%E5%BF%97"></a>
  578. <h3 class="h4">收集和查看Hadoop日志</h3>
  579. <a name="Collecting_and_Viewing_Hadoop_Lo" id="Collecting_and_Viewing_Hadoop_Lo"></a>
  580. <p>要获取在某些分配节点上运行的守护进程的Hadoop日志:</p>
  581. <ul>
  582. <li>登录感兴趣的节点。如果你想查看JobTracker或者NameNode的日志,<em>list</em>和<em>info</em>操作能告诉你这些进程在那些节点上运行。</li>
  583. <li>获取感兴趣的守护进程的进程信息(例如,<span class="codefrag">ps ux | grep TaskTracker</span>)</li>
  584. <li>在这些进程信息中,查找变量<span class="codefrag">-Dhadoop.log.dir</span>的值。通常是hod配置文件里<span class="codefrag">hodring.temp-dir</span>目录的一个子目录 。</li>
  585. <li>切换到<span class="codefrag">hadoop.log.dir</span>目录以查看守护进程日志和用户日志。</li>
  586. </ul>
  587. <p>HOD也提供了一个机制,能让你在集群回收后将日志收集存放到文件系统,或者一个在外部配置的HDFS中。这样的话,在作业完成,节点回收后你还可以看这些日志。要做到这点,像下面一样为log-destination-uri指定一个URI:</p>
  588. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  589. <tr>
  590. <td colspan="1" rowspan="1"><span class="codefrag">log-destination-uri= hdfs://host123:45678/user/hod/logs</span>或者</td>
  591. </tr>
  592. <tr>
  593. <td colspan="1" rowspan="1"><span class="codefrag">log-destination-uri= file://path/to/store/log/files</span></td>
  594. </tr>
  595. </table>
  596. <p>在上面指定的的根目录中,HOD会创建路径user_name/torque_jobid,把作业涉及到的每个节点上的日志文件gzip压缩,存放在里面。</p>
  597. <p>注意要在HDFS上存储这些文件,你得将<span class="codefrag">hodring.pkgs</span>项配置为和刚才提到的HDFS兼容的版本。否则,HOD会尝试使用它供应Hadoop集群时用到的Hadoop版本。</p>
  598. <a name="N10355"></a><a name="%E9%97%B2%E7%BD%AE%E9%9B%86%E7%BE%A4%E7%9A%84%E8%87%AA%E5%8A%A8%E5%9B%9E%E6%94%B6"></a>
  599. <h3 class="h4">闲置集群的自动回收</h3>
  600. <a name="Auto_deallocation_of_Idle_Cluste" id="Auto_deallocation_of_Idle_Cluste"></a>
  601. <p>HOD会自动回收在一段时间内没有运行Hadoop作业的集群。每次的HOD分配会带有一个监控设施不停地检查Hadoop作业的执行。如果侦测到在一定时间内没Hadoop作业在执行,它就回收这个集群,释放那些未被有效利用的节点。</p>
  602. <p>
  603. <em>注意:</em>当集群被回收时,<em>集群目录</em>没有被自动清空。用户须通过一个正式的<em>deallcocate</em>操作清理它。</p>
  604. <a name="N1036B"></a><a name="%E6%8C%87%E5%AE%9A%E9%A2%9D%E5%A4%96%E7%9A%84%E4%BD%9C%E4%B8%9A%E5%B1%9E%E6%80%A7"></a>
  605. <h3 class="h4">指定额外的作业属性</h3>
  606. <a name="Specifying_Additional_Job_Attrib" id="Specifying_Additional_Job_Attrib"></a>
  607. <p>HOD允许用户为一个Torque作业指定一个时钟时间和一个名称(或者标题)。 </p>
  608. <p>时钟时间是对Torque作业有效时间的一个估计。这个时间过期后,Torque将自动删除这个作业,释放其节点。指定这个时钟时间还能帮助作业调度程序更好的安排作业,提高对集群资源的使用率。</p>
  609. <p>指定时钟时间的语法如下:</p>
  610. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  611. <tr>
  612. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes -l time_in_seconds</span></td>
  613. </tr>
  614. </table>
  615. <p>Torque作业的名称或标题能给用户以友好的作业标识。每次展示Torque作业的属性的时候,这个字符串就会出现,包括<span class="codefrag">qstat</span>命令。</p>
  616. <p>指定名称或标题的语法如下:</p>
  617. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  618. <tr>
  619. <td colspan="1" rowspan="1"><span class="codefrag">$ hod allocate -d cluster_dir -n number_of_nodes -N name_of_job</span></td>
  620. </tr>
  621. </table>
  622. <p>
  623. <em>注意:</em>由于底层Torque资源管理器的限制,不以字母开头或者包含空格的名字将导致作业失败。失败信息会表明问题存在于指定的作业名称中。</p>
  624. <a name="N103A2"></a><a name="%E6%8D%95%E8%8E%B7HOD%E5%9C%A8Torque%E4%B8%AD%E7%9A%84%E9%80%80%E5%87%BA%E7%A0%81"></a>
  625. <h3 class="h4">捕获HOD在Torque中的退出码</h3>
  626. <a name="Capturing_HOD_exit_codes_in_Torq" id="Capturing_HOD_exit_codes_in_Torq"></a>
  627. <p>HOD退出码出现在Torque的exit_status字段中。这有助于使用者和系统管理员区分成功的HOD执行和失败的HOD执行。如果分配成功且所有Hadoop作业在所分配的集群上正确的执行,退出码为0。如果分配失败或者部分hadoop作业在分配集群上运行失败,退出码非0。下表列出了可能出现的退出码。<em>注意:只有所使用的Hadoop版本是0.16或以上时,Hadoop作业状态才可以被捕获。</em>
  628. </p>
  629. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  630. <tr>
  631. <td colspan="1" rowspan="1">退出码</td>
  632. <td colspan="1" rowspan="1">含义</td>
  633. </tr>
  634. <tr>
  635. <td colspan="1" rowspan="1"> 6 </td>
  636. <td colspan="1" rowspan="1">Ringmaster故障</td>
  637. </tr>
  638. <tr>
  639. <td colspan="1" rowspan="1"> 7 </td>
  640. <td colspan="1" rowspan="1"> DFS故障</td>
  641. </tr>
  642. <tr>
  643. <td colspan="1" rowspan="1"> 8 </td>
  644. <td colspan="1" rowspan="1"> Job tracker故障</td>
  645. </tr>
  646. <tr>
  647. <td colspan="1" rowspan="1"> 10 </td>
  648. <td colspan="1" rowspan="1"> 集群死亡</td>
  649. </tr>
  650. <tr>
  651. <td colspan="1" rowspan="1"> 12 </td>
  652. <td colspan="1" rowspan="1"> 集群已分配 </td>
  653. </tr>
  654. <tr>
  655. <td colspan="1" rowspan="1"> 13 </td>
  656. <td colspan="1" rowspan="1"> HDFS死亡</td>
  657. </tr>
  658. <tr>
  659. <td colspan="1" rowspan="1"> 14 </td>
  660. <td colspan="1" rowspan="1"> Mapred死亡</td>
  661. </tr>
  662. <tr>
  663. <td colspan="1" rowspan="1"> 16 </td>
  664. <td colspan="1" rowspan="1">集群中所有的Map/Reduce作业失败。查看hadoop日志了解更多细节。</td>
  665. </tr>
  666. <tr>
  667. <td colspan="1" rowspan="1"> 17 </td>
  668. <td colspan="1" rowspan="1">集群中部分的Map/Reduce作业失败。查看hadoop日志了解更多细节。</td>
  669. </tr>
  670. </table>
  671. <a name="N10434"></a><a name="%E5%91%BD%E4%BB%A4%E8%A1%8C"></a>
  672. <h3 class="h4">命令行</h3>
  673. <a name="Command_Line" id="Command_Line"></a>
  674. <p>HOD命令行的通用的语法如下:<br>
  675. <em>hod &lt;operation&gt; [ARGS] [OPTIONS]<br>
  676. </em>
  677. 允许的操作有&lsquo;allocate&rsquo;,&lsquo;deallocate&rsquo;,&lsquo;info&rsquo;,&lsquo;list&rsquo;,&lsquo;script&rsquo;以及&lsquo;help&rsquo;。要获取某特定操作的帮助你可以执行:<span class="codefrag">hod help &lt;operation&gt;</span>。要查看可能的操作你可以执行<span class="codefrag">hod help options</span>。</p>
  678. <p>
  679. <em>allocate</em>
  680. <br>
  681. <em>用法:hod allocate -d cluster_dir -n number_of_nodes [OPTIONS]</em>
  682. <br>
  683. 分配一个指定节点数目的集群,把分配信息存放在cluster_dir方便后续<span class="codefrag">hadoop</span>命令使用。注意<span class="codefrag">cluster_dir</span>必须在运行该命令前已经存在。</p>
  684. <p>
  685. <em>list</em>
  686. <br>
  687. <em>用法:hod list [OPTIONS]</em>
  688. <br>
  689. 列举出用户分配的所有集群。提供的信息包括集群对应的的Torque作业标识,存储分配信息的集群目录,Map/Reduce守护进程是否存活。</p>
  690. <p>
  691. <em>info</em>
  692. <br>
  693. <em>用法:hod info -d cluster_dir [OPTIONS]</em>
  694. <br>
  695. 列举集群分配信息存放于某指定集群目录的集群信息。</p>
  696. <p>
  697. <em>deallocate</em>
  698. <br>
  699. <em>用法:hod deallocate -d cluster_dir [OPTIONS]</em>
  700. <br>
  701. 回收集群分配信息存放于某指定集群目录的集群。</p>
  702. <p>
  703. <em>script</em>
  704. <br>
  705. <em>用法:hod script -s script_file -d cluster_directory -n number_of_node [OPTIONS]</em>
  706. <br>
  707. 用HOD<em>script</em>操作执行一个hadoop脚本。在给定数目的节点上提供Hadoop,在提交的节点执行这个脚本,并在脚本执行结束后回收集群。</p>
  708. <p>
  709. <em>help</em>
  710. <br>
  711. <em>用法:hod help [operation | 'options']</em>
  712. <br>
  713. 未指定参数时,<span class="codefrag">hod help</span>给出用法以及基本选项,等同于<span class="codefrag">hod --help</span> (见下文)。当指定参数&lsquo;options&rsquo;时,显示hod的基本选项。当指定operation时,它会显示出该特定operation的用法和相应的描述。例如,希望了解allocate操作,你可以执行<span class="codefrag">hod help allocate</span>
  714. </p>
  715. <p>除上面的操作外,HOD还能接受下列命令行选项。</p>
  716. <p>
  717. <em>--help</em>
  718. <br>
  719. 打印出用法和基本选项的帮助信息。</p>
  720. <p>
  721. <em>--verbose-help</em>
  722. <br>
  723. hodrc文件中所有的配置项均可通过命令行传递,使用语法<span class="codefrag">--section_name.option_name[=vlaue]</span>。这种方式下,命令行传递的参数会覆盖hodrc中的配置项。verbose-help命令会列出hodrc文件中全部可用项。这也是一个了解配置选项含义的好方法。</p>
  724. <p>
  725. <a href="#Options_Configuring_HOD">下一部分</a>有多数重要的hod配置项的描述。对于基本选项,你可以通过<span class="codefrag">hod help options</span>了解,对于所有的hod配置中的可能选项,你可以参看<span class="codefrag">hod --verbose-help</span>的输出。了解所有选项的描述,请参看<a href="hod_config_guide.html">配置指南</a>。</p>
  726. <a name="N104BB"></a><a name="HOD%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9"></a>
  727. <h3 class="h4"> HOD配置选项</h3>
  728. <a name="Options_Configuring_HOD" id="Options_Configuring_HOD"></a>
  729. <p> 如上所述,HOD的配置是通过系统管理员设置配置文件完成。这是一个INI风格的配置文件,文件分成多个段,每个段包含一些配置项。这些段分别和HOD的进程:client,ringmaster,hodring,mapreduce或hdfs相关。每一个配置项有选项名和值构成。</p>
  730. <p>有两种方式可让用户覆盖默认配置文件里的设定:</p>
  731. <ul>
  732. <li>在每条命令前,用户可以向HOD提供自己的配置文件,使用<span class="codefrag">-c</span>选项。</li>
  733. <li>用户可以在命令行指定HOD的配置选项覆盖正使用的配置文件中提供的值。</li>
  734. </ul>
  735. <p>这一节介绍一些最常用的配置项。为了指定方便,这些常用选项通常会有一个<em>短</em>选项名。所有其它选项可能用随后介绍的<em>长</em>选项指定。</p>
  736. <p>
  737. <em>-c config_file</em>
  738. <br>
  739. 提供要使用的配置文件。可与其他任何的HOD选项一起使用。此外,可定义<span class="codefrag">HOD_CONF_DIR</span>环境变量为一个包含<span class="codefrag">hodrc</span>文件的目录,避免每条HOD命令都要指定配置文件。</p>
  740. <p>
  741. <em>-d cluster_dir</em>
  742. <br>
  743. 大多数hod操作都要求这个选项。如<a href="#Create_a_Cluster_Directory">此处</a>描述的,<em>集群目录</em>是在本地文件系统上的一个目录,<span class="codefrag">hod</span>将它分配集群的相应Hadoop配置产生在这个目录里,即<em>hadoop-site.xml</em>。使用-d或者--hod.clusterdir将这个参数传递给<span class="codefrag">hod</span>操作,如果目录不存在,HOD会自动创建该目录。集群分配好后,用户可在这个集群上,通过指定hadoop--config为集群目录来执行Hadoop作业。</p>
  744. <p>
  745. <em>-n number_of_nodes</em>
  746. <br>
  747. hod allocation操作和script操作要求这个选项。表示要分配的节点数。</p>
  748. <p>
  749. <em>-s script-file</em>
  750. <br>
  751. 脚本操作时需要,用于指定要执行的脚本文件。</p>
  752. <p>
  753. <em>-b 1|2|3|4</em>
  754. <br>
  755. 启用给定的调试级别。能与其他HOD选项一起使用。级别4最为详尽。</p>
  756. <p>
  757. <em>-t hadoop_tarball</em>
  758. <br>
  759. 从指定tar.gz文件提供Hadoop分发。此选项值只适用于<em>allocate</em>操作。为获得更好的分发性能,强烈推荐创建Hadoop tarball<em>前</em>删除其中的源代码或文档。</p>
  760. <p>
  761. <em>-N job-name</em>
  762. <br>
  763. 内部使用的资源管理作业名。比如,对于Torque作为资源管理器的情况,会被解释成<span class="codefrag">qsub -N</span>选项,使用<span class="codefrag">qstat</span>命令时可以看到这个作业名。</p>
  764. <p>
  765. <em>-l wall-clock-time</em>
  766. <br>
  767. 用户希望在分配的集群作业的时间总量。它被传递给HOD底层的资源管理器,用于更有效地调度和利用集群。注意对于Torque的情形,这个时间到期后,集群会在被自动回收。</p>
  768. <p>
  769. <em>-j java-home</em>
  770. <br>
  771. JAVA_HOME环境变量里指定的路径。在<em>script</em>操作中使用。HOD将JAVA_HOME环境变量设置为这个值,并在此环境下启动用户脚本。</p>
  772. <p>
  773. <em>-A account-string</em>
  774. <br>
  775. 传递给后台资源管理器的核计信息。</p>
  776. <p>
  777. <em>-Q queue-name</em>
  778. <br>
  779. 接受作业提交的后台资源管理器中队列的名称。</p>
  780. <p>
  781. <em>-Mkey1=value1 -Mkey2=value2</em>
  782. <br>
  783. 为供应的Map/Reduce守护进程(JobTracker以及TaskTracker)提供配置参数。在集群节点上,会根据这些值产生一个hadoop-site.xml。 <br>
  784. <em>注意:</em>值中的下列字符:空格,逗号,等号,分号需要使用&lsquo;\&rsquo;转义, 且放置在引号中。你也可以使用&lsquo;\&rsquo;来转义&lsquo;\&rsquo;。</p>
  785. <p>
  786. <em>-Hkey1=value1 -Hkey2=value2</em>
  787. <br>
  788. 为供应的HDFS守护进程(NameNode以及DataNode)提供配置参数。在集群节点上,会根据这些值产生一个hadoop-site.xml。 <br>
  789. <em>注意:</em>值中的下列字符:空格,逗号,等号,分号需要使用&lsquo;\&rsquo;转义, 且放置在引号中。你也可以使用&lsquo;\&rsquo;来转义&lsquo;\&rsquo;。</p>
  790. <p>
  791. <em>-Ckey1=value1 -Ckey2=value2</em>
  792. <br>
  793. 为提交作业的客户端提供配置参数。在提交节点上,会根据这些值产生一个hadoop-site.xml。<br>
  794. <em>注意:</em>参数值可以使用以下符号:空格,逗号,等号,需要&lsquo;\&rsquo;做转义符的分号,上述符号要用引号进行分割。你也可以使用&lsquo;\&rsquo;转义&lsquo;\&rsquo;。 </p>
  795. <p>
  796. <em>--section-name.option-name=value</em>
  797. <br>
  798. 这是用<em>长</em>格式提供配置选项的方法。比如,你可以<em>--hod.script-wait-time=20</em>
  799. </p>
  800. </div>
  801. <a name="N10572"></a><a name="%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4"></a>
  802. <h2 class="h3">故障排除</h2>
  803. <div class="section">
  804. <a name="Troubleshooting" id="Troubleshooting"></a>
  805. <p>下节列出了一些用户使用HOD时可能碰到的多发错误的条件以及解决问题的方法</p>
  806. <a name="N1057D"></a><a name="%E5%88%86%E9%85%8D%E6%93%8D%E4%BD%9C%E6%97%B6"></a>
  807. <h3 class="h4">分配操作时hod挂起</h3>
  808. <a name="_hod_Hangs_During_Allocation" id="_hod_Hangs_During_Allocation"></a><a name="hod_Hangs_During_Allocation" id="hod_Hangs_During_Allocation"></a>
  809. <p>
  810. <em>可能原因:</em>HOD或Hadoop的一个组件启动失败。这种情况下,<span class="codefrag">hod</span>命令会在一段时间(通常是2-3分钟)后返回,退出码是错误代码部分定义的错误码7或8。参考该部分以获得更多细节。 </p>
  811. <p>
  812. <em>可能原因:</em>使用tarball模式申请了大规模的集群。有时由于网络负载,或者是分配节点上的负载,tarball分发过程可能会慢的比较明显,需要几分钟才能响应。等待命令完成。还可以检查一下tarball,看是否不含Hadoop源码或文档。</p>
  813. <p>
  814. <em>可能原因:</em>Torque相关的问题。如果原因与Torque相关,<span class="codefrag">hod</span>命令5分钟内是不会返回的。在调试模式下运行<span class="codefrag">hod</span>你会发现<span class="codefrag">qstat</span>命令被重复执行。在另一个shell中执行<span class="codefrag">qstat</span>命令你会发现作业处于<span class="codefrag">Q</span>(排队)状态。这通常说明Torque出现了问题。可能原因有个别节点宕机,或者增加了新节点但Torque不知。通常,需要系统管理员帮助解决此问题。</p>
  815. <a name="N105AB"></a><a name="%E5%9B%9E%E6%94%B6%E6%93%8D%E4%BD%9C%E6%97%B6"></a>
  816. <h3 class="h4">回收操作时hod挂起</h3>
  817. <a name="_hod_Hangs_During_Deallocation" id="_hod_Hangs_During_Deallocation"></a><a name="hod_Hangs_During_Deallocation" id="hod_Hangs_During_Deallocation"></a>
  818. <p>
  819. <em>可能原因:</em>Torque相关的问题,通常是Torque server上的负载较大,或者是分配的集群非常大。一般来说,你唯一能做的是等待命令执行完成。</p>
  820. <a name="N105BD"></a><a name="%E5%A4%B1%E8%B4%A5%E6%97%B6%E7%9A%84%E9%94%99%E8%AF%AF%E4%BB%A3%E7%A0%81%E5%92%8C%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF"></a>
  821. <h3 class="h4">hod失败时的错误代码和错误信息</h3>
  822. <a name="hod_Fails_With_an_error_code_and" id="hod_Fails_With_an_error_code_and"></a><a name="_hod_Fails_With_an_error_code_an" id="_hod_Fails_With_an_error_code_an"></a>
  823. <p>如果<span class="codefrag">hod</span>命令的退出码不是<span class="codefrag">0</span>,参考下面的退出代码表确定此情况发生的原因和相应的调试方法。</p>
  824. <p>
  825. <strong>错误代码</strong>
  826. </p>
  827. <a name="Error_Codes" id="Error_Codes"></a>
  828. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  829. <tr>
  830. <th colspan="1" rowspan="1">错误代码</th>
  831. <th colspan="1" rowspan="1">含义</th>
  832. <th colspan="1" rowspan="1">可能原因及补救方法</th>
  833. </tr>
  834. <tr>
  835. <td colspan="1" rowspan="1"> 1 </td>
  836. <td colspan="1" rowspan="1">配置错误 </td>
  837. <td colspan="1" rowspan="1">hodrc中的参数错误,或者其他与HOD配置相关的错误。此类情况下,错误信息已经足够帮你发现和解决问题。</td>
  838. </tr>
  839. <tr>
  840. <td colspan="1" rowspan="1"> 2 </td>
  841. <td colspan="1" rowspan="1">无效操作</td>
  842. <td colspan="1" rowspan="1">执行<span class="codefrag">hod help</span>查看有效的操作列表。</td>
  843. </tr>
  844. <tr>
  845. <td colspan="1" rowspan="1"> 3 </td>
  846. <td colspan="1" rowspan="1">无效操作参数</td>
  847. <td colspan="1" rowspan="1">执行<span class="codefrag">hod help operation</span>查看特定操作的用法。</td>
  848. </tr>
  849. <tr>
  850. <td colspan="1" rowspan="1"> 4 </td>
  851. <td colspan="1" rowspan="1">调度失败</td>
  852. <td colspan="1" rowspan="1"> 1. 请求分配了过多的资源。执行<span class="codefrag">checknodes cluster_name</span>查看是否有足够多的可用节点。<br>
  853. 2. 请求的资源超出了资源管理器的限制。<br>
  854. 3. Torque配置错误,Torque可执行文件路径配置错误,或者其它Torque相关问题。联系系统管理员。</td>
  855. </tr>
  856. <tr>
  857. <td colspan="1" rowspan="1"> 5 </td>
  858. <td colspan="1" rowspan="1">执行作业失败</td>
  859. <td colspan="1" rowspan="1"> 1. Torque作业被外部删除。执行Torque <span class="codefrag">qstat</span>命令查看是否有作业处于<span class="codefrag">R</span>(运行)状态。如果没有,尝试重新运行HOD。<br>
  860. 2. Torque的问题诸如服务器暂时性宕机,或者无响应。联系系统管理员。 <br>
  861. 3. 系统管理员可能配置了帐号核实,并且一个非法的帐号被指定。请联系系统管理员。 </td>
  862. </tr>
  863. <tr>
  864. <td colspan="1" rowspan="1"> 6 </td>
  865. <td colspan="1" rowspan="1">Ringmaster故障</td>
  866. <td colspan="1" rowspan="1"> HOD会打印信息"Cluster could not be allocated because of the following errors on the ringmaster host &lt;hostname&gt;"。实际的错误信息可能指示下列情形中的一种:<br>
  867. 1. 运行ringmaster的节点配置不合法,错误信息中的hostname会指明具体的机器。<br>
  868. 2. <span class="codefrag">ringmaster</span>段的配置无效,<br>
  869. 3. <span class="codefrag">gridservice-mapred或者gridservice-hdfs</span>段中<span class="codefrag">pkgs</span>项的配置无效,<br>
  870. 4. 无效的hadoop tarball,或者tarball中conf目录下存在无效的配置文件,<br>
  871. 5. Hadoop中的MapReduce与外部HDFS版本不匹配。<br>
  872. Torque <span class="codefrag">qstat</span>命令很可能会显示一个出于<span class="codefrag">C</span>(Completed,已完成)状态的作业。<br>
  873. 你可以登录到HOD失败信息中给出的ringmaster主机,根据错误信息的提示解决问题。如果错误信息没有给出完整的信息,ringmaster日志也可能帮助找到问题的根源。参考下面<em>定位Ringmaster日志</em>一节了解更多信息。</td>
  874. </tr>
  875. <tr>
  876. <td colspan="1" rowspan="1"> 7 </td>
  877. <td colspan="1" rowspan="1"> DFS故障</td>
  878. <td colspan="1" rowspan="1"> 当HOD由于DFS故障(或者Job tracker失败,错误码8,下文有介绍)分配失败时,它会打印错误信息 "Hodring at &lt;hostname&gt; failed with following errors:",并给出真正的错误信息,这个信息可能表明下列情形中的一种:<br>
  879. 1. 启动Hadoop集群时出现问题。通常错误信息会表明之前提到的主机出现错误的真正原因。你也要检查HOD配置中文件中Hadoop相关的配置。按上面<em>收集和查看Hadoop日志</em>一节中介绍的方法查看Hadoop的日志。<br>
  880. 2. 运行hodring的节点上的配置无效,错误信息中的hostname会指明机器<br>
  881. 3. hodrc中<span class="codefrag">hodring</span>段的配置无效。<span class="codefrag">ssh</span>到错误信息中提到的节点,在hdring日志中grep<span class="codefrag">ERROR</span>或<span class="codefrag">CRITICAL</span>。参考下面<em>定位Hodring日志</em>部分获取更多信息。<br>
  882. 4. 指定了无效的tarball,可能未正确打包。<br>
  883. 5. 无法与外部配置的HDFS通信。<br>
  884. 当DFS或Job tracker出现故障时,你可以登录到HOD失败信息中提到的主机上,进行debug。解决问题的时候,你也应通过查看ringmaster日志中的其它日志信息,来检查其他机器是否在启动jobtracker/namenode时也出现了问题,而不只是检查错误信息中提到的主机。其他机器也可能发生问题是因为HOD会按照配置项<a href="hod_config_guide.html#3.4+ringmaster%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9">ringmaster.max-master-failures</a>的设置在多个机器上连续尝试和启动hadoop守护进程。更多关于ringmaster日志的信息请参考下文<em>定位Ringmaster日志</em>。
  885. </td>
  886. </tr>
  887. <tr>
  888. <td colspan="1" rowspan="1"> 8 </td>
  889. <td colspan="1" rowspan="1">Job tracker故障</td>
  890. <td colspan="1" rowspan="1">与<em>DFS故障</em>情形中的原因类似。</td>
  891. </tr>
  892. <tr>
  893. <td colspan="1" rowspan="1"> 10 </td>
  894. <td colspan="1" rowspan="1">集群死亡</td>
  895. <td colspan="1" rowspan="1">1. 集群因为较长时间空闲被自动回收。<br>
  896. 2. 集群因系统管理员或者用户指定的时钟时间到期被自动回收。<br>
  897. 3. 无法与成功分配的JobTracker以及HDFS的NameNode通信。回收集群,重新分配。</td>
  898. </tr>
  899. <tr>
  900. <td colspan="1" rowspan="1"> 12 </td>
  901. <td colspan="1" rowspan="1">集群已分配</td>
  902. <td colspan="1" rowspan="1">指定的集群目录是已被用于先前的分配操作,且尚未回收。指定另外一个目录,或者先回收先前分配的。</td>
  903. </tr>
  904. <tr>
  905. <td colspan="1" rowspan="1"> 13 </td>
  906. <td colspan="1" rowspan="1">HDFS死亡</td>
  907. <td colspan="1" rowspan="1">无法与HDFS的NameNode通信。HDFS的NameNode停掉了。</td>
  908. </tr>
  909. <tr>
  910. <td colspan="1" rowspan="1"> 14 </td>
  911. <td colspan="1" rowspan="1">Mapred死亡</td>
  912. <td colspan="1" rowspan="1"> 1. 集群因为长时间闲置被自动回收。 <br>
  913. 2. 集群因系统管理员或用户指定的时钟时间到期被自动回收。<br>
  914. 3. 无法与Map/Reduce的JobTracker通信。JobTracker节点宕机。 <br>
  915. </td>
  916. </tr>
  917. <tr>
  918. <td colspan="1" rowspan="1"> 15 </td>
  919. <td colspan="1" rowspan="1">集群未分配</td>
  920. <td colspan="1" rowspan="1">一个需要已分配集群的操作被指以一个没有状态信息的集群目录。</td>
  921. </tr>
  922. <tr>
  923. <td colspan="1" rowspan="1">任意非0退出代码</td>
  924. <td colspan="1" rowspan="1">HOD脚本错误</td>
  925. <td colspan="1" rowspan="1">如果使用了hod的脚本选项,很可能这个退出代码是脚本的退出吗。不幸的是,这可能会与hod自己的退出码冲突。为帮助用户区分两者,如果脚本返回了一个退出码,hod将此退出码写到了集群目录下的script.exitcode文件。你可以cat这个文件以确定脚本的退出码。如果文件不存在,则退出代码是hod命令的退出码。</td>
  926. </tr>
  927. </table>
  928. <a name="N10752"></a><a name="Hadoop+DFSClient%E8%AD%A6%E5%91%8ANotReplicatedYetException%E4%BF%A1%E6%81%AF"></a>
  929. <h3 class="h4">Hadoop DFSClient警告NotReplicatedYetException信息</h3>
  930. <p>有时,当你申请到一个HOD集群后马上尝试上传文件到HDFS时,DFSClient会警告NotReplicatedYetException。通常会有一个这样的信息 - </p>
  931. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  932. <tr>
  933. <td colspan="1" rowspan="1"><span class="codefrag">WARN
  934. hdfs.DFSClient: NotReplicatedYetException sleeping &lt;filename&gt; retries
  935. left 3</span></td>
  936. </tr>
  937. <tr>
  938. <td colspan="1" rowspan="1"><span class="codefrag">08/01/25 16:31:40 INFO hdfs.DFSClient:
  939. org.apache.hadoop.ipc.RemoteException: java.io.IOException: File
  940. &lt;filename&gt; could only be replicated to 0 nodes, instead of
  941. 1</span></td>
  942. </tr>
  943. </table>
  944. <p> 当你向一个DataNodes正在和NameNode联络的集群上传文件的时候,这种现象就会发生。在上传新文件到HDFS之前多等待一段时间就可以解决这个问题,因为这使得足够多的DataNode启动并且联络上了NameNode。</p>
  945. <a name="N1076A"></a><a name="%E6%88%90%E5%8A%9F%E5%88%86%E9%85%8D%E7%9A%84%E9%9B%86%E7%BE%A4%E4%B8%8A%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8CHadoop%E4%BD%9C%E4%B8%9A"></a>
  946. <h3 class="h4">成功分配的集群上无法运行Hadoop作业</h3>
  947. <a name="Hadoop_Jobs_Not_Running_on_a_Suc" id="Hadoop_Jobs_Not_Running_on_a_Suc"></a>
  948. <p>这一情景通常发生在这种情形:一个集群已经分配,并且一段时间内处于不活跃状态,之后hadoop作业试图在这个集群上运行。Hadoop作业会失败,产生如下异常信息:</p>
  949. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  950. <tr>
  951. <td colspan="1" rowspan="1"><span class="codefrag">08/01/25 16:31:40 INFO ipc.Client: Retrying connect to server: foo.bar.com/1.1.1.1:53567. Already tried 1 time(s).</span></td>
  952. </tr>
  953. </table>
  954. <p>
  955. <em>可能原因:</em>相当长的时间内无hadoop作业运行,集群会如<em>闲置集群的自动回收</em>一节介绍的那样被自动回收。回收该集群,然后重新分配。</p>
  956. <p>
  957. <em>可能原因:</em>从分配开始算起,Torque管理员指定的或<em>指定额外的作业属性</em>一节中定义的<span class="codefrag">-l</span>选项指定的时间上限过期。这种情况下集群可能已被释放。回收集群,然后重新分配。</p>
  958. <p>
  959. <em>可能原因:</em>提交作业使用的hadoop版本和供应集群的Hadoop版本(通常通过tarball选项)不匹配。确保使用的兼容的版本。</p>
  960. <p>
  961. <em>可能原因:</em> 提交job的hadoop客户端与提供的hadoop(通常通过tarball选项)版本不兼容。 确保所使用hadoop软件版本兼容。</p>
  962. <p>
  963. <em>可能原因:</em> 你使用了<span class="codefrag">-M or -H</span>中的一个指定Hadoop配置,其中有未正确转义的字符比如空格或逗号。参考<em>HOD配置选项</em>一节以了解如何正确指定这些选项。</p>
  964. <a name="N107A5"></a><a name="%E6%88%91%E7%9A%84Hadoop%E4%BD%9C%E4%B8%9A%E8%A2%AB%E4%B8%AD%E6%AD%A2%E4%BA%86"></a>
  965. <h3 class="h4">我的Hadoop作业被中止了</h3>
  966. <a name="My_Hadoop_Job_Got_Killed" id="My_Hadoop_Job_Got_Killed"></a>
  967. <p>
  968. <em>可能原因:</em>从分配开始算起,Torque管理员指定的或<em>指定额外的作业属性</em>一节中定义的<span class="codefrag">-l</span>选项指定的时间上限过期。这种情况下集群可能已被释放。回收集群,然后重新分配,这次要制定一个大点儿的时钟时间。</p>
  969. <p>
  970. <em>可能原因:</em> JobTracker节点出现问题。参考<em>收集和查看Hadoop日志</em>一节以获取更多信息。</p>
  971. <a name="N107C0"></a><a name="Hadoop%E4%BD%9C%E4%B8%9A%E5%A4%B1%E8%B4%A5%E5%B9%B6%E8%BF%94%E5%9B%9E%E6%B6%88%E6%81%AF%EF%BC%9A%E2%80%98Job+tracker+still+initializing%E2%80%99"></a>
  972. <h3 class="h4">Hadoop作业失败并返回消息:&lsquo;Job tracker still initializing&rsquo;</h3>
  973. <a name="Hadoop_Job_Fails_with_Message_Jo" id="Hadoop_Job_Fails_with_Message_Jo"></a>
  974. <p>
  975. <em>可能原因:</em>hadoop作业是作为HOD脚本的一部分运行的,它在JobTracker完全就绪前开始了执行。分配集群时为配置选<span class="codefrag">--hod.script-wait-time</span>设定一个大点儿的值。通常取120是可以工作的,尽管通常没必要这么大。</p>
  976. <a name="N107D0"></a><a name="Torque%E7%9A%84%E9%80%80%E5%87%BA%E4%BB%A3%E7%A0%81%E6%B2%A1%E6%9C%89%E5%8C%85%E5%90%ABHOD%E7%9A%84"></a>
  977. <h3 class="h4">Torque的退出代码没有包含HOD的</h3>
  978. <a name="The_Exit_Codes_For_HOD_Are_Not_G" id="The_Exit_Codes_For_HOD_Are_Not_G"></a>
  979. <p>
  980. <em>可能原因:</em>此功能需要Hadoop 0.16。所用的Hadoop版本不满足这个条件。请使用合适的Hadoop版本。</p>
  981. <p>
  982. <em>可能原因:</em>没有使用<span class="codefrag">hod</span>命令回收集群;例如直接使用<span class="codefrag">qdel</span>。当使用这种方式回收集群时,HOD进程被信号中止。这会导致退出码是基于signal number的,而不是程序的退出码。</p>
  983. <a name="N107E8"></a><a name="Hadoop%E6%97%A5%E5%BF%97%E6%9C%AA%E8%A2%AB%E4%B8%8A%E4%BC%A0%E5%88%B0DFS"></a>
  984. <h3 class="h4">Hadoop日志未被上传到DFS</h3>
  985. <a name="The_Hadoop_Logs_are_Not_Uploaded" id="The_Hadoop_Logs_are_Not_Uploaded"></a>
  986. <p>
  987. <em>可能原因:</em>上传日志的使用的hadoop与外部的HDFS版本不兼容。确保<span class="codefrag">hodring.pkgs</span>选项指定了正确的版本。</p>
  988. <a name="N107F8"></a><a name="%E5%AE%9A%E4%BD%8DRingmaster%E6%97%A5%E5%BF%97"></a>
  989. <h3 class="h4">定位Ringmaster日志</h3>
  990. <a name="Locating_Ringmaster_Logs" id="Locating_Ringmaster_Logs"></a>
  991. <p>遵循以下步骤定位ringmaster日志:</p>
  992. <ul>
  993. <li>用-b选项在调试模式执行hod。这会打印出当前运行的Torque作业的标识。</li>
  994. <li>执行<span class="codefrag">qstat -f torque_job_id</span>,在输出中查找<span class="codefrag">exec_host</span>参数的值。列表中的第一个主机就是ringmaster节点。</li>
  995. <li>登陆该节点。</li>
  996. <li>ringmaster日志的位置由hodrc中的<span class="codefrag">ringmaster.log-dir</span>项指定。日志文件的名字会是<span class="codefrag">username.torque_job_id/ringmaster-main.log</span>。</li>
  997. <li>如果你没有获取到足够的信息,你可以将ringmaster的调试级别设为4。这可通过向hod命令行传递<span class="codefrag">--ringmaster.debug 4</span>做到。</li>
  998. </ul>
  999. <a name="N10824"></a><a name="%E5%AE%9A%E4%BD%8DHodring%E6%97%A5%E5%BF%97"></a>
  1000. <h3 class="h4">定位Hodring日志</h3>
  1001. <a name="Locating_Hodring_Logs" id="Locating_Hodring_Logs"></a>
  1002. <p>遵循以下步骤定位hodring日志:</p>
  1003. <ul>
  1004. <li>用-b选项在调试模式下运行hod。这将打印当前运行的Torque作业的标识。</li>
  1005. <li>执行<span class="codefrag">qstat -f torque_job_id</span>,查看输出中<span class="codefrag">exec_host</span>参数的值。列表中的的所有节点上都有一个hodring。</li>
  1006. <li>登陆到任何一个节点。</li>
  1007. <li>hodring日志的位置由hodrc中的<span class="codefrag">hodring.log-dir</span>项指定。日志文件的名字会是<span class="codefrag">username.torque_job_id/hodring-main.log</span>。</li>
  1008. <li>如果你没有获得足够的信息,你或许想将hodring的调试等级更改为4。这可以向hod命令行传递<span class="codefrag">--hodring.debug 4</span> 来做到。</li>
  1009. </ul>
  1010. </div>
  1011. </div>
  1012. <!--+
  1013. |end content
  1014. +-->
  1015. <div class="clearboth">&nbsp;</div>
  1016. </div>
  1017. <div id="footer">
  1018. <!--+
  1019. |start bottomstrip
  1020. +-->
  1021. <div class="lastmodified">
  1022. <script type="text/javascript"><!--
  1023. document.write("Last Published: " + document.lastModified);
  1024. // --></script>
  1025. </div>
  1026. <div class="copyright">
  1027. Copyright &copy;
  1028. 2007 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
  1029. </div>
  1030. <!--+
  1031. |end bottomstrip
  1032. +-->
  1033. </div>
  1034. </body>
  1035. </html>