<?xml version="1.0"?>
<!--
   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.
-->
<?xml-stylesheet type="text/xsl"  href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<!-- Chukwa Job parameters -->
	<property>
	  <name>io.sort.mb</name>
	  <value>${TODO_DEMUX_IO_SORT_MB}</value>
	  <description>The total amount of buffer memory to use while sorting
	  files, in megabytes.  By default, gives each merge stream 1MB, which
	  should minimize seeks.</description>
	</property>

	<property>
	  <name>fs.inmemory.size.mb</name>
	  <value>${TODO_DEMUX_FS_INMEMORY_SIZE_MB}</value>
	  <description>The size of the in-memory filsystem instance in MB</description>
	</property>

	<property>
	  <name>io.sort.factor</name>
	  <value>${TODO_DEMUX_IO_SORT_FACTOR}</value>
	  <description>The number of streams to merge at once while sorting
	  files.  This determines the number of open file handles.</description>
	</property>

<!-- Archive configuration -->
  
    <property>
       <name>archive.grouper</name>
       <value>Stream</value>
       <description>How to group archive files. Choices are Hourly, Daily, DataType, and Stream.</description>
    </property>

    <property>
       <name>archive.groupByClusterName</name>
       <value>false</value>
       <description>Whether the DataType grouper should group archived files by cluster name.</description>
    </property>

<!-- PostProcessorManager config -->
  <property>
    <name>chukwa.data.loader.threads.limit</name>
    <value>3</value>
    <description>Reduce count </description>
  </property>

  <property>
    <name>chukwa.post.demux.data.loader</name>
    <value>org.apache.hadoop.chukwa.dataloader.MetricDataLoaderPool,org.apache.hadoop.chukwa.dataloader.FSMDataLoader</value>
  </property>

  <property>
    <name>chukwa.post.demux.success.action</name>
    <value></value>
    <description>Comma-separated list of
    org.apache.hadoop.chukwa.datatrigger.TriggerAction implementations
    that will be triggered upon a successful Demux/PostProcessor job</description>
  </property>

  <property>
    <name>post.process.max.error.count.before.shutdown</name>
    <value>4</value>
    <description>The number of consecutive errors to be encountered by the
    PostProcessorManager before the process will be shut down. Set to -1 to continue
    running despite error count.</description>
  </property>

<!-- -->

<!-- ArchiveManager config -->
  
  <property>
    <name>chukwaArchiveBuilder.reduceCount</name>
    <value>5</value>
    <description>Reduce count </description>
  </property>

  <property>
    <name>archive.max.error.count.before.shutdown</name>
    <value>4</value>
    <description>The number of consecutive errors to be encountered by the
    ArchiveManager before the process will be shut down. Set to -1 to continue
    running despite error count.</description>
  </property>

<!-- -->

<!-- Demux configs for mapper -->

  <property>
    <name>demux.max.error.count.before.shutdown</name>
    <value>5</value>
    <description>The number of consecutive errors to be encountered by the
    DemuxManager before the process will be shut down. Set to -1 to continue
    running despite error count.</description>
  </property>

<!-- -->  

<!-- Demux aliases -->

  <property>
    <name>HadoopMetrics</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.HadoopMetricsProcessor</value>
    <description>Parser class for Hadoop Metrics </description>
  </property>

  <property>
    <name>SysLog</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.SysLog</value>
    <description>Parser class for SysLog</description>
  </property>

  <property>
    <name>Df</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.Df</value>
    <description>Parser class for Df</description>
  </property>

  <property>
    <name>HadoopLog</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.HadoopLogProcessor</value>
    <description>Parser class for HadoopLog</description>
  </property>

  <property>
    <name>Iostat</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.Iostat</value>
    <description>Parser class for Iostat</description>
  </property>
 
   <property>
    <name>PbsNodes</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.PbsNodes</value>
    <description>Parser class for PbsNodes</description>
  </property>
 
   <property>
    <name>Sar</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.Sar</value>
    <description>Parser class for Sar</description>
  </property>

   <property>
    <name>TsProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.TsProcessor</value>
    <description>Parser class for TsProcessor</description>
   </property>
  
   <property>
    <name>Top</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.Top</value>
    <description>Parser class for Top</description>
   </property>

   <property>
    <name>Torque</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.Torque</value>
    <description>Parser class for Parsing qstat and tracejob</description>
   </property>
  
   <property>
    <name>DbLoader</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.TsProcessor</value>
    <description>Parser class for DbLoader</description>
   </property>

   <property>
    <name>JobHistory</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.JobLog</value>
    <description>Parser class for Job History Log File</description>
   </property>

   <property>
    <name>JobConf</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.JobConfProcessor</value>
    <description>Parser class for Map reduce Job Configuration</description>
   </property>
    
   <property>
     <name>ClientTrace</name>
     <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.ClientTraceProcessor</value>
     <description>Parser class for TaskTracker and DataNode clienttrace data</description>
   </property>
 
   <property>
    <name>HDFSUsage</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.JPluginMapper</value>
    <description></description>
   </property>

   <property>
    <name>ChukwaMetrics</name>
    <value>org.apache.hadoop.chukwa.extraction.hbase.ChukwaMetricsProcessor</value>
    <description></description>
   </property>

   <property>
    <name>SystemMetrics</name>
    <value>org.apache.hadoop.chukwa.extraction.hbase.SystemMetrics</value>
    <description></description>
   </property>

   <property>
    <name>JobSummary</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.JobSummary</value>
   </property>

   <property>
    <name>DatanodeProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.DatanodeProcessor</value>
   </property>

   <property>
    <name>NamenodeProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.NamenodeProcessor</value>
   </property>

   <property>
    <name>JobTrackerProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.JobTrackerProcessor</value>
   </property>

   <property>
    <name>ZookeeperProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.ZookeeperProcessor</value>
   </property>

   <property>
    <name>HBaseMasterProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.HBaseMasterProcessor</value>
   </property>

   <property>
    <name>HBaseRegionServerProcessor</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.HBaseRegionServerProcessor</value>
   </property>

    <!-- Demux configs for reducer -->
    <property>
        <name>JobLogHistoryReduceProcessor</name>
        <value>,org.apache.hadoop.chukwa.extraction.demux.processor.reducer.JobLogHistoryReduceProcessor</value>
        <description> Reducer class for Reduce Type JobLogHistoryReduceProcessor </description>
    </property>

    <property>
        <name>MRJobReduceProcessor</name>
        <value>,org.apache.hadoop.chukwa.extraction.demux.processor.reducer.MRJobReduceProcessor</value>
        <description> Reducer class for Reduce Type MRJobReduceProcessor </description>
    </property>

    <property>
        <name>ClientTrace</name>
        <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.ClientTraceProcessor,org.apache.hadoop.chukwa.extraction.demux.processor.reducer.ClientTrace</value>
        <description> Reducer class for Reduce Type ClientTrace </description>
    </property>
</configuration>
