| /** |
| * 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. |
| */ |
| |
| var App = require('app'); |
| require('utils/configs/move_hive_component_config_initializer_class'); |
| |
| /** |
| * Initializer for configs which should be affected when Hive Metastore is moved from one host to another |
| * |
| * @type {MoveHiveComponentConfigInitializerClass} |
| */ |
| App.MoveHmConfigInitializer = App.MoveHiveComponentConfigInitializerClass.create({ |
| |
| initializers: { |
| 'hadoop.proxyuser.{{hiveUser}}.hosts': App.MoveHiveComponentConfigInitializerClass.getHostsWithComponentsConfig(['HIVE_SERVER', 'HIVE_METASTORE', 'HIVE_SERVER_INTERACTIVE'], 'HIVE_METASTORE') |
| }, |
| |
| uniqueInitializers: { |
| 'hive.metastore.uris': '_initHiveMetastoreUris', |
| 'templeton.hive.properties': '_initTempletonHiveProperties' |
| }, |
| |
| /** |
| * Unique initializer for <code>hive.metastore.uris</code>-config |
| * Value example: 'thrift://host1:1234,thrift://host2:1234,thrift://host3:1234' |
| * |
| * @param {configProperty} configProperty |
| * @param {extendedTopologyLocalDB} localDB |
| * @param {reassignComponentDependencies} dependencies |
| * @returns {object} |
| * @private |
| * @method _initHiveMetastoreUris |
| */ |
| _initHiveMetastoreUris: function (configProperty, localDB, dependencies) { |
| if (App.config.getConfigTagFromFileName(Em.get(configProperty, 'filename')) === 'hive-site') { |
| var hiveMSHosts = this.__getHmHostsConsideringMoved(localDB, dependencies); |
| |
| var value = Em.get(configProperty, 'value'); |
| |
| var port = value.match(/:[0-9]{2,4}/); |
| port = port ? port[0].slice(1) : '9083'; |
| |
| value = hiveMSHosts.uniq().map(function (hiveMSHost) { |
| return 'thrift://' + hiveMSHost + ':' + port; |
| }).join(','); |
| |
| Em.set(configProperty, 'value', value); |
| } |
| return configProperty; |
| }, |
| |
| /** |
| * Unique initializer for <code>templeton.hive.properties</code>-config |
| * Replace existing hosts with new |
| * Value example: 'hive.metastore.local=false,hive.metastore.uris=thrift://host1:9083,hive.metastore.sasl.enabled=false,hive.metastore.execute.setugi=true' |
| * |
| * @param {configProperty} configProperty |
| * @param {extendedTopologyLocalDB} localDB |
| * @param {reassignComponentDependencies} dependencies |
| * @returns {object} |
| * @private |
| * @method _initTempletonHiveProperties |
| */ |
| _initTempletonHiveProperties: function (configProperty, localDB, dependencies) { |
| var hiveMSHosts = this.__getHmHostsConsideringMoved(localDB, dependencies); |
| var value = Em.get(configProperty, 'value'); |
| value = value.replace(/thrift.+[0-9]{2,},/i, hiveMSHosts.join('\\,') + ','); |
| |
| Em.set(configProperty, 'value', value); |
| return configProperty; |
| }, |
| |
| /** |
| * Get list of hosts where HIVE_METASTORE exists considering component's moving (host where it was is removed and host |
| * where it will be is added) |
| * |
| * @param {extendedTopologyLocalDB} localDB |
| * @param {reassignComponentDependencies} dependencies |
| * @returns {string[]} |
| * @private |
| * @method __getHmHostsConsideringMoved |
| */ |
| __getHmHostsConsideringMoved: function (localDB, dependencies) { |
| var hiveMSHosts = localDB.masterComponentHosts.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName'); |
| hiveMSHosts = hiveMSHosts.removeObject(dependencies.sourceHostName).addObject(dependencies.targetHostName); |
| return hiveMSHosts.uniq(); |
| } |
| |
| }); |