Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 426DB200C65 for ; Wed, 22 Mar 2017 07:10:02 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 41064160B93; Wed, 22 Mar 2017 06:10:02 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 08E18160B99 for ; Wed, 22 Mar 2017 07:09:59 +0100 (CET) Received: (qmail 83939 invoked by uid 500); 22 Mar 2017 06:09:59 -0000 Mailing-List: contact commits-help@bigtop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: bigtop-dev@bigtop.apache.org Delivered-To: mailing list commits@bigtop.apache.org Received: (qmail 81493 invoked by uid 99); 22 Mar 2017 06:09:53 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 22 Mar 2017 06:09:53 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id E57CEDFE7B; Wed, 22 Mar 2017 06:09:52 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: rvs@apache.org To: commits@bigtop.apache.org Date: Wed, 22 Mar 2017 06:10:33 -0000 Message-Id: In-Reply-To: <69863c16852949b9998cae3af818e0a6@git.apache.org> References: <69863c16852949b9998cae3af818e0a6@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [42/52] bigtop git commit: BIGTOP-1406. package Ambari in Bigtop archived-at: Wed, 22 Mar 2017 06:10:02 -0000 http://git-wip-us.apache.org/repos/asf/bigtop/blob/0d3448b8/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive.py ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive.py b/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive.py deleted file mode 100755 index 4f53ea9..0000000 --- a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive.py +++ /dev/null @@ -1,481 +0,0 @@ -#!/usr/bin/env python -""" -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -""" - -import os -import glob -from urlparse import urlparse - -from resource_management.libraries.script.script import Script -from resource_management.libraries.resources.hdfs_resource import HdfsResource -from resource_management.libraries.functions.copy_tarball import copy_to_hdfs -from resource_management.libraries.functions import StackFeature -from resource_management.libraries.functions.stack_features import check_stack_feature -from resource_management.core.resources.service import ServiceConfig -from resource_management.core.resources.system import File, Execute, Directory -from resource_management.core.source import StaticFile, Template, DownloadSource, InlineTemplate -from resource_management.core.shell import as_user -from resource_management.libraries.functions.is_empty import is_empty -from resource_management.libraries.resources.xml_config import XmlConfig -from resource_management.libraries.functions.format import format -from resource_management.core.exceptions import Fail -from resource_management.core.shell import as_sudo -from resource_management.core.shell import quote_bash_args -from resource_management.core.logger import Logger -from resource_management.core import utils -from resource_management.libraries.functions.setup_atlas_hook import has_atlas_in_cluster, setup_atlas_hook -from ambari_commons.constants import SERVICE - -from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl -from ambari_commons import OSConst - - - -@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY) -def hive(name=None): - import params - - XmlConfig("hive-site.xml", - conf_dir = params.hive_conf_dir, - configurations = params.config['configurations']['hive-site'], - owner=params.hive_user, - configuration_attributes=params.config['configuration_attributes']['hive-site'] - ) - - if name in ["hiveserver2","metastore"]: - # Manually overriding service logon user & password set by the installation package - service_name = params.service_map[name] - ServiceConfig(service_name, - action="change_user", - username = params.hive_user, - password = Script.get_password(params.hive_user)) - Execute(format("cmd /c hadoop fs -mkdir -p {hive_warehouse_dir}"), logoutput=True, user=params.hadoop_user) - - if name == 'metastore': - if params.init_metastore_schema: - check_schema_created_cmd = format('cmd /c "{hive_bin}\\hive.cmd --service schematool -info ' - '-dbType {hive_metastore_db_type} ' - '-userName {hive_metastore_user_name} ' - '-passWord {hive_metastore_user_passwd!p}' - '&set EXITCODE=%ERRORLEVEL%&exit /B %EXITCODE%"', #cmd "feature", propagate the process exit code manually - hive_bin=params.hive_bin, - hive_metastore_db_type=params.hive_metastore_db_type, - hive_metastore_user_name=params.hive_metastore_user_name, - hive_metastore_user_passwd=params.hive_metastore_user_passwd) - try: - Execute(check_schema_created_cmd) - except Fail: - create_schema_cmd = format('cmd /c {hive_bin}\\hive.cmd --service schematool -initSchema ' - '-dbType {hive_metastore_db_type} ' - '-userName {hive_metastore_user_name} ' - '-passWord {hive_metastore_user_passwd!p}', - hive_bin=params.hive_bin, - hive_metastore_db_type=params.hive_metastore_db_type, - hive_metastore_user_name=params.hive_metastore_user_name, - hive_metastore_user_passwd=params.hive_metastore_user_passwd) - Execute(create_schema_cmd, - user = params.hive_user, - logoutput=True - ) - - if name == "hiveserver2": - if params.hive_execution_engine == "tez": - # Init the tez app dir in hadoop - script_file = __file__.replace('/', os.sep) - cmd_file = os.path.normpath(os.path.join(os.path.dirname(script_file), "..", "files", "hiveTezSetup.cmd")) - - Execute("cmd /c " + cmd_file, logoutput=True, user=params.hadoop_user) - - -@OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT) -def hive(name=None): - import params - - if name == 'hiveserver2': - # copy tarball to HDFS feature not supported - if not (params.stack_version_formatted_major and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted_major)): - params.HdfsResource(params.webhcat_apps_dir, - type="directory", - action="create_on_execute", - owner=params.webhcat_user, - mode=0755 - ) - - # Create webhcat dirs. - if params.hcat_hdfs_user_dir != params.webhcat_hdfs_user_dir: - params.HdfsResource(params.hcat_hdfs_user_dir, - type="directory", - action="create_on_execute", - owner=params.hcat_user, - mode=params.hcat_hdfs_user_mode - ) - - params.HdfsResource(params.webhcat_hdfs_user_dir, - type="directory", - action="create_on_execute", - owner=params.webhcat_user, - mode=params.webhcat_hdfs_user_mode - ) - - # ****** Begin Copy Tarballs ****** - # ********************************* - # if copy tarball to HDFS feature supported copy mapreduce.tar.gz and tez.tar.gz to HDFS - if params.stack_version_formatted_major and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted_major): - copy_to_hdfs("mapreduce", params.user_group, params.hdfs_user, host_sys_prepped=params.host_sys_prepped) - copy_to_hdfs("tez", params.user_group, params.hdfs_user, host_sys_prepped=params.host_sys_prepped) - - # Always copy pig.tar.gz and hive.tar.gz using the appropriate mode. - # This can use a different source and dest location to account - copy_to_hdfs("pig", - params.user_group, - params.hdfs_user, - file_mode=params.tarballs_mode, - custom_source_file=params.pig_tar_source, - custom_dest_file=params.pig_tar_dest_file, - host_sys_prepped=params.host_sys_prepped) - copy_to_hdfs("hive", - params.user_group, - params.hdfs_user, - file_mode=params.tarballs_mode, - custom_source_file=params.hive_tar_source, - custom_dest_file=params.hive_tar_dest_file, - host_sys_prepped=params.host_sys_prepped) - - wildcard_tarballs = ["sqoop", "hadoop_streaming"] - for tarball_name in wildcard_tarballs: - source_file_pattern = eval("params." + tarball_name + "_tar_source") - dest_dir = eval("params." + tarball_name + "_tar_dest_dir") - - if source_file_pattern is None or dest_dir is None: - continue - - source_files = glob.glob(source_file_pattern) if "*" in source_file_pattern else [source_file_pattern] - for source_file in source_files: - src_filename = os.path.basename(source_file) - dest_file = os.path.join(dest_dir, src_filename) - - copy_to_hdfs(tarball_name, - params.user_group, - params.hdfs_user, - file_mode=params.tarballs_mode, - custom_source_file=source_file, - custom_dest_file=dest_file, - host_sys_prepped=params.host_sys_prepped) - # ******* End Copy Tarballs ******* - # ********************************* - - # if warehouse directory is in DFS - if not params.whs_dir_protocol or params.whs_dir_protocol == urlparse(params.default_fs).scheme: - # Create Hive Metastore Warehouse Dir - params.HdfsResource(params.hive_apps_whs_dir, - type="directory", - action="create_on_execute", - owner=params.hive_user, - mode=0777 - ) - else: - Logger.info(format("Not creating warehouse directory '{hive_apps_whs_dir}', as the location is not in DFS.")) - - # Create Hive User Dir - params.HdfsResource(params.hive_hdfs_user_dir, - type="directory", - action="create_on_execute", - owner=params.hive_user, - mode=params.hive_hdfs_user_mode - ) - - if not is_empty(params.hive_exec_scratchdir) and not urlparse(params.hive_exec_scratchdir).path.startswith("/tmp"): - params.HdfsResource(params.hive_exec_scratchdir, - type="directory", - action="create_on_execute", - owner=params.hive_user, - group=params.hdfs_user, - mode=0777) # Hive expects this dir to be writeable by everyone as it is used as a temp dir - - params.HdfsResource(None, action="execute") - - Directory(params.hive_etc_dir_prefix, - mode=0755 - ) - - # We should change configurations for client as well as for server. - # The reason is that stale-configs are service-level, not component. - Logger.info("Directories to fill with configs: %s" % str(params.hive_conf_dirs_list)) - for conf_dir in params.hive_conf_dirs_list: - fill_conf_dir(conf_dir) - - XmlConfig("hive-site.xml", - conf_dir=params.hive_config_dir, - configurations=params.hive_site_config, - configuration_attributes=params.config['configuration_attributes']['hive-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - - # Generate atlas-application.properties.xml file - if has_atlas_in_cluster(): - atlas_hook_filepath = os.path.join(params.hive_config_dir, params.atlas_hook_filename) - setup_atlas_hook(SERVICE.HIVE, params.hive_atlas_application_properties, atlas_hook_filepath, params.hive_user, params.user_group) - - if name == 'hiveserver2': - XmlConfig("hiveserver2-site.xml", - conf_dir=params.hive_server_conf_dir, - configurations=params.config['configurations']['hiveserver2-site'], - configuration_attributes=params.config['configuration_attributes']['hiveserver2-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - - if params.hive_metastore_site_supported and name == 'metastore': - XmlConfig("hivemetastore-site.xml", - conf_dir=params.hive_server_conf_dir, - configurations=params.config['configurations']['hivemetastore-site'], - configuration_attributes=params.config['configuration_attributes']['hivemetastore-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - - File(format("{hive_config_dir}/hive-env.sh"), - owner=params.hive_user, - group=params.user_group, - content=InlineTemplate(params.hive_env_sh_template) - ) - - # On some OS this folder could be not exists, so we will create it before pushing there files - Directory(params.limits_conf_dir, - create_parents = True, - owner='root', - group='root' - ) - - File(os.path.join(params.limits_conf_dir, 'hive.conf'), - owner='root', - group='root', - mode=0644, - content=Template("hive.conf.j2") - ) - - if name == 'metastore' or name == 'hiveserver2': - if params.hive_jdbc_target is not None and not os.path.exists(params.hive_jdbc_target): - jdbc_connector(params.hive_jdbc_target, params.hive_previous_jdbc_jar) - if params.hive2_jdbc_target is not None and not os.path.exists(params.hive2_jdbc_target): - jdbc_connector(params.hive2_jdbc_target, params.hive2_previous_jdbc_jar) - - File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"), - content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")), - mode = 0644, - ) - - if name == 'metastore': - File(os.path.join(params.hive_server_conf_dir, "hadoop-metrics2-hivemetastore.properties"), - owner=params.hive_user, - group=params.user_group, - content=Template("hadoop-metrics2-hivemetastore.properties.j2") - ) - - File(params.start_metastore_path, - mode=0755, - content=StaticFile('startMetastore.sh') - ) - if params.init_metastore_schema: - create_schema_cmd = format("export HIVE_CONF_DIR={hive_server_conf_dir} ; " - "{hive_schematool_bin}/schematool -initSchema " - "-dbType {hive_metastore_db_type} " - "-userName {hive_metastore_user_name} " - "-passWord {hive_metastore_user_passwd!p} -verbose") - - check_schema_created_cmd = as_user(format("export HIVE_CONF_DIR={hive_server_conf_dir} ; " - "{hive_schematool_bin}/schematool -info " - "-dbType {hive_metastore_db_type} " - "-userName {hive_metastore_user_name} " - "-passWord {hive_metastore_user_passwd!p} -verbose"), params.hive_user) - - # HACK: in cases with quoted passwords and as_user (which does the quoting as well) !p won't work for hiding passwords. - # Fixing it with the hack below: - quoted_hive_metastore_user_passwd = quote_bash_args(quote_bash_args(params.hive_metastore_user_passwd)) - if quoted_hive_metastore_user_passwd[0] == "'" and quoted_hive_metastore_user_passwd[-1] == "'" \ - or quoted_hive_metastore_user_passwd[0] == '"' and quoted_hive_metastore_user_passwd[-1] == '"': - quoted_hive_metastore_user_passwd = quoted_hive_metastore_user_passwd[1:-1] - Logger.sensitive_strings[repr(check_schema_created_cmd)] = repr(check_schema_created_cmd.replace( - format("-passWord {quoted_hive_metastore_user_passwd}"), "-passWord " + utils.PASSWORDS_HIDE_STRING)) - - Execute(create_schema_cmd, - not_if = check_schema_created_cmd, - user = params.hive_user - ) - elif name == 'hiveserver2': - File(params.start_hiveserver2_path, - mode=0755, - content=Template(format('{start_hiveserver2_script}')) - ) - - File(os.path.join(params.hive_server_conf_dir, "hadoop-metrics2-hiveserver2.properties"), - owner=params.hive_user, - group=params.user_group, - content=Template("hadoop-metrics2-hiveserver2.properties.j2") - ) - - if name != "client": - Directory(params.hive_pid_dir, - create_parents = True, - cd_access='a', - owner=params.hive_user, - group=params.user_group, - mode=0755) - Directory(params.hive_log_dir, - create_parents = True, - cd_access='a', - owner=params.hive_user, - group=params.user_group, - mode=0755) - Directory(params.hive_var_lib, - create_parents = True, - cd_access='a', - owner=params.hive_user, - group=params.user_group, - mode=0755) - -""" -Writes configuration files required by Hive. -""" -def fill_conf_dir(component_conf_dir): - import params - - Directory(component_conf_dir, - owner=params.hive_user, - group=params.user_group, - create_parents = True - ) - - XmlConfig("mapred-site.xml", - conf_dir=component_conf_dir, - configurations=params.config['configurations']['mapred-site'], - configuration_attributes=params.config['configuration_attributes']['mapred-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - - - File(format("{component_conf_dir}/hive-default.xml.template"), - owner=params.hive_user, - group=params.user_group - ) - - File(format("{component_conf_dir}/hive-env.sh.template"), - owner=params.hive_user, - group=params.user_group - ) - - # Create hive-log4j.properties and hive-exec-log4j.properties - # in /etc/hive/conf and not in /etc/hive2/conf - if params.log4j_version == '1': - log4j_exec_filename = 'hive-exec-log4j.properties' - if (params.log4j_exec_props != None): - File(format("{component_conf_dir}/{log4j_exec_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.log4j_exec_props - ) - elif (os.path.exists("{component_conf_dir}/{log4j_exec_filename}.template")): - File(format("{component_conf_dir}/{log4j_exec_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=StaticFile(format("{component_conf_dir}/{log4j_exec_filename}.template")) - ) - - log4j_filename = 'hive-log4j.properties' - if (params.log4j_props != None): - File(format("{component_conf_dir}/{log4j_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.log4j_props - ) - elif (os.path.exists("{component_conf_dir}/{log4j_filename}.template")): - File(format("{component_conf_dir}/{log4j_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=StaticFile(format("{component_conf_dir}/{log4j_filename}.template")) - ) - pass # if params.log4j_version == '1' - - -def jdbc_connector(target, hive_previous_jdbc_jar): - """ - Shared by Hive Batch, Hive Metastore, and Hive Interactive - :param target: Target of jdbc jar name, which could be for any of the components above. - """ - import params - - if not params.jdbc_jar_name: - return - - if params.hive_jdbc_driver in params.hive_jdbc_drivers_list and params.hive_use_existing_db: - environment = { - "no_proxy": format("{ambari_server_hostname}") - } - - if hive_previous_jdbc_jar and os.path.isfile(hive_previous_jdbc_jar): - File(hive_previous_jdbc_jar, action='delete') - - # TODO: should be removed after ranger_hive_plugin will not provide jdbc - if params.prepackaged_jdbc_name != params.jdbc_jar_name: - Execute(('rm', '-f', params.prepackaged_ojdbc_symlink), - path=["/bin", "/usr/bin/"], - sudo = True) - - File(params.downloaded_custom_connector, - content = DownloadSource(params.driver_curl_source)) - - # maybe it will be more correcvly to use db type - if params.sqla_db_used: - untar_sqla_type2_driver = ('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir) - - Execute(untar_sqla_type2_driver, sudo = True) - - Execute(format("yes | {sudo} cp {jars_path_in_archive} {hive_lib}")) - - Directory(params.jdbc_libs_dir, - create_parents = True) - - Execute(format("yes | {sudo} cp {libs_path_in_archive} {jdbc_libs_dir}")) - - Execute(format("{sudo} chown -R {hive_user}:{user_group} {hive_lib}/*")) - - else: - Execute(('cp', '--remove-destination', params.downloaded_custom_connector, target), - #creates=target, TODO: uncomment after ranger_hive_plugin will not provide jdbc - path=["/bin", "/usr/bin/"], - sudo = True) - - else: - #for default hive db (Mysql) - Execute(('cp', '--remove-destination', format('/usr/share/java/{jdbc_jar_name}'), target), - #creates=target, TODO: uncomment after ranger_hive_plugin will not provide jdbc - path=["/bin", "/usr/bin/"], - sudo=True - ) - pass - - File(target, - mode = 0644, - ) http://git-wip-us.apache.org/repos/asf/bigtop/blob/0d3448b8/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_client.py ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_client.py b/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_client.py deleted file mode 100755 index 3d9bfd7..0000000 --- a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_client.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python -""" -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -""" -import sys -from resource_management import * -from resource_management.libraries.functions import conf_select -from resource_management.libraries.functions import stack_select -from resource_management.libraries.functions import StackFeature -from resource_management.libraries.functions.stack_features import check_stack_feature -from hive import hive -from ambari_commons.os_family_impl import OsFamilyImpl -from ambari_commons import OSConst -from resource_management.core.exceptions import ClientComponentHasNoStatus - -class HiveClient(Script): - def install(self, env): - import params - self.install_packages(env) - self.configure(env) - - def status(self, env): - raise ClientComponentHasNoStatus() - - def configure(self, env): - import params - env.set_params(params) - hive(name='client') - - -@OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY) -class HiveClientWindows(HiveClient): - pass - - -@OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT) -class HiveClientDefault(HiveClient): - def get_component_name(self): - return "hadoop-client" - - def pre_upgrade_restart(self, env, upgrade_type=None): - Logger.info("Executing Hive client Stack Upgrade pre-restart") - - import params - env.set_params(params) - if params.version and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.version): - conf_select.select(params.stack_name, "hive", params.version) - conf_select.select(params.stack_name, "hadoop", params.version) - stack_select.select("hadoop-client", params.version) - - -if __name__ == "__main__": - HiveClient().execute() http://git-wip-us.apache.org/repos/asf/bigtop/blob/0d3448b8/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_interactive.py ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_interactive.py b/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_interactive.py deleted file mode 100755 index 74c67fc..0000000 --- a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_interactive.py +++ /dev/null @@ -1,302 +0,0 @@ -#!/usr/bin/env python -""" -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -""" - -# Python Imports -import os -import glob -from urlparse import urlparse - -# Resource Management and Common Imports -from resource_management.libraries.script.script import Script -from resource_management.libraries.resources.hdfs_resource import HdfsResource -from resource_management.libraries.functions.copy_tarball import copy_to_hdfs -from resource_management.libraries.functions import StackFeature -from resource_management.libraries.functions.stack_features import check_stack_feature -from resource_management.libraries.functions.version import compare_versions -from resource_management.core.resources.service import ServiceConfig -from resource_management.core.resources.system import File, Execute, Directory -from resource_management.core.source import StaticFile, Template, DownloadSource, InlineTemplate -from resource_management.core.shell import as_user -from resource_management.libraries.functions.is_empty import is_empty -from resource_management.libraries.resources.xml_config import XmlConfig -from resource_management.libraries.functions.format import format -from resource_management.core.exceptions import Fail -from resource_management.core.shell import as_sudo -from resource_management.core.shell import quote_bash_args -from resource_management.core.logger import Logger -from resource_management.core import utils - -from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl -from ambari_commons import OSConst -from hive import fill_conf_dir, jdbc_connector - - -@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY) -def hive_interactive(name=None): - pass - -""" -Sets up the configs, jdbc connection and tarball copy to HDFS for Hive Server Interactive. -""" -@OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT) -def hive_interactive(name=None): - import params - - # list of properties that should be excluded from the config - # this approach is a compromise against adding a dedicated config - # type for hive_server_interactive or needed config groups on a - # per component basis - exclude_list = ['hive.enforce.bucketing', - 'hive.enforce.sorting'] - - # List of configs to be excluded from hive2 client, but present in Hive2 server. - exclude_list_for_hive2_client = ['javax.jdo.option.ConnectionPassword'] - - # Copy Tarballs in HDFS. - if params.stack_version_formatted_major and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.stack_version_formatted_major): - resource_created = copy_to_hdfs("tez_hive2", - params.user_group, - params.hdfs_user, - file_mode=params.tarballs_mode, - host_sys_prepped=params.host_sys_prepped) - - if resource_created: - params.HdfsResource(None, action="execute") - - Directory(params.hive_interactive_etc_dir_prefix, - mode=0755 - ) - - Logger.info("Directories to fill with configs: %s" % str(params.hive_conf_dirs_list)) - for conf_dir in params.hive_conf_dirs_list: - fill_conf_dir(conf_dir) - - ''' - As hive2/hive-site.xml only contains the new + the changed props compared to hive/hive-site.xml, - we need to merge hive/hive-site.xml and hive2/hive-site.xml and store it in hive2/hive-site.xml. - ''' - merged_hive_interactive_site = {} - merged_hive_interactive_site.update(params.config['configurations']['hive-site']) - merged_hive_interactive_site.update(params.config['configurations']['hive-interactive-site']) - for item in exclude_list: - if item in merged_hive_interactive_site.keys(): - del merged_hive_interactive_site[item] - - ''' - Hive2 doesn't have support for Atlas, we need to remove the Hook 'org.apache.atlas.hive.hook.HiveHook', - which would have come in config 'hive.exec.post.hooks' during the site merge logic, if Atlas is installed. - ''' - remove_atlas_hook_if_exists(merged_hive_interactive_site) - - ''' - As tez_hive2/tez-site.xml only contains the new + the changed props compared to tez/tez-site.xml, - we need to merge tez/tez-site.xml and tez_hive2/tez-site.xml and store it in tez_hive2/tez-site.xml. - ''' - merged_tez_interactive_site = {} - if 'tez-site' in params.config['configurations']: - merged_tez_interactive_site.update(params.config['configurations']['tez-site']) - Logger.info("Retrieved 'tez/tez-site' for merging with 'tez_hive2/tez-interactive-site'.") - else: - Logger.error("Tez's 'tez-site' couldn't be retrieved from passed-in configurations.") - - merged_tez_interactive_site.update(params.config['configurations']['tez-interactive-site']) - XmlConfig("tez-site.xml", - conf_dir = params.tez_interactive_config_dir, - configurations = merged_tez_interactive_site, - configuration_attributes=params.config['configuration_attributes']['tez-interactive-site'], - owner = params.tez_interactive_user, - group = params.user_group, - mode = 0664) - - ''' - Merge properties from hiveserver2-interactive-site into hiveserver2-site - ''' - merged_hiveserver2_interactive_site = {} - if 'hiveserver2-site' in params.config['configurations']: - merged_hiveserver2_interactive_site.update(params.config['configurations']['hiveserver2-site']) - Logger.info("Retrieved 'hiveserver2-site' for merging with 'hiveserver2-interactive-site'.") - else: - Logger.error("'hiveserver2-site' couldn't be retrieved from passed-in configurations.") - merged_hiveserver2_interactive_site.update(params.config['configurations']['hiveserver2-interactive-site']) - - - # Create config files under /etc/hive2/conf and /etc/hive2/conf/conf.server: - # hive-site.xml - # hive-env.sh - # llap-daemon-log4j2.properties - # llap-cli-log4j2.properties - # hive-log4j2.properties - # hive-exec-log4j2.properties - # beeline-log4j2.properties - - hive2_conf_dirs_list = params.hive_conf_dirs_list - hive2_client_conf_path = format("{stack_root}/current/{component_directory}/conf") - - # Making copy of 'merged_hive_interactive_site' in 'merged_hive_interactive_site_copy', and deleting 'javax.jdo.option.ConnectionPassword' - # config from there, as Hive2 client shouldn't have that config. - merged_hive_interactive_site_copy = merged_hive_interactive_site.copy() - for item in exclude_list_for_hive2_client: - if item in merged_hive_interactive_site.keys(): - del merged_hive_interactive_site_copy[item] - - for conf_dir in hive2_conf_dirs_list: - if conf_dir == hive2_client_conf_path: - XmlConfig("hive-site.xml", - conf_dir=conf_dir, - configurations=merged_hive_interactive_site_copy, - configuration_attributes=params.config['configuration_attributes']['hive-interactive-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - else: - XmlConfig("hive-site.xml", - conf_dir=conf_dir, - configurations=merged_hive_interactive_site, - configuration_attributes=params.config['configuration_attributes']['hive-interactive-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - - XmlConfig("hiveserver2-site.xml", - conf_dir=conf_dir, - configurations=merged_hiveserver2_interactive_site, - configuration_attributes=params.config['configuration_attributes']['hiveserver2-interactive-site'], - owner=params.hive_user, - group=params.user_group, - mode=0644) - - hive_server_interactive_conf_dir = conf_dir - - File(format("{hive_server_interactive_conf_dir}/hive-env.sh"), - owner=params.hive_user, - group=params.user_group, - content=InlineTemplate(params.hive_interactive_env_sh_template)) - - llap_daemon_log4j_filename = 'llap-daemon-log4j2.properties' - File(format("{hive_server_interactive_conf_dir}/{llap_daemon_log4j_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.llap_daemon_log4j) - - llap_cli_log4j2_filename = 'llap-cli-log4j2.properties' - File(format("{hive_server_interactive_conf_dir}/{llap_cli_log4j2_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.llap_cli_log4j2) - - hive_log4j2_filename = 'hive-log4j2.properties' - File(format("{hive_server_interactive_conf_dir}/{hive_log4j2_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.hive_log4j2) - - hive_exec_log4j2_filename = 'hive-exec-log4j2.properties' - File(format("{hive_server_interactive_conf_dir}/{hive_exec_log4j2_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.hive_exec_log4j2) - - beeline_log4j2_filename = 'beeline-log4j2.properties' - File(format("{hive_server_interactive_conf_dir}/{beeline_log4j2_filename}"), - mode=0644, - group=params.user_group, - owner=params.hive_user, - content=params.beeline_log4j2) - - File(os.path.join(hive_server_interactive_conf_dir, "hadoop-metrics2-hiveserver2.properties"), - owner=params.hive_user, - group=params.user_group, - content=Template("hadoop-metrics2-hiveserver2.properties.j2") - ) - - File(format("{hive_server_interactive_conf_dir}/hadoop-metrics2-llapdaemon.properties"), - owner=params.hive_user, - group=params.user_group, - content=Template("hadoop-metrics2-llapdaemon.j2")) - - File(format("{hive_server_interactive_conf_dir}/hadoop-metrics2-llaptaskscheduler.properties"), - owner=params.hive_user, - group=params.user_group, - content=Template("hadoop-metrics2-llaptaskscheduler.j2")) - - - # On some OS this folder could be not exists, so we will create it before pushing there files - Directory(params.limits_conf_dir, - create_parents = True, - owner='root', - group='root') - - File(os.path.join(params.limits_conf_dir, 'hive.conf'), - owner='root', - group='root', - mode=0644, - content=Template("hive.conf.j2")) - - if not os.path.exists(params.target_hive_interactive): - jdbc_connector(params.target_hive_interactive, params.hive_intaractive_previous_jdbc_jar) - - File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"), - content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")), - mode = 0644) - File(params.start_hiveserver2_interactive_path, - mode=0755, - content=Template(format('{start_hiveserver2_interactive_script}'))) - - Directory(params.hive_pid_dir, - create_parents=True, - cd_access='a', - owner=params.hive_user, - group=params.user_group, - mode=0755) - Directory(params.hive_log_dir, - create_parents=True, - cd_access='a', - owner=params.hive_user, - group=params.user_group, - mode=0755) - Directory(params.hive_interactive_var_lib, - create_parents=True, - cd_access='a', - owner=params.hive_user, - group=params.user_group, - mode=0755) - -""" -Remove 'org.apache.atlas.hive.hook.HiveHook' value from Hive2/hive-site.xml config 'hive.exec.post.hooks', if exists. -""" -def remove_atlas_hook_if_exists(merged_hive_interactive_site): - if 'hive.exec.post.hooks' in merged_hive_interactive_site.keys(): - existing_hive_exec_post_hooks = merged_hive_interactive_site.get('hive.exec.post.hooks') - if existing_hive_exec_post_hooks: - hook_splits = existing_hive_exec_post_hooks.split(",") - updated_hook_splits = [hook for hook in hook_splits if not hook.strip() == 'org.apache.atlas.hive.hook.HiveHook'] - updated_hooks_str = ",".join((str(hook)).strip() for hook in updated_hook_splits) - if updated_hooks_str != existing_hive_exec_post_hooks: - merged_hive_interactive_site['hive.exec.post.hooks'] = updated_hooks_str - Logger.info("Updated Hive2/hive-site.xml 'hive.exec.post.hooks' value from : '{0}' to : '{1}'" - .format(existing_hive_exec_post_hooks, updated_hooks_str)) - else: - Logger.info("No change done to Hive2/hive-site.xml 'hive.exec.post.hooks' value.") - else: - Logger.debug("'hive.exec.post.hooks' doesn't exist in Hive2/hive-site.xml") http://git-wip-us.apache.org/repos/asf/bigtop/blob/0d3448b8/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_metastore.py ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_metastore.py b/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_metastore.py deleted file mode 100755 index 17bf581..0000000 --- a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_metastore.py +++ /dev/null @@ -1,259 +0,0 @@ -#!/usr/bin/env python -""" -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -""" -import os - -from resource_management.core.logger import Logger -from resource_management.core.resources.system import Execute, Directory -from resource_management.libraries.script import Script -from resource_management.libraries.functions import conf_select -from resource_management.libraries.functions import stack_select -from resource_management.libraries.functions.constants import Direction -from resource_management.libraries.functions.format import format -from resource_management.libraries.functions.version import format_stack_version -from resource_management.libraries.functions import StackFeature -from resource_management.libraries.functions.stack_features import check_stack_feature -from resource_management.libraries.functions.security_commons import build_expectations -from resource_management.libraries.functions.security_commons import cached_kinit_executor -from resource_management.libraries.functions.security_commons import get_params_from_filesystem -from resource_management.libraries.functions.security_commons import validate_security_config_properties -from resource_management.libraries.functions.security_commons import FILE_TYPE_XML -from resource_management.core.resources.system import File - -from hive import hive -from hive import jdbc_connector -from hive_service import hive_service -from ambari_commons.os_family_impl import OsFamilyImpl -from ambari_commons import OSConst - -# the legacy conf.server location in previous stack versions -LEGACY_HIVE_SERVER_CONF = "/etc/hive/conf.server" - -class HiveMetastore(Script): - def install(self, env): - import params - self.install_packages(env) - - - def start(self, env, upgrade_type=None): - import params - env.set_params(params) - - # writing configurations on start required for securtity - self.configure(env) - - hive_service('metastore', action='start', upgrade_type=upgrade_type) - - - def stop(self, env, upgrade_type=None): - import params - env.set_params(params) - hive_service('metastore', action='stop', upgrade_type=upgrade_type) - - - def configure(self, env): - import params - env.set_params(params) - hive(name = 'metastore') - - -@OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY) -class HiveMetastoreWindows(HiveMetastore): - def status(self, env): - import status_params - from resource_management.libraries.functions import check_windows_service_status - check_windows_service_status(status_params.hive_metastore_win_service_name) - - -@OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT) -class HiveMetastoreDefault(HiveMetastore): - def get_component_name(self): - return "hive-metastore" - - - def status(self, env): - import status_params - from resource_management.libraries.functions import check_process_status - - env.set_params(status_params) - pid_file = format("{hive_pid_dir}/{hive_metastore_pid}") - # Recursively check all existing gmetad pid files - check_process_status(pid_file) - - - def pre_upgrade_restart(self, env, upgrade_type=None): - Logger.info("Executing Metastore Stack Upgrade pre-restart") - import params - - env.set_params(params) - - is_upgrade = params.upgrade_direction == Direction.UPGRADE - - if params.version and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.version): - conf_select.select(params.stack_name, "hive", params.version) - stack_select.select("hive-metastore", params.version) - - if is_upgrade and params.stack_version_formatted_major and \ - check_stack_feature(StackFeature.HIVE_METASTORE_UPGRADE_SCHEMA, params.stack_version_formatted_major): - self.upgrade_schema(env) - - - def security_status(self, env): - import status_params - env.set_params(status_params) - if status_params.security_enabled: - props_value_check = {"hive.server2.authentication": "KERBEROS", - "hive.metastore.sasl.enabled": "true", - "hive.security.authorization.enabled": "true"} - props_empty_check = ["hive.metastore.kerberos.keytab.file", - "hive.metastore.kerberos.principal"] - - props_read_check = ["hive.metastore.kerberos.keytab.file"] - hive_site_props = build_expectations('hive-site', props_value_check, props_empty_check, - props_read_check) - - hive_expectations ={} - hive_expectations.update(hive_site_props) - - security_params = get_params_from_filesystem(status_params.hive_conf_dir, - {'hive-site.xml': FILE_TYPE_XML}) - result_issues = validate_security_config_properties(security_params, hive_expectations) - if not result_issues: # If all validations passed successfully - try: - # Double check the dict before calling execute - if 'hive-site' not in security_params \ - or 'hive.metastore.kerberos.keytab.file' not in security_params['hive-site'] \ - or 'hive.metastore.kerberos.principal' not in security_params['hive-site']: - self.put_structured_out({"securityState": "UNSECURED"}) - self.put_structured_out({"securityIssuesFound": "Keytab file or principal are not set property."}) - return - - cached_kinit_executor(status_params.kinit_path_local, - status_params.hive_user, - security_params['hive-site']['hive.metastore.kerberos.keytab.file'], - security_params['hive-site']['hive.metastore.kerberos.principal'], - status_params.hostname, - status_params.tmp_dir) - - self.put_structured_out({"securityState": "SECURED_KERBEROS"}) - except Exception as e: - self.put_structured_out({"securityState": "ERROR"}) - self.put_structured_out({"securityStateErrorInfo": str(e)}) - else: - issues = [] - for cf in result_issues: - issues.append("Configuration file %s did not pass the validation. Reason: %s" % (cf, result_issues[cf])) - self.put_structured_out({"securityIssuesFound": ". ".join(issues)}) - self.put_structured_out({"securityState": "UNSECURED"}) - else: - self.put_structured_out({"securityState": "UNSECURED"}) - - - def upgrade_schema(self, env): - """ - Executes the schema upgrade binary. This is its own function because it could - be called as a standalone task from the upgrade pack, but is safe to run it for each - metastore instance. The schema upgrade on an already upgraded metastore is a NOOP. - - The metastore schema upgrade requires a database driver library for most - databases. During an upgrade, it's possible that the library is not present, - so this will also attempt to copy/download the appropriate driver. - - This function will also ensure that configurations are written out to disk before running - since the new configs will most likely not yet exist on an upgrade. - - Should not be invoked for a DOWNGRADE; Metastore only supports schema upgrades. - """ - Logger.info("Upgrading Hive Metastore Schema") - import status_params - import params - env.set_params(params) - - # ensure that configurations are written out before trying to upgrade the schema - # since the schematool needs configs and doesn't know how to use the hive conf override - self.configure(env) - - if params.security_enabled: - cached_kinit_executor(status_params.kinit_path_local, - status_params.hive_user, - params.hive_metastore_keytab_path, - params.hive_metastore_principal, - status_params.hostname, - status_params.tmp_dir) - - # ensure that the JDBC drive is present for the schema tool; if it's not - # present, then download it first - if params.hive_jdbc_driver in params.hive_jdbc_drivers_list: - target_directory = format("{stack_root}/{version}/hive/lib") - - # download it if it does not exist - if not os.path.exists(params.source_jdbc_file): - jdbc_connector(params.hive_jdbc_target, params.hive_previous_jdbc_jar) - - target_directory_and_filename = os.path.join(target_directory, os.path.basename(params.source_jdbc_file)) - - if params.sqla_db_used: - target_native_libs_directory = format("{target_directory}/native/lib64") - - Execute(format("yes | {sudo} cp {jars_in_hive_lib} {target_directory}")) - - Directory(target_native_libs_directory, create_parents = True) - - Execute(format("yes | {sudo} cp {libs_in_hive_lib} {target_native_libs_directory}")) - - Execute(format("{sudo} chown -R {hive_user}:{user_group} {hive_lib}/*")) - else: - # copy the JDBC driver from the older metastore location to the new location only - # if it does not already exist - if not os.path.exists(target_directory_and_filename): - Execute(('cp', params.source_jdbc_file, target_directory), - path=["/bin", "/usr/bin/"], sudo = True) - - File(target_directory_and_filename, mode = 0644) - - # build the schema tool command - binary = format("{hive_schematool_ver_bin}/schematool") - - # the conf.server directory changed locations between stack versions - # since the configurations have not been written out yet during an upgrade - # we need to choose the original legacy location - schematool_hive_server_conf_dir = params.hive_server_conf_dir - if params.current_version is not None: - current_version = format_stack_version(params.current_version) - if not(check_stack_feature(StackFeature.CONFIG_VERSIONING, current_version)): - schematool_hive_server_conf_dir = LEGACY_HIVE_SERVER_CONF - - env_dict = { - 'HIVE_CONF_DIR': schematool_hive_server_conf_dir - } - - command = format("{binary} -dbType {hive_metastore_db_type} -upgradeSchema") - Execute(command, user=params.hive_user, tries=1, environment=env_dict, logoutput=True) - - def get_log_folder(self): - import params - return params.hive_log_dir - - def get_user(self): - import params - return params.hive_user - - -if __name__ == "__main__": - HiveMetastore().execute() http://git-wip-us.apache.org/repos/asf/bigtop/blob/0d3448b8/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server.py ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server.py b/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server.py deleted file mode 100755 index 31b083b..0000000 --- a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server.py +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env python -""" -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -""" - - -from resource_management.libraries.script.script import Script -from resource_management.libraries.resources.hdfs_resource import HdfsResource -from resource_management.libraries.functions import conf_select -from resource_management.libraries.functions import stack_select -from resource_management.libraries.functions import format -from resource_management.libraries.functions.copy_tarball import copy_to_hdfs -from resource_management.libraries.functions.get_stack_version import get_stack_version -from resource_management.libraries.functions.check_process_status import check_process_status -from resource_management.libraries.functions import StackFeature -from resource_management.libraries.functions.stack_features import check_stack_feature -from resource_management.libraries.functions.security_commons import build_expectations, \ - cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \ - FILE_TYPE_XML -from ambari_commons import OSCheck, OSConst -if OSCheck.is_windows_family(): - from resource_management.libraries.functions.windows_service_utils import check_windows_service_status -from setup_ranger_hive import setup_ranger_hive -from ambari_commons.os_family_impl import OsFamilyImpl -from ambari_commons.constants import UPGRADE_TYPE_ROLLING -from resource_management.core.logger import Logger - -import hive_server_upgrade -from hive import hive -from hive_service import hive_service - - -class HiveServer(Script): - def install(self, env): - import params - self.install_packages(env) - - def configure(self, env): - import params - env.set_params(params) - hive(name='hiveserver2') - - -@OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY) -class HiveServerWindows(HiveServer): - def start(self, env): - import params - env.set_params(params) - self.configure(env) # FOR SECURITY - hive_service('hiveserver2', action='start') - - def stop(self, env): - import params - env.set_params(params) - hive_service('hiveserver2', action='stop') - - def status(self, env): - import status_params - check_windows_service_status(status_params.hive_server_win_service_name) - - -@OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT) -class HiveServerDefault(HiveServer): - def get_component_name(self): - return "hive-server2" - - def start(self, env, upgrade_type=None): - import params - env.set_params(params) - self.configure(env) # FOR SECURITY - - setup_ranger_hive(upgrade_type=upgrade_type) - hive_service('hiveserver2', action = 'start', upgrade_type=upgrade_type) - - # only perform this if upgrading and rolling; a non-rolling upgrade doesn't need - # to do this since hive is already down - if upgrade_type == UPGRADE_TYPE_ROLLING: - hive_server_upgrade.post_upgrade_deregister() - - - def stop(self, env, upgrade_type=None): - import params - env.set_params(params) - - # During rolling upgrade, HiveServer2 should not be stopped before new server is available. - # Once new server is started, old one is stopped by the --deregister command which is - # invoked by the 'hive_server_upgrade.post_upgrade_deregister()' method - if upgrade_type != UPGRADE_TYPE_ROLLING: - hive_service( 'hiveserver2', action = 'stop' ) - - - def status(self, env): - import status_params - env.set_params(status_params) - pid_file = format("{hive_pid_dir}/{hive_pid}") - - # Recursively check all existing gmetad pid files - check_process_status(pid_file) - - - def pre_upgrade_restart(self, env, upgrade_type=None): - Logger.info("Executing Hive Server Stack Upgrade pre-restart") - import params - env.set_params(params) - - if params.version and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.version): - conf_select.select(params.stack_name, "hive", params.version) - stack_select.select("hive-server2", params.version) - - # Copy mapreduce.tar.gz and tez.tar.gz to HDFS - resource_created = copy_to_hdfs( - "mapreduce", - params.user_group, - params.hdfs_user, - host_sys_prepped=params.host_sys_prepped) - - resource_created = copy_to_hdfs( - "tez", - params.user_group, - params.hdfs_user, - host_sys_prepped=params.host_sys_prepped) or resource_created - - if resource_created: - params.HdfsResource(None, action="execute") - - - def security_status(self, env): - import status_params - env.set_params(status_params) - if status_params.security_enabled: - props_value_check = {"hive.server2.authentication": "KERBEROS", - "hive.metastore.sasl.enabled": "true", - "hive.security.authorization.enabled": "true"} - props_empty_check = ["hive.server2.authentication.kerberos.keytab", - "hive.server2.authentication.kerberos.principal", - "hive.server2.authentication.spnego.principal", - "hive.server2.authentication.spnego.keytab"] - - props_read_check = ["hive.server2.authentication.kerberos.keytab", - "hive.server2.authentication.spnego.keytab"] - hive_site_props = build_expectations('hive-site', props_value_check, props_empty_check, - props_read_check) - - hive_expectations ={} - hive_expectations.update(hive_site_props) - - security_params = get_params_from_filesystem(status_params.hive_conf_dir, - {'hive-site.xml': FILE_TYPE_XML}) - result_issues = validate_security_config_properties(security_params, hive_expectations) - if not result_issues: # If all validations passed successfully - try: - # Double check the dict before calling execute - if 'hive-site' not in security_params \ - or 'hive.server2.authentication.kerberos.keytab' not in security_params['hive-site'] \ - or 'hive.server2.authentication.kerberos.principal' not in security_params['hive-site'] \ - or 'hive.server2.authentication.spnego.keytab' not in security_params['hive-site'] \ - or 'hive.server2.authentication.spnego.principal' not in security_params['hive-site']: - self.put_structured_out({"securityState": "UNSECURED"}) - self.put_structured_out({"securityIssuesFound": "Keytab file or principal are not set property."}) - return - - cached_kinit_executor(status_params.kinit_path_local, - status_params.hive_user, - security_params['hive-site']['hive.server2.authentication.kerberos.keytab'], - security_params['hive-site']['hive.server2.authentication.kerberos.principal'], - status_params.hostname, - status_params.tmp_dir) - cached_kinit_executor(status_params.kinit_path_local, - status_params.hive_user, - security_params['hive-site']['hive.server2.authentication.spnego.keytab'], - security_params['hive-site']['hive.server2.authentication.spnego.principal'], - status_params.hostname, - status_params.tmp_dir) - self.put_structured_out({"securityState": "SECURED_KERBEROS"}) - except Exception as e: - self.put_structured_out({"securityState": "ERROR"}) - self.put_structured_out({"securityStateErrorInfo": str(e)}) - else: - issues = [] - for cf in result_issues: - issues.append("Configuration file %s did not pass the validation. Reason: %s" % (cf, result_issues[cf])) - self.put_structured_out({"securityIssuesFound": ". ".join(issues)}) - self.put_structured_out({"securityState": "UNSECURED"}) - else: - self.put_structured_out({"securityState": "UNSECURED"}) - - def get_log_folder(self): - import params - return params.hive_log_dir - - def get_user(self): - import params - return params.hive_user - -if __name__ == "__main__": - HiveServer().execute() http://git-wip-us.apache.org/repos/asf/bigtop/blob/0d3448b8/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server_interactive.py ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server_interactive.py b/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server_interactive.py deleted file mode 100755 index 2df001c..0000000 --- a/bigtop-packages/src/common/ambari/ODPi/1.0/services/HIVE/package/scripts/hive_server_interactive.py +++ /dev/null @@ -1,535 +0,0 @@ -#!/usr/bin/env python -""" -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -""" -# Python Imports -import subprocess -import os -import re -import time -import shutil -from datetime import datetime -import json - -# Ambari Commons & Resource Management imports -from resource_management.libraries.script.script import Script -from resource_management.libraries.functions import format -from resource_management.libraries.functions.check_process_status import check_process_status -from resource_management.core.source import InlineTemplate -from resource_management.core.resources.system import Execute - -# Imports needed for Rolling/Express Upgrade -from resource_management.libraries.functions import StackFeature -from resource_management.libraries.functions.stack_features import check_stack_feature -from resource_management.libraries.functions import conf_select -from resource_management.libraries.functions import stack_select -from resource_management.libraries.functions.copy_tarball import copy_to_hdfs - -from resource_management.core import shell -from resource_management.core.exceptions import Fail -from resource_management.core.logger import Logger -from ambari_commons import OSCheck, OSConst -from ambari_commons.os_family_impl import OsFamilyImpl - -from resource_management.core.exceptions import ComponentIsNotRunning -from resource_management.libraries.functions.decorator import retry -from resource_management.libraries.functions.security_commons import build_expectations, \ - cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \ - FILE_TYPE_XML - -# Local Imports -from setup_ranger_hive import setup_ranger_hive -from hive_service_interactive import hive_service_interactive -from hive_interactive import hive_interactive -from hive_server import HiveServerDefault -from setup_ranger_hive_interactive import setup_ranger_hive_interactive - -import traceback - -class HiveServerInteractive(Script): - pass - - -@OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT) -class HiveServerInteractiveDefault(HiveServerInteractive): - - def get_component_name(self): - return "hive-server2-hive2" - - def install(self, env): - import params - self.install_packages(env) - - def configure(self, env): - import params - env.set_params(params) - hive_interactive(name='hiveserver2') - - def pre_upgrade_restart(self, env, upgrade_type=None): - Logger.info("Executing Hive Server Interactive Stack Upgrade pre-restart") - import params - env.set_params(params) - - if params.version and check_stack_feature(StackFeature.ROLLING_UPGRADE, params.version): - stack_select.select("hive-server2-hive2", params.version) - conf_select.select(params.stack_name, "hive2", params.version) - - # Copy hive.tar.gz and tez.tar.gz used by Hive Interactive to HDFS - resource_created = copy_to_hdfs( - "hive2", - params.user_group, - params.hdfs_user, - host_sys_prepped=params.host_sys_prepped) - - resource_created = copy_to_hdfs( - "tez_hive2", - params.user_group, - params.hdfs_user, - host_sys_prepped=params.host_sys_prepped) or resource_created - - if resource_created: - params.HdfsResource(None, action="execute") - - def start(self, env, upgrade_type=None): - import params - env.set_params(params) - self.configure(env) - - if params.security_enabled: - # Do the security setup, internally calls do_kinit() - self.setup_security() - - # TODO : We need have conditional [re]start of LLAP once "status check command" for LLAP is ready. - # Check status and based on that decide on [re]starting. - - # Start LLAP before Hive Server Interactive start. - status = self._llap_start(env) - if not status: - raise Fail("Skipping START of Hive Server Interactive since LLAP app couldn't be STARTED.") - - # TODO : test the workability of Ranger and Hive2 during upgrade - setup_ranger_hive_interactive(upgrade_type=upgrade_type) - hive_service_interactive('hiveserver2', action='start', upgrade_type=upgrade_type) - - - def stop(self, env, upgrade_type=None): - import params - env.set_params(params) - - if params.security_enabled: - self.do_kinit() - - # Stop Hive Interactive Server first - hive_service_interactive('hiveserver2', action='stop') - - self._llap_stop(env) - - def status(self, env): - import status_params - env.set_params(status_params) - - # We are not doing 'llap' status check done here as part of status check for 'HSI', as 'llap' status - # check is a heavy weight operation. - - pid_file = format("{hive_pid_dir}/{hive_interactive_pid}") - # Recursively check all existing gmetad pid files - check_process_status(pid_file) - - def security_status(self, env): - import status_params - env.set_params(status_params) - - if status_params.security_enabled: - props_value_check = {"hive.server2.authentication": "KERBEROS", - "hive.metastore.sasl.enabled": "true", - "hive.security.authorization.enabled": "true"} - props_empty_check = ["hive.server2.authentication.kerberos.keytab", - "hive.server2.authentication.kerberos.principal", - "hive.server2.authentication.spnego.principal", - "hive.server2.authentication.spnego.keytab"] - - props_read_check = ["hive.server2.authentication.kerberos.keytab", - "hive.server2.authentication.spnego.keytab"] - hive_site_props = build_expectations('hive-site', props_value_check, props_empty_check, - props_read_check) - - hive_expectations ={} - hive_expectations.update(hive_site_props) - - security_params = get_params_from_filesystem(status_params.hive_server_interactive_conf_dir, - {'hive-site.xml': FILE_TYPE_XML}) - result_issues = validate_security_config_properties(security_params, hive_expectations) - if not result_issues: # If all validations passed successfully - try: - # Double check the dict before calling execute - if 'hive-site' not in security_params \ - or 'hive.server2.authentication.kerberos.keytab' not in security_params['hive-site'] \ - or 'hive.server2.authentication.kerberos.principal' not in security_params['hive-site'] \ - or 'hive.server2.authentication.spnego.keytab' not in security_params['hive-site'] \ - or 'hive.server2.authentication.spnego.principal' not in security_params['hive-site']: - self.put_structured_out({"securityState": "UNSECURED"}) - self.put_structured_out({"securityIssuesFound": "Keytab file or principal are not set property."}) - return - - cached_kinit_executor(status_params.kinit_path_local, - status_params.hive_user, - security_params['hive-site']['hive.server2.authentication.kerberos.keytab'], - security_params['hive-site']['hive.server2.authentication.kerberos.principal'], - status_params.hostname, - status_params.tmp_dir) - cached_kinit_executor(status_params.kinit_path_local, - status_params.hive_user, - security_params['hive-site']['hive.server2.authentication.spnego.keytab'], - security_params['hive-site']['hive.server2.authentication.spnego.principal'], - status_params.hostname, - status_params.tmp_dir) - self.put_structured_out({"securityState": "SECURED_KERBEROS"}) - except Exception as e: - self.put_structured_out({"securityState": "ERROR"}) - self.put_structured_out({"securityStateErrorInfo": str(e)}) - else: - issues = [] - for cf in result_issues: - issues.append("Configuration file %s did not pass the validation. Reason: %s" % (cf, result_issues[cf])) - self.put_structured_out({"securityIssuesFound": ". ".join(issues)}) - self.put_structured_out({"securityState": "UNSECURED"}) - else: - self.put_structured_out({"securityState": "UNSECURED"}) - - def restart_llap(self, env): - """ - Custom command to Restart LLAP - """ - Logger.info("Custom Command to retart LLAP") - import params - env.set_params(params) - - if params.security_enabled: - self.do_kinit() - - self._llap_stop(env) - self._llap_start(env) - - def _llap_stop(self, env): - import params - Logger.info("Stopping LLAP") - SLIDER_APP_NAME = "llap0" - - stop_cmd = ["slider", "stop", SLIDER_APP_NAME] - - code, output, error = shell.call(stop_cmd, user=params.hive_user, stderr=subprocess.PIPE, logoutput=True) - if code == 0: - Logger.info(format("Stopped {SLIDER_APP_NAME} application on Slider successfully")) - elif code == 69 and output is not None and "Unknown application instance" in output: - Logger.info(format("Application {SLIDER_APP_NAME} was already stopped on Slider")) - else: - raise Fail(format("Could not stop application {SLIDER_APP_NAME} on Slider. {error}\n{output}")) - - # Will exit with code 4 if need to run with "--force" to delete directories and registries. - Execute(('slider', 'destroy', SLIDER_APP_NAME, "--force"), - user=params.hive_user, - timeout=30, - ignore_failures=True, - ) - - """ - Controls the start of LLAP. - """ - def _llap_start(self, env, cleanup=False): - import params - env.set_params(params) - Logger.info("Starting LLAP") - LLAP_PACKAGE_CREATION_PATH = Script.get_tmp_dir() - LLAP_APP_NAME = 'llap0' - - unique_name = "llap-slider%s" % datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S') - - cmd = format("{stack_root}/current/hive-server2-hive2/bin/hive --service llap --instances {params.num_llap_nodes}" - " --slider-am-container-mb {params.slider_am_container_mb} --size {params.llap_daemon_container_size}m " - " --cache {params.hive_llap_io_mem_size}m --xmx {params.llap_heap_size}m --loglevel {params.llap_log_level}" - " --output {LLAP_PACKAGE_CREATION_PATH}/{unique_name}") - if params.security_enabled: - llap_keytab_splits = params.hive_llap_keytab_file.split("/") - Logger.debug("llap_keytab_splits : {0}".format(llap_keytab_splits)) - cmd += format(" --slider-keytab-dir .slider/keytabs/{params.hive_user}/ --slider-keytab " - "{llap_keytab_splits[4]} --slider-principal {params.hive_llap_principal}") - - # Append args. - llap_java_args = InlineTemplate(params.llap_app_java_opts).get_content() - cmd += format(" --args \" {llap_java_args}\"") - - run_file_path = None - try: - Logger.info(format("Command: {cmd}")) - code, output, error = shell.checked_call(cmd, user=params.hive_user, stderr=subprocess.PIPE, logoutput=True) - - if code != 0 or output is None: - raise Fail("Command failed with either non-zero return code or no output.") - - # E.g., output: - # Prepared llap-slider-05Apr2016/run.sh for running LLAP on Slider - exp = r"Prepared (.*?run.sh) for running LLAP" - run_file_path = None - out_splits = output.split("\n") - for line in out_splits: - line = line.strip() - m = re.match(exp, line, re.I) - if m and len(m.groups()) == 1: - run_file_name = m.group(1) - run_file_path = os.path.join(params.hive_user_home_dir, run_file_name) - break - if not run_file_path: - raise Fail("Did not find run.sh file in output: " + str(output)) - - Logger.info(format("Run file path: {run_file_path}")) - Execute(run_file_path, user=params.hive_user) - Logger.info("Submitted LLAP app name : {0}".format(LLAP_APP_NAME)) - - # We need to check the status of LLAP app to figure out it got - # launched properly and is in running state. Then go ahead with Hive Interactive Server start. - status = self.check_llap_app_status(LLAP_APP_NAME, params.num_retries_for_checking_llap_status) - if status: - Logger.info("LLAP app '{0}' deployed successfully.".format(LLAP_APP_NAME)) - return True - else: - Logger.error("LLAP app '{0}' deployment unsuccessful.".format(LLAP_APP_NAME)) - return False - except: - # Attempt to clean up the packaged application, or potentially rename it with a .bak - if run_file_path is not None and cleanup: - try: - parent_dir = os.path.dirname(run_file_path) - if os.path.isdir(parent_dir): - shutil.rmtree(parent_dir) - except Exception, e: - Logger.error("Could not cleanup LLAP app package. Error: " + str(e)) - - # throw the original exception - raise - - """ - Does kinit and copies keytab for Hive/LLAP to HDFS. - """ - def setup_security(self): - import params - - self.do_kinit() - - # Copy params.hive_llap_keytab_file to hdfs://:/user//.slider/keytabs/ , required by LLAP - slider_keytab_install_cmd = format("slider install-keytab --keytab {params.hive_llap_keytab_file} --folder {params.hive_user} --overwrite") - Execute(slider_keytab_install_cmd, user=params.hive_user) - - def do_kinit(self): - import params - - hive_interactive_kinit_cmd = format("{kinit_path_local} -kt {params.hive_server2_keytab} {params.hive_principal}; ") - Execute(hive_interactive_kinit_cmd, user=params.hive_user) - - llap_kinit_cmd = format("{kinit_path_local} -kt {params.hive_llap_keytab_file} {params.hive_llap_principal}; ") - Execute(llap_kinit_cmd, user=params.hive_user) - - """ - Get llap app status data. - """ - def _get_llap_app_status_info(self, app_name): - import status_params - LLAP_APP_STATUS_CMD_TIMEOUT = 0 - - llap_status_cmd = format("{stack_root}/current/hive-server2-hive2/bin/hive --service llapstatus --name {app_name} --findAppTimeout {LLAP_APP_STATUS_CMD_TIMEOUT}") - code, output, error = shell.checked_call(llap_status_cmd, user=status_params.hive_user, stderr=subprocess.PIPE, - logoutput=False) - Logger.info("Received 'llapstatus' command 'output' : {0}".format(output)) - return self._make_valid_json(output) - - - """ - Remove extra lines from 'llapstatus' status output (eg: because of MOTD logging) so as to have a valid JSON data to be passed in - to JSON converter. - """ - def _make_valid_json(self, output): - ''' - - Note: It is assumed right now that extra lines will be only at the start and not at the end. - - Sample expected JSON to be passed for 'loads' is either of the form : - - Case 'A': - { - "amInfo" : { - "appName" : "llap0", - "appType" : "org-apache-slider", - "appId" : "APP1", - "containerId" : "container_1466036628595_0010_01_000001", - "hostname" : "hostName", - "amWebUrl" : "http://hostName:port/" - }, - "state" : "LAUNCHING", - .... - "desiredInstances" : 1, - "liveInstances" : 0, - .... - .... - } - - or - - Case 'B': - { - "state" : "APP_NOT_FOUND" - } - - ''' - splits = output.split("\n") - - len_splits = len(splits) - if (len_splits < 3): - raise Fail ("Malformed JSON data received from 'llapstatus' command. Exiting ....") - - marker_idx = None # To detect where from to start reading for JSON data - for idx, split in enumerate(splits): - curr_elem = split.strip() - if idx+2 > len_splits: - raise Fail("Iterated over the received 'llapstatus' comamnd. Couldn't validate the received output for JSON parsing.") - next_elem = (splits[(idx + 1)]).strip() - if curr_elem == "{": - if next_elem == "\"amInfo\" : {" and (splits[len_splits-1]).strip() == '}': - # For Case 'A' - marker_idx = idx - break; - elif idx+3 == len_splits and next_elem.startswith('"state" : ') and (splits[idx + 2]).strip() == '}': - # For Case 'B' - marker_idx = idx - break; - - Logger.info("Marker index for start of JSON data for 'llapsrtatus' comamnd : {0}".format(marker_idx)) - - # Remove extra logging from possible JSON output - if marker_idx is None: - raise Fail("Couldn't validate the received output for JSON parsing.") - else: - if marker_idx != 0: - del splits[0:marker_idx] - Logger.info("Removed lines: '1-{0}' from the received 'llapstatus' output to make it valid for JSON parsing.".format(marker_idx)) - - scanned_output = '\n'.join(splits) - llap_app_info = json.loads(scanned_output) - return llap_app_info - - - """ - Checks llap app status. The states can be : 'COMPLETE', 'APP_NOT_FOUND', 'RUNNING_PARTIAL', 'RUNNING_ALL' & 'LAUNCHING'. - - if app is in 'APP_NOT_FOUND', 'RUNNING_PARTIAL' and 'LAUNCHING' state: - we wait for 'num_times_to_wait' to have app in (1). 'RUNNING_ALL' or (2). 'RUNNING_PARTIAL' - state with 80% or more 'desiredInstances' running and Return True - else : - Return False - - Parameters: llap_app_name : deployed llap app name. - num_retries : Number of retries to check the LLAP app status. - """ - def check_llap_app_status(self, llap_app_name, num_retries): - # counters based on various states. - curr_time = time.time() - - if num_retries <= 0: - num_retries = 2 - if num_retries > 20: - num_retries = 20 - @retry(times=num_retries, sleep_time=2, err_class=Fail) - def do_retries(): - live_instances = 0 - desired_instances = 0 - - percent_desired_instances_to_be_up = 80 # Used in 'RUNNING_PARTIAL' state. - llap_app_info = self._get_llap_app_status_info(llap_app_name) - if llap_app_info is None or 'state' not in llap_app_info: - Logger.error("Malformed JSON data received for LLAP app. Exiting ....") - return False - - if llap_app_info['state'].upper() == 'RUNNING_ALL': - Logger.info( - "LLAP app '{0}' in '{1}' state.".format(llap_app_name, llap_app_info['state'])) - return True - elif llap_app_info['state'].upper() == 'RUNNING_PARTIAL': - # Check how many instances were up. - if 'liveInstances' in llap_app_info and 'desiredInstances' in llap_app_info: - live_instances = llap_app_info['liveInstances'] - desired_instances = llap_app_info['desiredInstances'] - else: - Logger.info( - "LLAP app '{0}' is in '{1}' state, but 'instances' information not available in JSON received. " \ - "Exiting ....".format(llap_app_name, llap_app_info['state'])) - Logger.info(llap_app_info) - return False - if desired_instances == 0: - Logger.info("LLAP app '{0}' desired instance are set to 0. Exiting ....".format(llap_app_name)) - return False - - percentInstancesUp = 0 - if live_instances > 0: - percentInstancesUp = float(live_instances) / desired_instances * 100 - if percentInstancesUp >= percent_desired_instances_to_be_up: - Logger.info("LLAP app '{0}' in '{1}' state. Live Instances : '{2}' >= {3}% of Desired Instances : " \ - "'{4}'.".format(llap_app_name, llap_app_info['state'], - llap_app_info['liveInstances'], - percent_desired_instances_to_be_up, - llap_app_info['desiredInstances'])) - return True - else: - Logger.info("LLAP app '{0}' in '{1}' state. Live Instances : '{2}'. Desired Instances : " \ - "'{3}' after {4} secs.".format(llap_app_name, llap_app_info['state'], - llap_app_info['liveInstances'], - llap_app_info['desiredInstances'], - time.time() - curr_time)) - raise Fail("App state is RUNNING_PARTIAL. Live Instances : '{0}', Desired Instance : '{1}'".format(llap_app_info['liveInstances'], - llap_app_info['desiredInstances'])) - elif llap_app_info['state'].upper() in ['APP_NOT_FOUND', 'LAUNCHING', 'COMPLETE']: - status_str = format("LLAP app '{0}' current state is {1}.".format(llap_app_name, llap_app_info['state'])) - Logger.info(status_str) - raise Fail(status_str) - else: # Covers any unknown that we get. - Logger.info( - "LLAP app '{0}' current state is '{1}'. Expected : 'RUNNING'.".format(llap_app_name, llap_app_info['state'])) - return False - - try: - status = do_retries() - return status - except Exception, e: - Logger.info("LLAP app '{0}' did not come up after a wait of {1} seconds.".format(llap_app_name, - time.time() - curr_time)) - traceback.print_exc() - return False - - def get_log_folder(self): - import params - return params.hive_log_dir - - def get_user(self): - import params - return params.hive_user - -@OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY) -class HiveServerInteractiveWindows(HiveServerInteractive): - - def status(self, env): - pass - -if __name__ == "__main__": - HiveServerInteractive().execute() \ No newline at end of file