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

########################
# Fluo YARN properties
########################

# NOTE - All properties that have a default are set with it. Uncomment
# a property if you want to use a value different than the default. 
# Properties that have no default are uncommented and must be set by
# the user.

## General properties
## ------------------
## Zookeeper connection string specifying host and chroot where Fluo YARN launcher stores data.
## A chroot directory suffix (with max depth of 1) must be specified but doesn't need to be named '/fluo-yarn'.
#fluo.yarn.zookeepers=localhost/fluo-yarn

## YARN resource manager hostname. Should match 'yarn.resourcemanager.hostname' property in Hadoop's yarn-site.xml
#fluo.yarn.resource.manager=localhost

## HDFS root path. Should be prefixed with 'fs.defaultFS' property in Hadoop's core-site.xml
#fluo.yarn.dfs.root=hdfs://localhost:8020/

## Optionally specify the YARN Queue to launch application in
#fluo.yarn.queue=someQ

## Oracle properties
## -----------------
## Number of oracle yarn instances
#fluo.yarn.oracle.instances=1

## Max memory of Oracle yarn containers (in MB)
#fluo.yarn.oracle.max.memory.mb=512

## Reserved memory.  Behaves same as worker property, so see its docs.
#fluo.yarn.oracle.reserved.memory.mb=200

## Number of Oracle virtual cores
#fluo.yarn.oracle.num.cores=1

## Worker properties
## -----------------
## Number of Worker instances
#fluo.yarn.worker.instances=1

## Max memory of worker YARN containers (in MB).
#fluo.yarn.worker.max.memory.mb=1024

## This property is used to compute the Java heap size by subtracting it from the max memory
## property.  For example, if max memory is 1024 and reserved memory is 200, then java -Xmx setting
## will be 1024-200 = 824 MB. If YARN is killing workers because too much memory is used,  then
## consider increasing this property. 
#fluo.yarn.worker.reserved.memory.mb=200

## Number of worker virtual cores
#fluo.yarn.worker.num.cores=1
