hod_config_guide.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  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. HOD Configuration Guide
  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/">Project</a>
  67. </li>
  68. <li>
  69. <a class="unselected" href="http://wiki.apache.org/hadoop">Wiki</a>
  70. </li>
  71. <li class="current">
  72. <a class="selected" href="index.html">Hadoop 0.20 Documentation</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_selected_1.1', 'skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Documentation</div>
  107. <div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
  108. <div class="menuitem">
  109. <a href="index.html">Overview</a>
  110. </div>
  111. <div class="menuitem">
  112. <a href="quickstart.html">Hadoop Quick Start</a>
  113. </div>
  114. <div class="menuitem">
  115. <a href="cluster_setup.html">Hadoop Cluster Setup</a>
  116. </div>
  117. <div class="menuitem">
  118. <a href="mapred_tutorial.html">Hadoop Map/Reduce Tutorial</a>
  119. </div>
  120. <div class="menuitem">
  121. <a href="commands_manual.html">Hadoop Command Guide</a>
  122. </div>
  123. <div class="menuitem">
  124. <a href="hdfs_shell.html">Hadoop FS Shell Guide</a>
  125. </div>
  126. <div class="menuitem">
  127. <a href="distcp.html">Hadoop DistCp Guide</a>
  128. </div>
  129. <div class="menuitem">
  130. <a href="native_libraries.html">Hadoop Native Libraries</a>
  131. </div>
  132. <div class="menuitem">
  133. <a href="streaming.html">Hadoop Streaming</a>
  134. </div>
  135. <div class="menuitem">
  136. <a href="hadoop_archives.html">Hadoop Archives</a>
  137. </div>
  138. <div class="menuitem">
  139. <a href="hdfs_user_guide.html">HDFS User Guide</a>
  140. </div>
  141. <div class="menuitem">
  142. <a href="hdfs_design.html">HDFS Architecture</a>
  143. </div>
  144. <div class="menuitem">
  145. <a href="hdfs_permissions_guide.html">HDFS Admin Guide: Permissions</a>
  146. </div>
  147. <div class="menuitem">
  148. <a href="hdfs_quota_admin_guide.html">HDFS Admin Guide: Quotas</a>
  149. </div>
  150. <div class="menuitem">
  151. <a href="SLG_user_guide.html">HDFS Utilities</a>
  152. </div>
  153. <div class="menuitem">
  154. <a href="libhdfs.html">HDFS C API</a>
  155. </div>
  156. <div class="menuitem">
  157. <a href="hod_user_guide.html">HOD User Guide</a>
  158. </div>
  159. <div class="menuitem">
  160. <a href="hod_admin_guide.html">HOD Admin Guide</a>
  161. </div>
  162. <div class="menupage">
  163. <div class="menupagetitle">HOD Config Guide</div>
  164. </div>
  165. <div class="menuitem">
  166. <a href="capacity_scheduler.html">Capacity Scheduler</a>
  167. </div>
  168. <div class="menuitem">
  169. <a href="vaidya.html">Hadoop Vaidya</a>
  170. </div>
  171. <div class="menuitem">
  172. <a href="api/index.html">API Docs</a>
  173. </div>
  174. <div class="menuitem">
  175. <a href="jdiff/changes.html">API Changes</a>
  176. </div>
  177. <div class="menuitem">
  178. <a href="http://wiki.apache.org/hadoop/">Wiki</a>
  179. </div>
  180. <div class="menuitem">
  181. <a href="http://wiki.apache.org/hadoop/FAQ">FAQ</a>
  182. </div>
  183. <div class="menuitem">
  184. <a href="releasenotes.html">Release Notes</a>
  185. </div>
  186. <div class="menuitem">
  187. <a href="changes.html">Change Log</a>
  188. </div>
  189. </div>
  190. <div id="credit"></div>
  191. <div id="roundbottom">
  192. <img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
  193. <!--+
  194. |alternative credits
  195. +-->
  196. <div id="credit2"></div>
  197. </div>
  198. <!--+
  199. |end Menu
  200. +-->
  201. <!--+
  202. |start content
  203. +-->
  204. <div id="content">
  205. <div title="Portable Document Format" class="pdflink">
  206. <a class="dida" href="hod_config_guide.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
  207. PDF</a>
  208. </div>
  209. <h1>
  210. HOD Configuration Guide
  211. </h1>
  212. <div id="minitoc-area">
  213. <ul class="minitoc">
  214. <li>
  215. <a href="#1.+Introduction">1. Introduction</a>
  216. </li>
  217. <li>
  218. <a href="#2.+Sections">2. Sections</a>
  219. </li>
  220. <li>
  221. <a href="#3.+HOD+Configuration+Options">3. HOD Configuration Options</a>
  222. <ul class="minitoc">
  223. <li>
  224. <a href="#3.1+Common+configuration+options">3.1 Common configuration options</a>
  225. </li>
  226. <li>
  227. <a href="#3.2+hod+options">3.2 hod options</a>
  228. </li>
  229. <li>
  230. <a href="#3.3+resource_manager+options">3.3 resource_manager options</a>
  231. </li>
  232. <li>
  233. <a href="#3.4+ringmaster+options">3.4 ringmaster options</a>
  234. </li>
  235. <li>
  236. <a href="#3.5+gridservice-hdfs+options">3.5 gridservice-hdfs options</a>
  237. </li>
  238. <li>
  239. <a href="#3.6+gridservice-mapred+options">3.6 gridservice-mapred options</a>
  240. </li>
  241. <li>
  242. <a href="#3.7+hodring+options">3.7 hodring options</a>
  243. </li>
  244. </ul>
  245. </li>
  246. </ul>
  247. </div>
  248. <a name="N1000C"></a><a name="1.+Introduction"></a>
  249. <h2 class="h3">1. Introduction</h2>
  250. <div class="section">
  251. <p>This guide discusses Hadoop on Demand (HOD) configuration sections and shows you how to work with the most important
  252. and commonly used HOD configuration options.</p>
  253. <p>Configuration options
  254. can be specified in two ways: a configuration file
  255. in the INI format, and as command line options to the HOD shell,
  256. specified in the format --section.option[=value]. If the same option is
  257. specified in both places, the value specified on the command line
  258. overrides the value in the configuration file.</p>
  259. <p>
  260. To get a simple description of all configuration options, type:
  261. </p>
  262. <table class="ForrestTable" cellspacing="1" cellpadding="4">
  263. <tr>
  264. <td colspan="1" rowspan="1"><span class="codefrag">$ hod --verbose-help</span></td>
  265. </tr>
  266. </table>
  267. </div>
  268. <a name="N10024"></a><a name="2.+Sections"></a>
  269. <h2 class="h3">2. Sections</h2>
  270. <div class="section">
  271. <p>HOD organizes configuration options into these sections:</p>
  272. <ul>
  273. <li> hod: Options for the HOD client</li>
  274. <li> resource_manager: Options for specifying which resource manager
  275. to use, and other parameters for using that resource manager</li>
  276. <li> ringmaster: Options for the RingMaster process, </li>
  277. <li> hodring: Options for the HodRing processes</li>
  278. <li> gridservice-mapred: Options for the Map/Reduce daemons</li>
  279. <li> gridservice-hdfs: Options for the HDFS daemons.</li>
  280. </ul>
  281. </div>
  282. <a name="N10043"></a><a name="3.+HOD+Configuration+Options"></a>
  283. <h2 class="h3">3. HOD Configuration Options</h2>
  284. <div class="section">
  285. <p>The following section describes configuration options common to most
  286. HOD sections followed by sections that describe configuration options
  287. specific to each HOD section.</p>
  288. <a name="N1004C"></a><a name="3.1+Common+configuration+options"></a>
  289. <h3 class="h4">3.1 Common configuration options</h3>
  290. <p>Certain configuration options are defined in most of the sections of
  291. the HOD configuration. Options defined in a section, are used by the
  292. process for which that section applies. These options have the same
  293. meaning, but can have different values in each section.
  294. </p>
  295. <ul>
  296. <li>temp-dir: Temporary directory for usage by the HOD processes. Make
  297. sure that the users who will run hod have rights to create
  298. directories under the directory specified here. If you
  299. wish to make this directory vary across allocations,
  300. you can make use of the environmental variables which will
  301. be made available by the resource manager to the HOD
  302. processes. For example, in a Torque setup, having
  303. --ringmaster.temp-dir=/tmp/hod-temp-dir.$PBS_JOBID would
  304. let ringmaster use different temp-dir for each
  305. allocation; Torque expands this variable before starting
  306. the ringmaster.</li>
  307. <li>debug: Numeric value from 1-4. 4 produces the most log information,
  308. and 1 the least.</li>
  309. <li>log-dir: Directory where log files are stored. By default, this is
  310. &lt;install-location&gt;/logs/. The restrictions and notes for the
  311. temp-dir variable apply here too.
  312. </li>
  313. <li>xrs-port-range: Range of ports, among which an available port shall
  314. be picked for use to run an XML-RPC server.</li>
  315. <li>http-port-range: Range of ports, among which an available port shall
  316. be picked for use to run an HTTP server.</li>
  317. <li>java-home: Location of Java to be used by Hadoop.</li>
  318. <li>syslog-address: Address to which a syslog daemon is bound to. The format
  319. of the value is host:port. If configured, HOD log messages
  320. will be logged to syslog using this value.</li>
  321. </ul>
  322. <a name="N1006E"></a><a name="3.2+hod+options"></a>
  323. <h3 class="h4">3.2 hod options</h3>
  324. <ul>
  325. <li>cluster: Descriptive name given to the cluster. For Torque, this is
  326. specified as a 'Node property' for every node in the cluster.
  327. HOD uses this value to compute the number of available nodes.</li>
  328. <li>client-params: Comma-separated list of hadoop config parameters
  329. specified as key-value pairs. These will be used to
  330. generate a hadoop-site.xml on the submit node that
  331. should be used for running Map/Reduce jobs.</li>
  332. <li>job-feasibility-attr: Regular expression string that specifies
  333. whether and how to check job feasibility - resource
  334. manager or scheduler limits. The current
  335. implementation corresponds to the torque job
  336. attribute 'comment' and by default is disabled.
  337. When set, HOD uses it to decide what type
  338. of limit violation is triggered and either
  339. deallocates the cluster or stays in queued state
  340. according as the request is beyond maximum limits or
  341. the cumulative usage has crossed maximum limits.
  342. The torque comment attribute may be updated
  343. periodically by an external mechanism. For example,
  344. comment attribute can be updated by running <a href="hod_admin_guide.html#checklimits.sh+-+Tool+to+update+torque+comment+field+reflecting+resource+limits">
  345. checklimits.sh</a> script in hod/support directory,
  346. and then setting job-feasibility-attr equal to the
  347. value TORQUE_USER_LIMITS_COMMENT_FIELD,
  348. "User-limits exceeded. Requested:([0-9]*)
  349. Used:([0-9]*) MaxLimit:([0-9]*)", will make HOD
  350. behave accordingly.
  351. </li>
  352. </ul>
  353. <a name="N10085"></a><a name="3.3+resource_manager+options"></a>
  354. <h3 class="h4">3.3 resource_manager options</h3>
  355. <ul>
  356. <li>queue: Name of the queue configured in the resource manager to which
  357. jobs are to be submitted.</li>
  358. <li>batch-home: Install directory to which 'bin' is appended and under
  359. which the executables of the resource manager can be
  360. found.</li>
  361. <li>env-vars: Comma-separated list of key-value pairs,
  362. expressed as key=value, which would be passed to the jobs
  363. launched on the compute nodes.
  364. For example, if the python installation is
  365. in a non-standard location, one can set the environment
  366. variable 'HOD_PYTHON_HOME' to the path to the python
  367. executable. The HOD processes launched on the compute nodes
  368. can then use this variable.</li>
  369. <li>options: Comma-separated list of key-value pairs,
  370. expressed as
  371. &lt;option&gt;:&lt;sub-option&gt;=&lt;value&gt;. When
  372. passing to the job submission program, these are expanded
  373. as -&lt;option&gt; &lt;sub-option&gt;=&lt;value&gt;. These
  374. are generally used for specifying additional resource
  375. contraints for scheduling. For instance, with a Torque
  376. setup, one can specify
  377. --resource_manager.options='l:arch=x86_64' for
  378. constraining the nodes being allocated to a particular
  379. architecture; this option will be passed to Torque's qsub
  380. command as "-l arch=x86_64".</li>
  381. </ul>
  382. <a name="N1009B"></a><a name="3.4+ringmaster+options"></a>
  383. <h3 class="h4">3.4 ringmaster options</h3>
  384. <ul>
  385. <li>work-dirs: Comma-separated list of paths that will serve
  386. as the root for directories that HOD generates and passes
  387. to Hadoop for use to store DFS and Map/Reduce data. For
  388. example,
  389. this is where DFS data blocks will be stored. Typically,
  390. as many paths are specified as there are disks available
  391. to ensure all disks are being utilized. The restrictions
  392. and notes for the temp-dir variable apply here too.</li>
  393. <li>max-master-failures: Number of times a hadoop master
  394. daemon can fail to launch, beyond which HOD will fail
  395. the cluster allocation altogether. In HOD clusters,
  396. sometimes there might be a single or few "bad" nodes due
  397. to issues like missing java, missing or incorrect version
  398. of Hadoop etc. When this configuration variable is set
  399. to a positive integer, the RingMaster returns an error
  400. to the client only when the number of times a hadoop
  401. master (JobTracker or NameNode) fails to start on these
  402. bad nodes because of above issues, exceeds the specified
  403. value. If the number is not exceeded, the next HodRing
  404. which requests for a command to launch is given the same
  405. hadoop master again. This way, HOD tries its best for a
  406. successful allocation even in the presence of a few bad
  407. nodes in the cluster.
  408. </li>
  409. <li>workers_per_ring: Number of workers per service per HodRing.
  410. By default this is set to 1. If this configuration
  411. variable is set to a value 'n', the HodRing will run
  412. 'n' instances of the workers (TaskTrackers or DataNodes)
  413. on each node acting as a slave. This can be used to run
  414. multiple workers per HodRing, so that the total number of
  415. workers in a HOD cluster is not limited by the total
  416. number of nodes requested during allocation. However, note
  417. that this will mean each worker should be configured to use
  418. only a proportional fraction of the capacity of the
  419. resources on the node. In general, this feature is only
  420. useful for testing and simulation purposes, and not for
  421. production use.</li>
  422. </ul>
  423. <a name="N100AE"></a><a name="3.5+gridservice-hdfs+options"></a>
  424. <h3 class="h4">3.5 gridservice-hdfs options</h3>
  425. <ul>
  426. <li>external: If false, indicates that a HDFS cluster must be
  427. bought up by the HOD system, on the nodes which it
  428. allocates via the allocate command. Note that in that case,
  429. when the cluster is de-allocated, it will bring down the
  430. HDFS cluster, and all the data will be lost.
  431. If true, it will try and connect to an externally configured
  432. HDFS system.
  433. Typically, because input for jobs are placed into HDFS
  434. before jobs are run, and also the output from jobs in HDFS
  435. is required to be persistent, an internal HDFS cluster is
  436. of little value in a production system. However, it allows
  437. for quick testing.</li>
  438. <li>host: Hostname of the externally configured NameNode, if any</li>
  439. <li>fs_port: Port to which NameNode RPC server is bound.</li>
  440. <li>info_port: Port to which the NameNode web UI server is bound.</li>
  441. <li>pkgs: Installation directory, under which bin/hadoop executable is
  442. located. This can be used to use a pre-installed version of
  443. Hadoop on the cluster.</li>
  444. <li>server-params: Comma-separated list of hadoop config parameters
  445. specified key-value pairs. These will be used to
  446. generate a hadoop-site.xml that will be used by the
  447. NameNode and DataNodes.</li>
  448. <li>final-server-params: Same as above, except they will be marked final.</li>
  449. </ul>
  450. <a name="N100CD"></a><a name="3.6+gridservice-mapred+options"></a>
  451. <h3 class="h4">3.6 gridservice-mapred options</h3>
  452. <ul>
  453. <li>external: If false, indicates that a Map/Reduce cluster must be
  454. bought up by the HOD system on the nodes which it allocates
  455. via the allocate command.
  456. If true, if will try and connect to an externally
  457. configured Map/Reduce system.</li>
  458. <li>host: Hostname of the externally configured JobTracker, if any</li>
  459. <li>tracker_port: Port to which the JobTracker RPC server is bound</li>
  460. <li>info_port: Port to which the JobTracker web UI server is bound.</li>
  461. <li>pkgs: Installation directory, under which bin/hadoop executable is
  462. located</li>
  463. <li>server-params: Comma-separated list of hadoop config parameters
  464. specified key-value pairs. These will be used to
  465. generate a hadoop-site.xml that will be used by the
  466. JobTracker and TaskTrackers</li>
  467. <li>final-server-params: Same as above, except they will be marked final.</li>
  468. </ul>
  469. <a name="N100EC"></a><a name="3.7+hodring+options"></a>
  470. <h3 class="h4">3.7 hodring options</h3>
  471. <ul>
  472. <li>mapred-system-dir-root: Directory in the DFS under which HOD will
  473. generate sub-directory names and pass the full path
  474. as the value of the 'mapred.system.dir' configuration
  475. parameter to Hadoop daemons. The format of the full
  476. path will be value-of-this-option/userid/mapredsystem/cluster-id.
  477. Note that the directory specified here should be such
  478. that all users can create directories under this, if
  479. permissions are enabled in HDFS. Setting the value of
  480. this option to /user will make HOD use the user's
  481. home directory to generate the mapred.system.dir value.</li>
  482. <li>log-destination-uri: URL describing a path in an external, static DFS or the
  483. cluster node's local file system where HOD will upload
  484. Hadoop logs when a cluster is deallocated. To specify a
  485. DFS path, use the format 'hdfs://path'. To specify a
  486. cluster node's local file path, use the format 'file://path'.
  487. When clusters are deallocated by HOD, the hadoop logs will
  488. be deleted as part of HOD's cleanup process. To ensure these
  489. logs persist, you can use this configuration option.
  490. The format of the path is
  491. value-of-this-option/userid/hod-logs/cluster-id
  492. Note that the directory you specify here must be such that all
  493. users can create sub-directories under this. Setting this value
  494. to hdfs://user will make the logs come in the user's home directory
  495. in DFS.</li>
  496. <li>pkgs: Installation directory, under which bin/hadoop executable is located. This will
  497. be used by HOD to upload logs if a HDFS URL is specified in log-destination-uri
  498. option. Note that this is useful if the users are using a tarball whose version
  499. may differ from the external, static HDFS version.</li>
  500. </ul>
  501. </div>
  502. </div>
  503. <!--+
  504. |end content
  505. +-->
  506. <div class="clearboth">&nbsp;</div>
  507. </div>
  508. <div id="footer">
  509. <!--+
  510. |start bottomstrip
  511. +-->
  512. <div class="lastmodified">
  513. <script type="text/javascript"><!--
  514. document.write("Last Published: " + document.lastModified);
  515. // --></script>
  516. </div>
  517. <div class="copyright">
  518. Copyright &copy;
  519. 2008 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
  520. </div>
  521. <!--+
  522. |end bottomstrip
  523. +-->
  524. </div>
  525. </body>
  526. </html>