<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! Licensed 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 from
 !
 !     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 xmlns="installer">
  <is_configured>false</is_configured>
  <backup>
    <hdfs>
      <version>0.20.2</version>
      <url></url>
      <backupDir></backupDir>
    </hdfs>
  </backup>
  <zookeeper>
    <homeDir>/tmp/zookeeper</homeDir>
    <clientPort>2900</clientPort>
    <servers>
      <server>127.0.0.1</server>
    </servers>
  </zookeeper>
</configuration>
