<?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.hbase.HadoopMetricsProcessor</value>
    <description>Parser class for Hadoop Metrics </description>
  </property>

  <property>
    <name>HBaseMetrics</name>
    <value>org.apache.hadoop.chukwa.extraction.hbase.HadoopMetricsProcessor</value>
    <description>Parser class for HBase 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>
