test_historyserver.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. #!/usr/bin/env python
  2. '''
  3. Licensed to the Apache Software Foundation (ASF) under one
  4. or more contributor license agreements. See the NOTICE file
  5. distributed with this work for additional information
  6. regarding copyright ownership. The ASF licenses this file
  7. to you under the Apache License, Version 2.0 (the
  8. "License"); you may not use this file except in compliance
  9. with the License. You may obtain a copy of the License at
  10. http://www.apache.org/licenses/LICENSE-2.0
  11. Unless required by applicable law or agreed to in writing, software
  12. distributed under the License is distributed on an "AS IS" BASIS,
  13. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. See the License for the specific language governing permissions and
  15. limitations under the License.
  16. '''
  17. from mock.mock import MagicMock, call, patch
  18. from stacks.utils.RMFTestCase import *
  19. import os
  20. origin_exists = os.path.exists
  21. @patch.object(os.path, "exists", new=MagicMock(
  22. side_effect=lambda *args: origin_exists(args[0])
  23. if args[0][-2:] == "j2" else True))
  24. class TestHistoryServer(RMFTestCase):
  25. def test_configure_default(self):
  26. self.executeScript("2.0.6/services/YARN/package/scripts/historyserver.py",
  27. classname = "Histroryserver",
  28. command = "configure",
  29. config_file="default.json"
  30. )
  31. self.assert_configure_default()
  32. self.assertNoMoreResources()
  33. def test_start_default(self):
  34. self.executeScript("2.0.6/services/YARN/package/scripts/historyserver.py",
  35. classname = "Histroryserver",
  36. command = "start",
  37. config_file="default.json"
  38. )
  39. self.assert_configure_default()
  40. self.assertResourceCalled('Execute', 'export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec && /usr/lib/hadoop-mapreduce/sbin/mr-jobhistory-daemon.sh --config /etc/hadoop/conf start historyserver',
  41. not_if = 'ls /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid >/dev/null 2>&1 && ps `cat /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid` >/dev/null 2>&1',
  42. user = 'mapred'
  43. )
  44. self.assertResourceCalled('Execute', 'ls /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid >/dev/null 2>&1 && ps `cat /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid` >/dev/null 2>&1',
  45. user = 'mapred',
  46. not_if = 'ls /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid >/dev/null 2>&1 && ps `cat /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid` >/dev/null 2>&1',
  47. initial_wait=5
  48. )
  49. self.assertNoMoreResources()
  50. def test_stop_default(self):
  51. self.executeScript("2.0.6/services/YARN/package/scripts/historyserver.py",
  52. classname = "Histroryserver",
  53. command = "stop",
  54. config_file="default.json"
  55. )
  56. self.assertResourceCalled('Execute', 'export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec && /usr/lib/hadoop-mapreduce/sbin/mr-jobhistory-daemon.sh --config /etc/hadoop/conf stop historyserver',
  57. user = 'mapred'
  58. )
  59. self.assertResourceCalled('Execute', 'rm -f /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid',
  60. user = 'mapred'
  61. )
  62. self.assertNoMoreResources()
  63. def test_configure_secured(self):
  64. self.executeScript("2.0.6/services/YARN/package/scripts/historyserver.py",
  65. classname = "Histroryserver",
  66. command = "configure",
  67. config_file="secured.json"
  68. )
  69. self.assert_configure_secured()
  70. self.assertNoMoreResources()
  71. def test_start_secured(self):
  72. self.executeScript("2.0.6/services/YARN/package/scripts/historyserver.py",
  73. classname = "Histroryserver",
  74. command = "start",
  75. config_file="secured.json"
  76. )
  77. self.assert_configure_secured()
  78. self.assertResourceCalled('Execute', 'export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec && /usr/lib/hadoop-mapreduce/sbin/mr-jobhistory-daemon.sh --config /etc/hadoop/conf start historyserver',
  79. not_if = 'ls /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid >/dev/null 2>&1 && ps `cat /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid` >/dev/null 2>&1',
  80. user = 'mapred'
  81. )
  82. self.assertResourceCalled('Execute', 'ls /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid >/dev/null 2>&1 && ps `cat /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid` >/dev/null 2>&1',
  83. user = 'mapred',
  84. not_if = 'ls /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid >/dev/null 2>&1 && ps `cat /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid` >/dev/null 2>&1',
  85. initial_wait=5
  86. )
  87. self.assertNoMoreResources()
  88. def test_stop_secured(self):
  89. self.executeScript("2.0.6/services/YARN/package/scripts/historyserver.py",
  90. classname = "Histroryserver",
  91. command = "stop",
  92. config_file="secured.json"
  93. )
  94. self.assertResourceCalled('Execute', 'export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec && /usr/lib/hadoop-mapreduce/sbin/mr-jobhistory-daemon.sh --config /etc/hadoop/conf stop historyserver',
  95. user = 'mapred'
  96. )
  97. self.assertResourceCalled('Execute', 'rm -f /var/run/hadoop-mapreduce/mapred/mapred-mapred-historyserver.pid',
  98. user = 'mapred'
  99. )
  100. self.assertNoMoreResources()
  101. def assert_configure_default(self):
  102. self.assertResourceCalled('HdfsDirectory', '/app-logs',
  103. security_enabled = False,
  104. keytab = UnknownConfigurationMock(),
  105. conf_dir = '/etc/hadoop/conf',
  106. hdfs_user = 'hdfs',
  107. kinit_path_local = "/usr/bin/kinit",
  108. recursive_chmod = True,
  109. owner = 'yarn',
  110. group = 'hadoop',
  111. action = ['create_delayed'],
  112. mode = 0777,
  113. )
  114. self.assertResourceCalled('HdfsDirectory', '/mapred',
  115. security_enabled = False,
  116. keytab = UnknownConfigurationMock(),
  117. conf_dir = '/etc/hadoop/conf',
  118. hdfs_user = 'hdfs',
  119. kinit_path_local = "/usr/bin/kinit",
  120. owner = 'mapred',
  121. action = ['create_delayed'],
  122. )
  123. self.assertResourceCalled('HdfsDirectory', '/mapred/system',
  124. security_enabled = False,
  125. keytab = UnknownConfigurationMock(),
  126. conf_dir = '/etc/hadoop/conf',
  127. hdfs_user = 'hdfs',
  128. kinit_path_local = "/usr/bin/kinit",
  129. owner = 'hdfs',
  130. action = ['create_delayed'],
  131. )
  132. self.assertResourceCalled('HdfsDirectory', '/mr-history/tmp',
  133. security_enabled = False,
  134. keytab = UnknownConfigurationMock(),
  135. conf_dir = '/etc/hadoop/conf',
  136. hdfs_user = 'hdfs',
  137. kinit_path_local = "/usr/bin/kinit",
  138. mode = 0777,
  139. owner = 'mapred',
  140. group = 'hadoop',
  141. action = ['create_delayed'],
  142. )
  143. self.assertResourceCalled('HdfsDirectory', '/mr-history/done',
  144. security_enabled = False,
  145. keytab = UnknownConfigurationMock(),
  146. conf_dir = '/etc/hadoop/conf',
  147. hdfs_user = 'hdfs',
  148. kinit_path_local = "/usr/bin/kinit",
  149. mode = 01777,
  150. owner = 'mapred',
  151. group = 'hadoop',
  152. action = ['create_delayed'],
  153. )
  154. self.assertResourceCalled('HdfsDirectory', None,
  155. security_enabled = False,
  156. keytab = UnknownConfigurationMock(),
  157. conf_dir = '/etc/hadoop/conf',
  158. hdfs_user = 'hdfs',
  159. kinit_path_local = "/usr/bin/kinit",
  160. action = ['create'],
  161. )
  162. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn/yarn',
  163. owner = 'yarn',
  164. group = 'hadoop',
  165. recursive = True,
  166. )
  167. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn/yarn',
  168. owner = 'yarn',
  169. group = 'hadoop',
  170. recursive = True,
  171. )
  172. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce/mapred',
  173. owner = 'mapred',
  174. group = 'hadoop',
  175. recursive = True,
  176. )
  177. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce/mapred',
  178. owner = 'mapred',
  179. group = 'hadoop',
  180. recursive = True,
  181. )
  182. self.assertResourceCalled('Directory', '/hadoop/yarn/local',
  183. owner = 'yarn',
  184. recursive = True,
  185. ignore_failures = True,
  186. )
  187. self.assertResourceCalled('Directory', '/hadoop/yarn/local1',
  188. owner = 'yarn',
  189. recursive = True,
  190. ignore_failures = True,
  191. )
  192. self.assertResourceCalled('Directory', '/hadoop/yarn/log',
  193. owner = 'yarn',
  194. recursive = True,
  195. ignore_failures = True,
  196. )
  197. self.assertResourceCalled('Directory', '/hadoop/yarn/log1',
  198. owner = 'yarn',
  199. recursive = True,
  200. ignore_failures = True,
  201. )
  202. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn',
  203. owner = 'yarn',
  204. recursive = True,
  205. ignore_failures = True,
  206. )
  207. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  208. owner = 'hdfs',
  209. group = 'hadoop',
  210. mode = 0644,
  211. conf_dir = '/etc/hadoop/conf',
  212. configurations = self.getConfig()['configurations']['core-site'],
  213. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  214. )
  215. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  216. owner = 'yarn',
  217. group = 'hadoop',
  218. mode = 0644,
  219. conf_dir = '/etc/hadoop/conf',
  220. configurations = self.getConfig()['configurations']['mapred-site'],
  221. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  222. )
  223. self.assertResourceCalled('XmlConfig', 'yarn-site.xml',
  224. owner = 'yarn',
  225. group = 'hadoop',
  226. mode = 0644,
  227. conf_dir = '/etc/hadoop/conf',
  228. configurations = self.getConfig()['configurations']['yarn-site'],
  229. configuration_attributes = self.getConfig()['configuration_attributes']['yarn-site']
  230. )
  231. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  232. owner = 'yarn',
  233. group = 'hadoop',
  234. mode = 0644,
  235. conf_dir = '/etc/hadoop/conf',
  236. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  237. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  238. )
  239. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn.exclude',
  240. owner = 'yarn',
  241. group = 'hadoop',
  242. )
  243. self.assertResourceCalled('File', '/etc/security/limits.d/yarn.conf',
  244. content = Template('yarn.conf.j2'),
  245. mode = 0644,
  246. )
  247. self.assertResourceCalled('File', '/etc/security/limits.d/mapreduce.conf',
  248. content = Template('mapreduce.conf.j2'),
  249. mode = 0644,
  250. )
  251. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
  252. content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
  253. owner = 'yarn',
  254. group = 'hadoop',
  255. mode = 0755,
  256. )
  257. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-env.sh',
  258. content = InlineTemplate(self.getConfig()['configurations']['mapred-env']['content']),
  259. owner = 'hdfs',
  260. )
  261. self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
  262. content = Template('taskcontroller.cfg.j2'),
  263. owner = 'hdfs',
  264. )
  265. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  266. owner = 'mapred',
  267. group = 'hadoop',
  268. conf_dir = '/etc/hadoop/conf',
  269. configurations = self.getConfig()['configurations']['mapred-site'],
  270. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  271. )
  272. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-queue-acls.xml',
  273. owner = 'mapred',
  274. group = 'hadoop',
  275. )
  276. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  277. owner = 'hdfs',
  278. group = 'hadoop',
  279. conf_dir = '/etc/hadoop/conf',
  280. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  281. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  282. )
  283. self.assertResourceCalled('File', '/etc/hadoop/conf/fair-scheduler.xml',
  284. owner = 'mapred',
  285. group = 'hadoop',
  286. )
  287. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-client.xml.example',
  288. owner = 'mapred',
  289. group = 'hadoop',
  290. )
  291. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-server.xml.example',
  292. owner = 'mapred',
  293. group = 'hadoop',
  294. )
  295. def assert_configure_secured(self):
  296. self.assertResourceCalled('HdfsDirectory', '/app-logs',
  297. security_enabled = True,
  298. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  299. conf_dir = '/etc/hadoop/conf',
  300. hdfs_user = 'hdfs',
  301. kinit_path_local = '/usr/bin/kinit',
  302. recursive_chmod = True,
  303. owner = 'yarn',
  304. group = 'hadoop',
  305. action = ['create_delayed'],
  306. mode = 0777,
  307. )
  308. self.assertResourceCalled('HdfsDirectory', '/mapred',
  309. security_enabled = True,
  310. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  311. conf_dir = '/etc/hadoop/conf',
  312. hdfs_user = 'hdfs',
  313. kinit_path_local = '/usr/bin/kinit',
  314. owner = 'mapred',
  315. action = ['create_delayed'],
  316. )
  317. self.assertResourceCalled('HdfsDirectory', '/mapred/system',
  318. security_enabled = True,
  319. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  320. conf_dir = '/etc/hadoop/conf',
  321. hdfs_user = 'hdfs',
  322. kinit_path_local = '/usr/bin/kinit',
  323. owner = 'hdfs',
  324. action = ['create_delayed'],
  325. )
  326. self.assertResourceCalled('HdfsDirectory', '/mr-history/tmp',
  327. security_enabled = True,
  328. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  329. conf_dir = '/etc/hadoop/conf',
  330. hdfs_user = 'hdfs',
  331. kinit_path_local = '/usr/bin/kinit',
  332. mode = 0777,
  333. owner = 'mapred',
  334. group = 'hadoop',
  335. action = ['create_delayed'],
  336. )
  337. self.assertResourceCalled('HdfsDirectory', '/mr-history/done',
  338. security_enabled = True,
  339. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  340. conf_dir = '/etc/hadoop/conf',
  341. hdfs_user = 'hdfs',
  342. kinit_path_local = '/usr/bin/kinit',
  343. mode = 01777,
  344. owner = 'mapred',
  345. group = 'hadoop',
  346. action = ['create_delayed'],
  347. )
  348. self.assertResourceCalled('HdfsDirectory', None,
  349. security_enabled = True,
  350. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  351. conf_dir = '/etc/hadoop/conf',
  352. hdfs_user = 'hdfs',
  353. kinit_path_local = '/usr/bin/kinit',
  354. action = ['create'],
  355. )
  356. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn/yarn',
  357. owner = 'yarn',
  358. group = 'hadoop',
  359. recursive = True,
  360. )
  361. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn/yarn',
  362. owner = 'yarn',
  363. group = 'hadoop',
  364. recursive = True,
  365. )
  366. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce/mapred',
  367. owner = 'mapred',
  368. group = 'hadoop',
  369. recursive = True,
  370. )
  371. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce/mapred',
  372. owner = 'mapred',
  373. group = 'hadoop',
  374. recursive = True,
  375. )
  376. self.assertResourceCalled('Directory', '/hadoop/yarn/local',
  377. owner = 'yarn',
  378. recursive = True,
  379. ignore_failures = True,
  380. )
  381. self.assertResourceCalled('Directory', '/hadoop/yarn/log',
  382. owner = 'yarn',
  383. recursive = True,
  384. ignore_failures = True,
  385. )
  386. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn',
  387. owner = 'yarn',
  388. recursive = True,
  389. ignore_failures = True,
  390. )
  391. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  392. owner = 'hdfs',
  393. group = 'hadoop',
  394. mode = 0644,
  395. conf_dir = '/etc/hadoop/conf',
  396. configurations = self.getConfig()['configurations']['core-site'],
  397. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  398. )
  399. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  400. owner = 'yarn',
  401. group = 'hadoop',
  402. mode = 0644,
  403. conf_dir = '/etc/hadoop/conf',
  404. configurations = self.getConfig()['configurations']['mapred-site'],
  405. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  406. )
  407. self.assertResourceCalled('XmlConfig', 'yarn-site.xml',
  408. owner = 'yarn',
  409. group = 'hadoop',
  410. mode = 0644,
  411. conf_dir = '/etc/hadoop/conf',
  412. configurations = self.getConfig()['configurations']['yarn-site'],
  413. configuration_attributes = self.getConfig()['configuration_attributes']['yarn-site']
  414. )
  415. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  416. owner = 'yarn',
  417. group = 'hadoop',
  418. mode = 0644,
  419. conf_dir = '/etc/hadoop/conf',
  420. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  421. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  422. )
  423. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn.exclude',
  424. owner = 'yarn',
  425. group = 'hadoop',
  426. )
  427. self.assertResourceCalled('File', '/etc/security/limits.d/yarn.conf',
  428. content = Template('yarn.conf.j2'),
  429. mode = 0644,
  430. )
  431. self.assertResourceCalled('File', '/etc/security/limits.d/mapreduce.conf',
  432. content = Template('mapreduce.conf.j2'),
  433. mode = 0644,
  434. )
  435. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
  436. content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
  437. owner = 'yarn',
  438. group = 'hadoop',
  439. mode = 0755,
  440. )
  441. self.assertResourceCalled('File', '/usr/lib/hadoop-yarn/bin/container-executor',
  442. group = 'hadoop',
  443. mode = 06050,
  444. )
  445. self.assertResourceCalled('File', '/etc/hadoop/conf/container-executor.cfg',
  446. content = Template('container-executor.cfg.j2'),
  447. group = 'hadoop',
  448. mode = 0644,
  449. )
  450. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-env.sh',
  451. content = InlineTemplate(self.getConfig()['configurations']['mapred-env']['content']),
  452. owner = 'root',
  453. )
  454. self.assertResourceCalled('File', '/usr/lib/hadoop/sbin/task-controller',
  455. owner = 'root',
  456. group = 'hadoop',
  457. mode = 06050,
  458. )
  459. self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
  460. content = Template('taskcontroller.cfg.j2'),
  461. owner = 'root',
  462. group = 'hadoop',
  463. mode = 0644,
  464. )
  465. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  466. owner = 'mapred',
  467. group = 'hadoop',
  468. conf_dir = '/etc/hadoop/conf',
  469. configurations = self.getConfig()['configurations']['mapred-site'],
  470. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  471. )
  472. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-queue-acls.xml',
  473. owner = 'mapred',
  474. group = 'hadoop',
  475. )
  476. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  477. owner = 'hdfs',
  478. group = 'hadoop',
  479. conf_dir = '/etc/hadoop/conf',
  480. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  481. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  482. )
  483. self.assertResourceCalled('File', '/etc/hadoop/conf/fair-scheduler.xml',
  484. owner = 'mapred',
  485. group = 'hadoop',
  486. )
  487. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-client.xml.example',
  488. owner = 'mapred',
  489. group = 'hadoop',
  490. )
  491. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-server.xml.example',
  492. owner = 'mapred',
  493. group = 'hadoop',
  494. )