<?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.demux.processor.mapper.ChukwaMetricsProcessor</value>
    <description></description>
   </property>

   <property>
    <name>SystemMetrics</name>
    <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.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>

    <!-- Demux configs for both mapper and reducer -->
    <property>
        <name>SystemMetrics</name>
        <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.SystemMetrics,org.apache.hadoop.chukwa.extraction.demux.processor.reducer.SystemMetrics</value>
        <description> Reducer class for Reduce Type SystemMetrics </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>
