blob: c5f6c1f5b6266c47c56207c6bdc232b8350889b4 [file] [log] [blame]
/**
* 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();
}
});