/** * 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. */ package org.apache.hadoop.hive.llap; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Iterator; import java.util.Map; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.llap.configuration.LlapDaemonConfiguration; import org.apache.hadoop.hive.llap.daemon.MiniLlapCluster; import org.apache.hadoop.hive.llap.daemon.impl.LlapDaemon; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LlapItUtils { private static final Logger LOG = LoggerFactory.getLogger(LlapItUtils.class); public static MiniLlapCluster startAndGetMiniLlapCluster(Configuration conf, MiniZooKeeperCluster miniZkCluster, String confDir) throws IOException { MiniLlapCluster llapCluster; LOG.info("Using conf dir: {}", confDir); if (confDir != null && !confDir.isEmpty()) { conf.addResource(new URL("file://" + new File(confDir).toURI().getPath() + "/tez-site.xml")); } Configuration daemonConf = new LlapDaemonConfiguration(conf); final String clusterName = "llap"; final long maxMemory = LlapDaemon.getTotalHeapSize(); // 15% for io cache final long memoryForCache = (long) (0.15f * maxMemory); // 75% for 4 executors final long totalExecutorMemory = (long) (0.75f * maxMemory); final int numExecutors = HiveConf.getIntVar(conf, HiveConf.ConfVars.LLAP_DAEMON_NUM_EXECUTORS); final boolean asyncIOEnabled = true; // enabling this will cause test failures in Mac OS X final boolean directMemoryEnabled = false; final int numLocalDirs = 1; LOG.info("MiniLlap Configs - maxMemory: " + maxMemory + " memoryForCache: " + memoryForCache + " totalExecutorMemory: " + totalExecutorMemory + " numExecutors: " + numExecutors + " asyncIOEnabled: " + asyncIOEnabled + " directMemoryEnabled: " + directMemoryEnabled + " numLocalDirs: " + numLocalDirs); llapCluster = MiniLlapCluster.create(clusterName, miniZkCluster, 1, numExecutors, totalExecutorMemory, asyncIOEnabled, directMemoryEnabled, memoryForCache, numLocalDirs); llapCluster.init(daemonConf); llapCluster.start(); // Augment conf with the settings from the started llap configuration. Configuration llapConf = llapCluster.getClusterSpecificConfiguration(); Iterator<Map.Entry<String, String>> confIter = llapConf.iterator(); while (confIter.hasNext()) { Map.Entry<String, String> entry = confIter.next(); conf.set(entry.getKey(), entry.getValue()); } return llapCluster; } }