<?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"?>

<!-- Global Chukwa Configuration file. -->

<configuration>

  <property>
    <name>chukwa.data.dir</name>
    <value>${CHUKWA_DIR}</value>
    <description>Location of Chukwa data on HDFS</description>
  </property>
  
  <property>
    <name>chukwa.tmp.data.dir</name>
    <value>${CHUKWA_DIR}/temp</value>
    <description>Location of Chukwa data on HDFS</description>
  </property>

  <!-- uncomment to enable network compression
  <property>
    <name>chukwaAgent.output.compress</name>
    <value>true</value>
    <description>boolean: true if we want to compress data on the wire between the agent and the collector</description>
  </property>

  <property>
    <name>chukwaAgent.output.compression.type</name>
	<value>org.apache.hadoop.io.compress.GzipCodec</value>
    <description>compression codec if the network data should be compressed</description>
  </property>
  -->

</configuration>
