#
#
# 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.
#
#
#

# The file containing the running pid
PID_FILE=<%=scope.function_hdp_template_var("templeton_pid_dir")%>/webhcat.pid

TEMPLETON_LOG_DIR=<%=scope.function_hdp_template_var("templeton_log_dir")%>/

# The console error log
ERROR_LOG=<%=scope.function_hdp_template_var("templeton_log_dir")%>/webhcat-console-error.log

# The console log
CONSOLE_LOG=<%=scope.function_hdp_template_var("templeton_log_dir")%>/webhcat-console.log

#TEMPLETON_JAR=<%=scope.function_hdp_template_var("templeton_jar_name")%>

#HADOOP_PREFIX=<%=scope.function_hdp_template_var("hadoop_prefix")%>/

#HCAT_PREFIX=<%=scope.function_hdp_template_var("hive_prefix")%>/

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/lib/hadoop
