<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 * Copyright 2009 The Apache Software Foundation
 *
 * 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.
 */
-->
<configuration>
  <property>
    <name>bsp.master.address</name>
    <value>local</value>
    <description>The address of the bsp master server. Either the
    literal string "local" or a host[:port] (where host is a name or
    IP address) for distributed mode.
    </description>
  </property>
  <property>
    <name>bsp.master.port</name>
    <value>40000</value>
    <description>The port master should bind to.</description>
  </property>
  <property>
    <name>bsp.peer.port</name>
     <value>61000</value>
    <description>The port an groom server binds to.</description>
  </property>
  <property>
    <name>bsp.groom.rpc.port</name>
     <value>50000</value>
    <description>The port an groom rpc binds to.</description>
  </property>
  <property>
    <name>bsp.http.infoserver.port</name>
    <value>40013</value>
    <description>The port where the web-interface can be seen.
    </description>
  </property>
  <property>
    <name>bsp.http.groomserver.port</name>
    <value>40015</value>
    <description>The port where the web-interface can be seen.
    </description>
  </property>
  <property>
    <name>bsp.groom.report.address</name>
    <value>127.0.0.1:50001</value>
    <description>The interface and port that groom server listens on. 
    Since it is only connected to by the tasks, it uses the local interface.
    EXPERT ONLY. Should only be changed if your host does not have the loopback 
    interface.</description>
  </property>
  <property>
    <name>bsp.groomserver.pingperiod</name>
    <value>5000</value>
    <description>Periodicity in milliseconds that every BSP task should send its hearbeat ping latest. If a task fails to do so, the groom server would deem the task as failed.</description>
  </property>
  <property>
    <name>bsp.system.dir</name>
    <value>${hadoop.tmp.dir}/bsp/system</value>
    <description>The shared directory where BSP stores control files.
    </description>
  </property>
  <property>
    <name>bsp.local.dir</name>
    <value>${hadoop.tmp.dir}/bsp/local</value>
    <description>local directory for temporal store.</description> 
  </property>
  <property>
    <name>hama.tmp.dir</name>
    <value>/tmp/hama-${user.name}</value>
    <description>Temporary directory on the local filesystem.</description>
  </property>
  <property>
    <name>bsp.disk.queue.dir</name>
    <value>${hama.tmp.dir}/messages/</value>
    <description>Temporary directory on the local message buffer on disk.</description>
  </property>
  <property>
    <name>hama.disk.vertices.path</name>
    <value>${hama.tmp.dir}/graph/</value>
    <description>Disk directory for graph data.</description>
  </property>
  <property>
    <name>bsp.child.java.opts</name>
    <value>-Xmx2048m</value>
    <description>Java opts for the groom server child processes.  
    The following symbol, if present, will be interpolated: @taskid@ is replaced 
    by current TaskID. Any other occurrences of '@' will go unchanged.
    For example, to enable verbose gc logging to a file named for the taskid in
    /tmp and to set the heap maximum to be a gigabyte, pass a 'value' of:
          -Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc
    The configuration variable bsp.child.ulimit can be used to control the
    maximum virtual memory of the child processes. 
    </description>
  </property>
  <property>
    <name>bsp.master.TaskWorkerManager.class</name>
    <value>org.apache.hama.bsp.SimpleTaskWorkerManager</value>
    <description>The class responsible for assigning tasks to groom servers</description>
  </property>
  <property>
    <name>hama.mesos.executor.uri</name>
    <value>hdfs://hdfs.name.node:port/hama.tar.gz</value>
    <description>
      Ignore this if you are not using the Mesos TaskWorkerManger. 
      This is the URI of the Hama distribution. Upload this yourself. 
    </description>
  </property>
  <property>
    <name>bsp.tasks.maximum.total</name>
    <value></value>
    <description>
      This is an override for the total maximum tasks that may be run.
      The default behavior is to determine a value based on the available groom
      servers. However, if using mesos, the groom servers are not yet allocated.  
      So, a value indicating the number of slots available in the cluster is needed. 
    </description>
  </property>
  <property>
    <name>hama.mesos.master</name>
    <value>local</value>
    <description>
      Ignore this if you are not using the Mesos TaskWorkerManger.
      This is the address of the Mesos master instance. If you're using
      Zookeeper for master election, use the Zookeeper address here (i.e.,
      zk://zk.apache.org:2181/hadoop/mesos).
    </description>
  </property>
  <property>
    <name>bsp.local.tasks.maximum</name>
    <value>10</value>
    <description>Number of tasks that run in parallel when in local mode.</description>
  </property>
  <property>
    <name>bsp.tasks.maximum</name>
    <value>3</value>
    <description>The maximum number of BSP tasks that will be run simultaneously 
    by a groom server.</description>
  </property>
  <property>
    <name>bsp.max.tasks.per.job</name>
    <value></value>
    <description>The maximum number of BSP tasks per job. 
    By default, This limit is switched off.
    </description>
  </property>
  <property>
    <name>bsp.ft.enabled</name>
    <value>false</value>
    <description>Enable Fault Tolerance in BSP Task execution.</description>
  </property>
  <property>
    <name>bsp.checkpoint.enabled</name>
    <value>false</value>
    <description>Enable Hama to checkpoint the messages transferred among BSP tasks during the BSP synchronization period.</description>
  </property>
  <property>
    <name>bsp.checkpoint.interval</name>
    <value>1</value>
    <description>If bsp.checkpoint.enabled is set to true, the checkpointing is initiated on the valueth synchronization process of BSP tasks.</description>
  </property>
  <property>
    <name>bsp.groomserver.pingperiod</name>
    <value>10000</value>
    <description>The default timeout period for checking groom server health.</description>
  </property>

  <property>
    <name>hama.messenger.max.cached.connections</name>
    <value>100</value>
    <description>This changes the maximum number of connections that are cached
    between the peers, normally a LRU cache is used. This affects the memory
    consumption per task and the performance. Increasing it will give you a speed-up
    but it trades more memory.
    </description>
  </property>
  <property>
    <name>hama.default.messenger.handler.threads.num</name>
    <value>5</value>
    <description>The number of method handler threads to run.</description>
  </property>
  <property>
    <name>hama.bsp.messenger.bundle</name>
    <value>true</value>
    <description>Message bundling is used to reduce RPC overheads.</description>
  </property>
  
  <property>
    <name>bsp.input.runtime.partitioning</name>
    <value>true</value>
    <description>Basically, we provides a input data partitioning program based on BSP job, 
    which you can use without any extra program. Set this property to false if you 
    want to use the custom partition program.
    </description>
  </property>
  
  <property>
    <name>io.serializations</name>
    <value>org.apache.hadoop.io.serializer.WritableSerialization,org.apache.hadoop.io.serializer.JavaSerialization</value>
    <description>The default IO serialization protocol for HDFS I/O</description>
  </property>
  
  <!--
  Beginning of properties that are directly mapped from ZooKeeper's zoo.cfg.
  All properties with an "hama.zookeeper.property." prefix are converted for
  ZooKeeper's configuration. Hence, if you want to add an option from zoo.cfg,
  e.g.  "initLimit=10" you would append the following to your configuration:
    <property>
      <name>hama.zookeeper.property.initLimit</name>
      <value>10</value>
    </property>
  -->
  <property>
    <name>hama.zookeeper.property.initLimit</name>
    <value>10</value>
    <description>Property from ZooKeeper's config zoo.cfg.
    The number of ticks that the initial synchronization phase can take.
    </description>
  </property>
  <property>
    <name>hama.zookeeper.property.syncLimit</name>
    <value>5</value>
    <description>Property from ZooKeeper's config zoo.cfg.
    The number of ticks that can pass between sending a request and getting an
    acknowledgment.
    </description>
  </property>
  <property>
    <name>hama.zookeeper.property.dataDir</name>
    <value>${hama.tmp.dir}/zookeeper</value>
    <description>Property from ZooKeeper's config zoo.cfg.
    The directory where the snapshot is stored.
    </description>
  </property>
  <property>
    <name>hama.zookeeper.property.clientPort</name>
    <value>21810</value>
    <description>Property from ZooKeeper's config zoo.cfg.
    The port at which the clients will connect.
    </description>
  </property>
  <property>
    <name>hama.zookeeper.property.tickTime</name>
    <value>3000</value>
    <description></description>
  </property>
  <property>
    <name>hama.zookeeper.property.maxClientCnxns</name>
    <value>30</value>
    <description>Property from ZooKeeper's config zoo.cfg.
    Limit on number of concurrent connections (at the socket level) that a
    single client, identified by IP address, may make to a single member of
    the ZooKeeper ensemble. Set high to avoid zk connection issues running
    standalone and pseudo-distributed.
    </description>
  </property>
  
  <property>
    <name>hama.messenger.class</name>
    <value>org.apache.hama.bsp.message.HamaMessageManagerImpl</value>
  </property>

  <property>
    <name>hama.messenger.runtime.compression</name>
    <value>false</value>
    <description>True if you want to enable runtime compression</description>
  </property>
  <property>
    <name>hama.messenger.compression.class</name>
    <value>org.apache.hama.bsp.message.compress.Bzip2Compressor</value>
    <description>The message compression algorithm to choose. Default is null.</description>
  </property>
  
  <property>
    <name>hama.zookeeper.quorum</name>
    <value>localhost</value>
    <description>Comma separated list of servers in the ZooKeeper quorum.
    For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
    By default this is set to localhost for local and pseudo-distributed modes
    of operation. For a fully-distributed setup, this should be set to a full
    list of ZooKeeper quorum servers. If HAMA_MANAGES_ZK is set in hama-env.sh
    this is the list of servers which we will start/stop ZooKeeper on.
    </description>
  </property>
  
  <!-- End of properties that are directly mapped from ZooKeeper's zoo.cfg -->
</configuration>
