test_mapreduce2_client.py 13 KB

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