/* * ***************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2017 by Pentaho : http://www.pentaho.com * * ******************************************************************************* * Licensed 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. * * ***************************************************************************** * */ package org.pentaho.di.engine.configuration.impl.spark; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.pentaho.capabilities.api.ICapability; import org.pentaho.capabilities.api.ICapabilityManager; import org.pentaho.capabilities.impl.DefaultCapabilityManager; import org.pentaho.di.base.AbstractMeta; import org.pentaho.di.core.Const; import org.pentaho.di.core.variables.VariableSpace; import org.pentaho.di.engine.configuration.api.RunConfiguration; import org.pentaho.di.engine.configuration.api.RunConfigurationExecutor; import org.pentaho.di.trans.TransExecutionConfiguration; import java.io.IOException; import java.util.Dictionary; /** * Created by bmorrise on 3/17/17. */ public class SparkRunConfigurationExecutor implements RunConfigurationExecutor { public static String ZOOKEEPER_CAPABILITY_ID = "aries-rsa-discovery-zookeeper"; public static String PENTAHO_SERVER_CAPABILITY_ID = "pentaho-server"; public static String CONFIG_KEY = "org.apache.aries.rsa.discovery.zookeeper"; public static String JAAS_CAPABILITY_ID = "pentaho-kerberos-jaas"; public static String AEL_SECURITY_CAPABILITY_ID = "ael-security"; public static String DEFAULT_HOST = "127.0.0.1"; public static String DEFAULT_PORT = "2181"; private ConfigurationAdmin configurationAdmin; private ICapabilityManager capabilityManager = DefaultCapabilityManager.getInstance(); public SparkRunConfigurationExecutor( ConfigurationAdmin configurationAdmin ) { this.configurationAdmin = configurationAdmin; } /** * Installs the aries-rsa-discovery-zookeeper feature if not installed and sets the host and port for zookeeper. * Sets the appropriate variables on the transMeta for the spark engine * * @param runConfiguration The configuration for running on Spark * @param configuration The configuration for executing a transformation * @param meta Unused in this implementation * @param variableSpace The variableSpace used to set the engine runtime values */ @Override public void execute( RunConfiguration runConfiguration, TransExecutionConfiguration configuration, AbstractMeta meta, VariableSpace variableSpace ) { // Check to see if the ael-security feature is installed. If it is, then install the jaas capability if it is // not already installed ICapability securityCapability = capabilityManager.getCapabilityById( AEL_SECURITY_CAPABILITY_ID ); ICapability jaasCapability = capabilityManager.getCapabilityById( JAAS_CAPABILITY_ID ); if ( securityCapability != null && securityCapability.isInstalled() ) { if ( jaasCapability != null && !jaasCapability.isInstalled() ) { jaasCapability.install(); } } // Check to see if the aries-rsa-discovery-zookeeper feature is installed and install if not ICapability capability = capabilityManager.getCapabilityById( ZOOKEEPER_CAPABILITY_ID ); if ( capability != null && !capability.isInstalled() ) { capability.install(); } // Check to verify this is running on the server or not if ( capabilityManager.getCapabilityById( PENTAHO_SERVER_CAPABILITY_ID ) == null ) { SparkRunConfiguration sparkRunConfiguration = (SparkRunConfiguration) runConfiguration; String[] parts = Const.NVL( sparkRunConfiguration.getUrl(), "" ).split( ":" ); String host = parts[ 0 ]; String port = parts.length > 1 ? parts[ 1 ] : DEFAULT_PORT; try { // Set the configuration properties for zookeepr Configuration zookeeperConfiguration = configurationAdmin.getConfiguration( CONFIG_KEY ); Dictionary<String, Object> properties = zookeeperConfiguration.getProperties(); if ( properties != null ) { properties.put( "zookeeper.host", Const.NVL( host, DEFAULT_HOST ) ); properties.put( "zookeeper.port", Const.NVL( port, DEFAULT_PORT ) ); zookeeperConfiguration.update( properties ); } } catch ( IOException ioe ) { System.out.println( "Error occurred accessing configuration" ); } } // Sets the appropriate variables on the transformation for the spark engine variableSpace.setVariable( "engine", "remote" ); variableSpace.setVariable( "engine.remote", "spark" ); } }