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

# Set Hadoop-specific environment variables here.

# The only required environment variable is JAVA_HOME.  All others are
# optional.  When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.

# The java implementation to use.  Required.
export JAVA_HOME=${JAVA_HOME:-"{{java_home}}"}
export HADOOP_HOME_WARN_SUPPRESS=1

# Hadoop home directory
export HADOOP_HOME=${HADOOP_HOME:-"/usr/hdp/current/hadoop-client"}

# Environment Variable
export HADOOP_LOG_DIR="{{HADOOP_LOG_DIR}}"
export HADOOP_HEAPSIZE_MIN="{{HADOOP_HEAPSIZE_MIN}}"
export HADOOP_HEAPSIZE_MAX="{{HADOOP_HEAPSIZE_MAX}}"
export HADOOP_NAMENODE_INIT_HEAPSIZE="{{HADOOP_NAMENODE_INIT_HEAPSIZE}}"
export HADOOP_OPTS="{{HADOOP_OPTS}} ${HADOOP_OPTS}"
export HADOOP_PID_DIR="{{HADOOP_PID_DIR}}"
export HADOOP_CLIENT_OPTS="{{HADOOP_CLIENT_OPTS}}"
export HDFS_DATANODE_SECURE_USER="{{HDFS_DATANODE_SECURE_USER}}"
export HADOOP_SECURE_LOG_DIR="{{HADOOP_SECURE_LOG_DIR}}"
export HADOOP_SECURE_PID_DIR="{{HADOOP_SECURE_PID_DIR}}"

# Path to jsvc required by secure HDP 2.0 datanode
if [ -d /usr/libexec/bigtop-utils ]; then
  export JSVC_HOME=/usr/libexec/bigtop-utils
else
  export JSVC_HOME=/usr/lib/bigtop-utils
fi

# Log4j Default Values
export HADOOP_ROOT_LOGGER=${HADOOP_ROOT_LOGGER:-{{HADOOP_ROOT_LOGGER}}}
export HADOOP_SECURITY_LOGGER=${HADOOP_SECURITY_LOGGER:-{{HADOOP_SECURITY_LOGGER}}}
export HDFS_AUDIT_LOGGER=${HDFS_AUDIT_LOGGER:-{{HDFS_AUDIT_LOGGER}}}


# Where log files are stored.  $HADOOP_HOME/logs by default.
export HADOOP_LOG_DIR=${HADOOP_LOG_DIR:-'/var/log/hadoop'}

# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE_MIN=${HADOOP_HEAPSIZE_MIN:-"256"}
export HADOOP_HEAPSIZE_MAX=${HADOOP_HEAPSIZE_MAX:-"1024"}

export HADOOP_NAMENODE_INIT_HEAPSIZE=${HADOOP_NAMENODE_INIT_HEAPSIZE:-"1024"}

# Extra Java runtime options.  Empty by default.
HADOOP_OPTS=${HADOOP_OPTS:-""}
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true ${HADOOP_OPTS}"

# Command specific options appended to HADOOP_OPTS when specified
export HDFS_NAMENODE_OPTS=" ${HDFS_NAMENODE_OPTS} -server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile=${HADOOP_LOG_DIR}/hs_err_pid%p.log  -Xloggc:${HADOOP_LOG_DIR}/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER} {{HDFS_NAMENODE_OPTS}}"

HADOOP_JOBTRACKER_OPTS="-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC  -XX:ErrorFile=${HADOOP_LOG_DIR}/hs_err_pid%p.log -XX:NewSize=200m -XX:MaxNewSize=200m -Xloggc:${HADOOP_LOG_DIR}/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Dhadoop.security.logger=${HADOOP_ROOT_LOGGER} -Dmapred.audit.logger=INFO,MRAUDIT -Dhadoop.mapreduce.jobsummary.logger=INFO,JSA ${HADOOP_JOBTRACKER_OPTS}"

HADOOP_TASKTRACKER_OPTS="-server -Xmx1024m -Dhadoop.security.logger=ERROR,console -Dmapred.audit.logger=ERROR,console ${HADOOP_TASKTRACKER_OPTS}"

export HDFS_DATANODE_OPTS="${HDFS_DATANODE_OPTS} -server -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:ErrorFile=${HADOOP_LOG_DIR}/hs_err_pid%p.log  -Xloggc:${HADOOP_LOG_DIR}/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps  -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER} {{HDFS_DATANODE_OPTS}}"
export HDFS_JOURNALNODE_OPTS=" ${HDFS_JOURNALNODE_OPTS} -server -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:ErrorFile=${HADOOP_LOG_DIR}/hs_err_pid%p.log  -Xloggc:${HADOOP_LOG_DIR}/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps  -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER} {{HDFS_JOURNALNODE_OPTS}}"
HADOOP_BALANCER_OPTS="-server -Xmx1024m ${HADOOP_BALANCER_OPTS}"

export HADOOP_SECONDARYNAMENODE_OPTS=$HDFS_NAMENODE_OPTS

# The following applies to multiple commands (fs, dfs, fsck, distcp etc)
export HADOOP_CLIENT_OPTS=${HADOOP_CLIENT_OPTS:-"-Xmx1024m"}
#export HADOOP_CLIENT_OPTS="-Xmx${HADOOP_HEAPSIZE}m  $HADOOP_CLIENT_OPTS"

# On secure datanodes, user to run the datanode as after dropping privileges
export HDFS_DATANODE_SECURE_USER=${HDFS_DATANODE_SECURE_USER:-"hdfs"}

# Extra ssh options.  Empty by default.
export HADOOP_SSH_OPTS="-o ConnectTimeout=5 -o SendEnv=HADOOP_CONF_DIR"


# Where log files are stored in the secure data environment.
export HADOOP_SECURE_LOG_DIR=${HADOOP_SECURE_LOG_DIR:-"/var/log/hadoop"}

# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.
# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves

# host:path where hadoop code should be rsync'd from.  Unset by default.
# export HADOOP_MASTER=master:/home/$USER/src/hadoop

# Seconds to sleep between slave commands.  Unset by default.  This
# can be useful in large clusters, where, e.g., slave rsyncs can
# otherwise arrive faster than the master can service them.
# export HADOOP_SLAVE_SLEEP=0.1

# The directory where pid files are stored. /tmp by default.
export HADOOP_PID_DIR=${HADOOP_PID_DIR:-"/var/run/hadoop"}
export HADOOP_SECURE_PID_DIR=${HADOOP_SECURE_PID_DIR-"/var/run/hadoop"}


YARN_RESOURCEMANAGER_OPTS="-Dyarn.server.resourcemanager.appsummary.logger=INFO,RMSUMMARY"

# A string representing this instance of hadoop. $USER by default.
export HADOOP_IDENT_STRING=$USER

# The scheduling priority for daemon processes.  See 'man nice'.

# export HADOOP_NICENESS=10

# Use libraries from standard classpath
JAVA_JDBC_LIBS=""
#Add libraries required by mysql connector
for jarFile in `ls /usr/share/java/*mysql* 2>/dev/null`
do
  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile
done
# Add libraries required by oracle connector
for jarFile in `ls /usr/share/java/*ojdbc* 2>/dev/null`
do
  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile
done
# Add libraries required by nodemanager
MAPREDUCE_LIBS=/usr/hdp/current/hadoop-mapreduce-client/*
TIMELINE_LIBS=/usr/hdp/current/hadoop-yarn-timelinereader/timelineservice/*
HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}${JAVA_JDBC_LIBS}:${MAPREDUCE_LIBS}:${TIMELINE_LIBS}

# added to the HADOOP_CLASSPATH
if [ -d "/usr/hdp/current/tez-client" ]; then
  if [ -d "/etc/tez/conf/" ]; then
    # When using versioned RPMs, the tez-client will be a symlink to the current folder of tez in HDP.
    export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:/usr/hdp/current/tez-client/*:/usr/hdp/current/tez-client/lib/*:/etc/tez/conf/
  fi
fi

# Setting path to hdfs command line
export HADOOP_LIBEXEC_DIR=/usr/hdp/current/hadoop-client/libexec

# Mostly required for hadoop 2.0
export JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}

export HADOOP_OPTS="-Dhdp.version=$HDP_VERSION $HADOOP_OPTS"

export HADOOP_ZKFC_OPTS="{{ZKFC_OPTS}} ${HADOOP_ZKFC_OPTS}"
export JAVA_LIBRARY_PATH="${JAVA_LIBRARY_PATH}:/usr/hdp/current/hadoop-client/lib/native/"