webhcat.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. """
  2. Licensed to the Apache Software Foundation (ASF) under one
  3. or more contributor license agreements. See the NOTICE file
  4. distributed with this work for additional information
  5. regarding copyright ownership. The ASF licenses this file
  6. to you under the Apache License, Version 2.0 (the
  7. "License"); you may not use this file except in compliance
  8. with the License. You may obtain a copy of the License at
  9. http://www.apache.org/licenses/LICENSE-2.0
  10. Unless required by applicable law or agreed to in writing, software
  11. distributed under the License is distributed on an "AS IS" BASIS,
  12. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. See the License for the specific language governing permissions and
  14. limitations under the License.
  15. Ambari Agent
  16. """
  17. import sys
  18. import os.path
  19. import glob
  20. from resource_management import *
  21. from resource_management.core.resources.system import Execute
  22. from resource_management.libraries.functions.version import compare_versions
  23. from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
  24. def webhcat():
  25. import params
  26. if params.hdp_stack_version != "" and compare_versions(params.hdp_stack_version, "2.2.0.0") < 0:
  27. params.HdfsDirectory(params.webhcat_apps_dir,
  28. action="create_delayed",
  29. owner=params.webhcat_user,
  30. mode=0755
  31. )
  32. if params.hcat_hdfs_user_dir != params.webhcat_hdfs_user_dir:
  33. params.HdfsDirectory(params.hcat_hdfs_user_dir,
  34. action="create_delayed",
  35. owner=params.hcat_user,
  36. mode=params.hcat_hdfs_user_mode
  37. )
  38. params.HdfsDirectory(params.webhcat_hdfs_user_dir,
  39. action="create_delayed",
  40. owner=params.webhcat_user,
  41. mode=params.webhcat_hdfs_user_mode
  42. )
  43. params.HdfsDirectory(None, action="create")
  44. Directory(params.templeton_pid_dir,
  45. owner=params.webhcat_user,
  46. mode=0755,
  47. group=params.user_group,
  48. recursive=True)
  49. Directory(params.templeton_log_dir,
  50. owner=params.webhcat_user,
  51. mode=0755,
  52. group=params.user_group,
  53. recursive=True)
  54. Directory(params.config_dir,
  55. recursive=True,
  56. owner=params.webhcat_user,
  57. group=params.user_group)
  58. if params.security_enabled:
  59. kinit_if_needed = format("{kinit_path_local} -kt {hdfs_user_keytab} {hdfs_principal_name};")
  60. else:
  61. kinit_if_needed = ""
  62. if kinit_if_needed:
  63. Execute(kinit_if_needed,
  64. user=params.webhcat_user,
  65. path='/bin'
  66. )
  67. # TODO, these checks that are specific to HDP 2.2 and greater should really be in a script specific to that stack.
  68. if params.hdp_stack_version != "" and compare_versions(params.hdp_stack_version, "2.2.0.0") >= 0:
  69. copy_tarballs_to_hdfs('hive', 'hive-webhcat', params.webhcat_user, params.hdfs_user, params.user_group)
  70. copy_tarballs_to_hdfs('pig', 'hive-webhcat', params.webhcat_user, params.hdfs_user, params.user_group)
  71. copy_tarballs_to_hdfs('hadoop-streaming', 'hive-webhcat', params.webhcat_user, params.hdfs_user, params.user_group)
  72. copy_tarballs_to_hdfs('sqoop', 'hive-webhcat', params.webhcat_user, params.hdfs_user, params.user_group)
  73. else:
  74. CopyFromLocal(params.hadoop_streeming_jars,
  75. owner=params.webhcat_user,
  76. mode=0755,
  77. dest_dir=params.webhcat_apps_dir,
  78. kinnit_if_needed=kinit_if_needed,
  79. hdfs_user=params.hdfs_user,
  80. hadoop_bin_dir=params.hadoop_bin_dir,
  81. hadoop_conf_dir=params.hadoop_conf_dir
  82. )
  83. if (os.path.isfile(params.pig_tar_file)):
  84. CopyFromLocal(params.pig_tar_file,
  85. owner=params.webhcat_user,
  86. mode=0755,
  87. dest_dir=params.webhcat_apps_dir,
  88. kinnit_if_needed=kinit_if_needed,
  89. hdfs_user=params.hdfs_user,
  90. hadoop_bin_dir=params.hadoop_bin_dir,
  91. hadoop_conf_dir=params.hadoop_conf_dir
  92. )
  93. CopyFromLocal(params.hive_tar_file,
  94. owner=params.webhcat_user,
  95. mode=0755,
  96. dest_dir=params.webhcat_apps_dir,
  97. kinnit_if_needed=kinit_if_needed,
  98. hdfs_user=params.hdfs_user,
  99. hadoop_bin_dir=params.hadoop_bin_dir,
  100. hadoop_conf_dir=params.hadoop_conf_dir
  101. )
  102. if (len(glob.glob(params.sqoop_tar_file)) > 0):
  103. CopyFromLocal(params.sqoop_tar_file,
  104. owner=params.webhcat_user,
  105. mode=0755,
  106. dest_dir=params.webhcat_apps_dir,
  107. kinnit_if_needed=kinit_if_needed,
  108. hdfs_user=params.hdfs_user,
  109. hadoop_bin_dir=params.hadoop_bin_dir,
  110. hadoop_conf_dir=params.hadoop_conf_dir
  111. )
  112. # Replace _HOST with hostname in relevant principal-related properties
  113. webhcat_site = params.config['configurations']['webhcat-site'].copy()
  114. for prop_name in ['templeton.hive.properties', 'templeton.kerberos.principal']:
  115. if prop_name in webhcat_site:
  116. webhcat_site[prop_name] = webhcat_site[prop_name].replace("_HOST", params.hostname)
  117. XmlConfig("webhcat-site.xml",
  118. conf_dir=params.config_dir,
  119. configurations=webhcat_site,
  120. configuration_attributes=params.config['configuration_attributes']['webhcat-site'],
  121. owner=params.webhcat_user,
  122. group=params.user_group,
  123. )
  124. File(format("{config_dir}/webhcat-env.sh"),
  125. owner=params.webhcat_user,
  126. group=params.user_group,
  127. content=InlineTemplate(params.webhcat_env_sh_template)
  128. )
  129. log4j_webhcat_filename = 'webhcat-log4j.properties'
  130. if (params.log4j_webhcat_props != None):
  131. File(format("{config_dir}/{log4j_webhcat_filename}"),
  132. mode=0644,
  133. group=params.user_group,
  134. owner=params.webhcat_user,
  135. content=params.log4j_webhcat_props
  136. )
  137. elif (os.path.exists("{config_dir}/{log4j_webhcat_filename}.template")):
  138. File(format("{config_dir}/{log4j_webhcat_filename}"),
  139. mode=0644,
  140. group=params.user_group,
  141. owner=params.webhcat_user,
  142. content=StaticFile(format("{config_dir}/{log4j_webhcat_filename}.template"))
  143. )