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

### Sets the mode of execution for Apex ###
# "local" - Execute in local mode. No cluster setup needed.
# "cluster" - Execute in cluster mode. Needs a working Hadoop 2.0 (YARN) cluster.
samoa.apex.mode=local
#samoa.apex.mode=cluster

### The HDFS directory to use (in case of "cluster" mode) for storing app related data ###
dt.dfsRootDirectory=/user/apex

### The HDFS file system (In case of "cluster" mode) ###
fs.defaultFS=hdfs://localhost:9000

### The YARN resource manager address (In case of "cluster" mode) ###
yarn.resourcemanager.address=localhost:8032

### Path to hadoop common libs (In case of "cluster" mode) ###
# Set this appropriately to the lib directory of hadoop-common if using a custom hadoop distribution
hadoop.common.home=$HADOOP_HOME/share/hadoop/common

### Path to hdfs libs (In case of "cluster" mode) ###
# Set this appropriately to the lib directory of hadoop-hdfs if using a custom hadoop distribution
hadoop.hdfs.home=$HADOOP_HOME/share/hadoop/hdfs

### Path to yarn libs (In case of "cluster" mode) ###
# Set this appropriately to the lib directory of hadoop-yarn if using a custom hadoop distribution
hadoop.yarn.home=$HADOOP_HOME/share/hadoop/yarn

### Path to hadoop conf dir (In case of "cluster" mode) ###
# Set this appropriately to the conf directory of hadoop if using a custom hadoop distribution
hadoop.conf.dir=$HADOOP_HOME/etc/hadoop

### Additional configuration properties, if needed, can be specified in this file (In case of "cluster" mode) ###
dt.site.path=$HOME/.dt/dt-site.xml
