test_mapreduce2_client.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  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 TestMapReduce2Client(RMFTestCase):
  25. COMMON_SERVICES_PACKAGE_DIR = "YARN/2.1.0.2.0/package"
  26. STACK_VERSION = "2.0.6"
  27. def test_configure_default(self):
  28. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  29. classname = "MapReduce2Client",
  30. command = "configure",
  31. config_file="default.json",
  32. hdp_stack_version = self.STACK_VERSION,
  33. target = RMFTestCase.TARGET_COMMON_SERVICES
  34. )
  35. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn',
  36. owner = 'yarn',
  37. group = 'hadoop',
  38. recursive = True,
  39. cd_access = 'a',
  40. )
  41. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn/yarn',
  42. owner = 'yarn',
  43. group = 'hadoop',
  44. recursive = True,
  45. cd_access = 'a',
  46. )
  47. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn/yarn',
  48. owner = 'yarn',
  49. group = 'hadoop',
  50. recursive = True,
  51. cd_access = 'a',
  52. )
  53. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce',
  54. owner = 'mapred',
  55. group = 'hadoop',
  56. recursive = True,
  57. cd_access = 'a',
  58. )
  59. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce/mapred',
  60. owner = 'mapred',
  61. group = 'hadoop',
  62. recursive = True,
  63. cd_access = 'a',
  64. )
  65. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce',
  66. owner = 'mapred',
  67. group = 'hadoop',
  68. recursive = True,
  69. cd_access = 'a',
  70. )
  71. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce/mapred',
  72. owner = 'mapred',
  73. group = 'hadoop',
  74. recursive = True,
  75. cd_access = 'a',
  76. )
  77. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn',
  78. owner = 'yarn',
  79. recursive = True,
  80. ignore_failures = True,
  81. cd_access = 'a',
  82. )
  83. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  84. owner = 'hdfs',
  85. group = 'hadoop',
  86. mode = 0644,
  87. conf_dir = '/etc/hadoop/conf',
  88. configurations = self.getConfig()['configurations']['core-site'],
  89. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  90. )
  91. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  92. owner = 'yarn',
  93. group = 'hadoop',
  94. mode = 0644,
  95. conf_dir = '/etc/hadoop/conf',
  96. configurations = self.getConfig()['configurations']['mapred-site'],
  97. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  98. )
  99. self.assertResourceCalled('XmlConfig', 'yarn-site.xml',
  100. owner = 'yarn',
  101. group = 'hadoop',
  102. mode = 0644,
  103. conf_dir = '/etc/hadoop/conf',
  104. configurations = self.getConfig()['configurations']['yarn-site'],
  105. configuration_attributes = self.getConfig()['configuration_attributes']['yarn-site']
  106. )
  107. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  108. owner = 'yarn',
  109. group = 'hadoop',
  110. mode = 0644,
  111. conf_dir = '/etc/hadoop/conf',
  112. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  113. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  114. )
  115. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn.exclude',
  116. owner = 'yarn',
  117. group = 'hadoop',
  118. )
  119. self.assertResourceCalled('File', '/etc/security/limits.d/yarn.conf',
  120. content = Template('yarn.conf.j2'),
  121. mode = 0644,
  122. )
  123. self.assertResourceCalled('File', '/etc/security/limits.d/mapreduce.conf',
  124. content = Template('mapreduce.conf.j2'),
  125. mode = 0644,
  126. )
  127. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
  128. content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
  129. owner = 'yarn',
  130. group = 'hadoop',
  131. mode = 0755,
  132. )
  133. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-env.sh',
  134. content = InlineTemplate(self.getConfig()['configurations']['mapred-env']['content']),
  135. owner = 'hdfs',
  136. )
  137. self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
  138. content = Template('taskcontroller.cfg.j2'),
  139. owner = 'hdfs',
  140. )
  141. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  142. owner = 'mapred',
  143. group = 'hadoop',
  144. conf_dir = '/etc/hadoop/conf',
  145. configurations = self.getConfig()['configurations']['mapred-site'],
  146. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  147. )
  148. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  149. owner = 'hdfs',
  150. group = 'hadoop',
  151. conf_dir = '/etc/hadoop/conf',
  152. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  153. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  154. )
  155. self.assertResourceCalled('File', '/etc/hadoop/conf/fair-scheduler.xml',
  156. owner = 'mapred',
  157. group = 'hadoop',
  158. )
  159. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-client.xml.example',
  160. owner = 'mapred',
  161. group = 'hadoop',
  162. )
  163. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-server.xml.example',
  164. owner = 'mapred',
  165. group = 'hadoop',
  166. )
  167. self.assertNoMoreResources()
  168. def test_configure_secured(self):
  169. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  170. classname = "MapReduce2Client",
  171. command = "configure",
  172. config_file="secured.json",
  173. hdp_stack_version = self.STACK_VERSION,
  174. target = RMFTestCase.TARGET_COMMON_SERVICES
  175. )
  176. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn',
  177. owner = 'yarn',
  178. group = 'hadoop',
  179. recursive = True,
  180. cd_access = 'a',
  181. )
  182. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn/yarn',
  183. owner = 'yarn',
  184. group = 'hadoop',
  185. recursive = True,
  186. cd_access = 'a',
  187. )
  188. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn/yarn',
  189. owner = 'yarn',
  190. group = 'hadoop',
  191. recursive = True,
  192. cd_access = 'a',
  193. )
  194. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce',
  195. owner = 'mapred',
  196. group = 'hadoop',
  197. recursive = True,
  198. cd_access = 'a',
  199. )
  200. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce/mapred',
  201. owner = 'mapred',
  202. group = 'hadoop',
  203. recursive = True,
  204. cd_access = 'a',
  205. )
  206. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce',
  207. owner = 'mapred',
  208. group = 'hadoop',
  209. recursive = True,
  210. cd_access = 'a',
  211. )
  212. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce/mapred',
  213. owner = 'mapred',
  214. group = 'hadoop',
  215. recursive = True,
  216. cd_access = 'a',
  217. )
  218. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn',
  219. owner = 'yarn',
  220. recursive = True,
  221. ignore_failures = True,
  222. cd_access = 'a',
  223. )
  224. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  225. owner = 'hdfs',
  226. group = 'hadoop',
  227. mode = 0644,
  228. conf_dir = '/etc/hadoop/conf',
  229. configurations = self.getConfig()['configurations']['core-site'],
  230. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  231. )
  232. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  233. owner = 'yarn',
  234. group = 'hadoop',
  235. mode = 0644,
  236. conf_dir = '/etc/hadoop/conf',
  237. configurations = self.getConfig()['configurations']['mapred-site'],
  238. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  239. )
  240. self.assertResourceCalled('XmlConfig', 'yarn-site.xml',
  241. owner = 'yarn',
  242. group = 'hadoop',
  243. mode = 0644,
  244. conf_dir = '/etc/hadoop/conf',
  245. configurations = self.getConfig()['configurations']['yarn-site'],
  246. configuration_attributes = self.getConfig()['configuration_attributes']['yarn-site']
  247. )
  248. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  249. owner = 'yarn',
  250. group = 'hadoop',
  251. mode = 0644,
  252. conf_dir = '/etc/hadoop/conf',
  253. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  254. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  255. )
  256. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn.exclude',
  257. owner = 'yarn',
  258. group = 'hadoop',
  259. )
  260. self.assertResourceCalled('File', '/etc/security/limits.d/yarn.conf',
  261. content = Template('yarn.conf.j2'),
  262. mode = 0644,
  263. )
  264. self.assertResourceCalled('File', '/etc/security/limits.d/mapreduce.conf',
  265. content = Template('mapreduce.conf.j2'),
  266. mode = 0644,
  267. )
  268. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
  269. content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
  270. owner = 'yarn',
  271. group = 'hadoop',
  272. mode = 0755,
  273. )
  274. self.assertResourceCalled('File', '/usr/lib/hadoop-yarn/bin/container-executor',
  275. group = 'hadoop',
  276. mode = 06050,
  277. )
  278. self.assertResourceCalled('File', '/etc/hadoop/conf/container-executor.cfg',
  279. content = Template('container-executor.cfg.j2'),
  280. group = 'hadoop',
  281. mode = 0644,
  282. )
  283. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-env.sh',
  284. content = InlineTemplate(self.getConfig()['configurations']['mapred-env']['content']),
  285. owner = 'root',
  286. )
  287. self.assertResourceCalled('File', '/usr/lib/hadoop/sbin/task-controller',
  288. owner = 'root',
  289. group = 'hadoop',
  290. mode = 06050,
  291. )
  292. self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
  293. content = Template('taskcontroller.cfg.j2'),
  294. owner = 'root',
  295. group = 'hadoop',
  296. mode = 0644,
  297. )
  298. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  299. owner = 'mapred',
  300. group = 'hadoop',
  301. conf_dir = '/etc/hadoop/conf',
  302. configurations = self.getConfig()['configurations']['mapred-site'],
  303. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  304. )
  305. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  306. owner = 'hdfs',
  307. group = 'hadoop',
  308. conf_dir = '/etc/hadoop/conf',
  309. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  310. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  311. )
  312. self.assertResourceCalled('File', '/etc/hadoop/conf/fair-scheduler.xml',
  313. owner = 'mapred',
  314. group = 'hadoop',
  315. )
  316. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-client.xml.example',
  317. owner = 'mapred',
  318. group = 'hadoop',
  319. )
  320. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-server.xml.example',
  321. owner = 'mapred',
  322. group = 'hadoop',
  323. )
  324. self.assertNoMoreResources()
  325. def test_upgrade(self):
  326. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  327. classname = "MapReduce2Client",
  328. command = "restart",
  329. config_file="client-upgrade.json",
  330. hdp_stack_version = self.STACK_VERSION,
  331. target = RMFTestCase.TARGET_COMMON_SERVICES
  332. )
  333. self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
  334. # for now, it's enough that hdp-select is confirmed