<?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.
-->
<metainfo>
  <schemaVersion>2.0</schemaVersion>
  <services>
    <service>
      <name>HBASE</name>
      <comment>
        Apache HBase is the Hadoop database, a distributed, scalable, big data store.
        Requirements:
        1. Ensure parent dir for path (hbase-site/hbase.rootdir) is accessible to the App owner.
        2. Ensure ZK root (hbase-site/zookeeper.znode.parent) is unique for the App instance.
      </comment>
      <version>0.96.0.2.1.1</version>
      <type>YARN-APP</type>
      <minHadoopVersion>2.1.0</minHadoopVersion>
      <exportGroups>
        <exportGroup>
          <name>QuickLinks</name>
          <exports>
            <export>
              <name>org.apache.slider.jmx</name>
              <value>http://${HBASE_MASTER_HOST}:${site.hbase-site.hbase.master.info.port}/jmx</value>
            </export>
            <export>
              <name>org.apache.slider.monitor</name>
              <value>http://${HBASE_MASTER_HOST}:${site.hbase-site.hbase.master.info.port}/master-status</value>
            </export>
            <export>
              <name>org.apache.slider.metrics</name>
              <value>http://${site.global.ganglia_server_host}/cgi-bin/rrd.py?c=${site.global.ganglia_server_id}</value>
            </export>
          </exports>
        </exportGroup>
      </exportGroups>
      <commandOrders>
        <commandOrder>
          <command>HBASE_REGIONSERVER-START</command>
          <requires>HBASE_MASTER-STARTED</requires>
        </commandOrder>
      </commandOrders>
      <components>
        <component>
          <name>HBASE_MASTER</name>
          <category>MASTER</category>
          <minInstanceCount>1</minInstanceCount>
          <maxInstanceCount>2</maxInstanceCount>
          <commandScript>
            <script>scripts/hbase_master.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>

        <component>
          <name>HBASE_REGIONSERVER</name>
          <category>SLAVE</category>
          <minInstanceCount>1</minInstanceCount>
          <commandScript>
            <script>scripts/hbase_regionserver.py</script>
            <scriptType>PYTHON</scriptType>
          </commandScript>
        </component>

        <component>
          <name>HBASE_CLIENT</name>
          <category>CLIENT</category>
          <minInstanceCount>0</minInstanceCount>
          <commandScript>
            <script>scripts/hbase_client.py</script>
            <scriptType>PYTHON</scriptType>
          </commandScript>
        </component>
      </components>

      <osSpecifics>
        <osSpecific>
          <osType>any</osType>
          <packages>
            <package>
              <type>tarball</type>
              <name>files/hbase-0.96.1-hadoop2-bin.tar.gz</name>
            </package>
          </packages>
        </osSpecific>
      </osSpecifics>

    </service>
  </services>
</metainfo>
