#
# 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.
#

# Configuration for the Drill-on-YARN feature. Provides information needed to
# launch the Drill Application Master under YARN, and to configure the
# Drill cluster.
#
# This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md
# for more information.
#
# To create your own configuration file, copy only those lines that you want
# to change. All values have reasonable defaults.

drill.yarn: {

  # Name displayed in the YARN management UI for your Drill cluster.

  app-name: "Drill-on-YARN"

  dfs: {
    # Connection to the distributed file system. Defaults to work with
    # a single-node Drill on the local machine.
    # Omit this if you want to get the configuration either from the
    # Hadoop config (set with config-dir above) or from the
    # $DRILL_HOME/core-site.xml.

    connection: "hdfs://localhost/"

    # The distributed file system (DFS such as HDFS) directory in which to store the Drill
    # archive file. Change this if you launch multiple Drill clusters to give
    # each cluster it's own upload location.

    app-dir: "/users/drill"
  }

  yarn: {

    # Specify the queue you want to use when launching Drill-on-YARN.

    queue: "default"
  }

  drill-install: {

    # The archive (in .tar.gz format) that contains your Drill software, your custom jar files,
    # and your Drill configuration. This is the path the file on your client machine.
    # The base name is used when uploading the file to DFS.

    client-path: "/etc/drill/drill.tar.gz"

    # Set this if the name of the directory inside your archive file differs from
    # the name of the file. That is, by default, my-drill.tar.gz should contain
    # my-drill as its directory name.

    # dir-name: "drill"

    # Note that there are no parameters for the site directory. You specify the
    # site directory location on client launch; Drill-on-YARN automatically
    # creates an archive of that directory.

    # Set the Java java.library.path option to files that pre-exist on
    # each Drillbit node. (This is not for libraries that are distributed
    # by YARN.) (Place Drill-specific libraries in $DRILL_SITE/lib.)

    library-path: "/opt/libs"
  }

  # Application Master settings. You should not have to change these.

  am: {

    # Heap memory for the AM. Change this only if you run a large cluster and
    # encounter memory errors.

    heap: "450M"

    # Amount of memory to allocate for the YARN container. Adjust this only if
    # you adjust the heap amount above.

    memory-mb: 512

    # Optional label to apply to the AM request. Restricts the AM to run on
    # only nodes with the label. Leave blank unless you need to restrict AM
    # location.

    node-label-expr: "drill-am"
  }

  # Settings for the Application Master's internal web server.

  http: {

    # Listen port. Change this if you run multiple Drill clusters as
    # YARN may allocate two or more AMs on the same YARN worker node.

    port: 8048

    # Turn this on to enable HTTPS for the AM web UI.

    ssl-enabled: true

    # The type of authorization to use for the AM web UI. One of
    # "none" (no authorization, the default), "drill" (use Drill's
    # configured authentication system), or "simple" (use the user name
    # and password defined here.) With Drill authentication enabled, only
    # the user that launched Drill-on-YARN can access the Drill-on-YARN
    # web UI. With simple authentication, then the defined user name and
    # password is the only valid user.

    auth-type: "drill"

    # Set only for the simple auth type.

    user_name: "fred"
    password: "wilma"

    # Set this to some value to protect the management REST calls.
    # When the key is set, each rest call must include the key=value
    # parameter. This is not high security, just a speed-bump to prevent
    # accidental cluster changes.

    rest-key=""
  }

  # Configuration for each Drillbit. Drill requires that all Drillbits use the
  # same configuration.

  drillbit: {

    # The amount of heap memory to allocate to Drill. This is the equivalent of the
    # DRILL_HEAP environment variable in drill-env.sh when launching Drill outside
    # of YARN.

    heap: "4G"

    # The maximum amount of direct memory to allocate to Drill. This is the equivalent of the
    # DRILL_MAX_DIRECT_MEMORY environment variable in drill-env.sh when launching Drill outside
    # of YARN.

    max-direct-memory: "8G"

    # The amount of memory to alocate to the JVM code cache which holds the classes
    # that Drill creates dynamically for each query execution. The default setting is
    # fine for most applications.

    code-cache: "1G"

    # The amount of memory to allocate to each Drill-bit. This is the amount of memory requested
    # from YARN for each drill-bit. This must be sufficient for
    # heap + max-direct-memory + code-cache + JVM overhead (assume 1G)

    memory-mb: 14336

    # The number of YARN virtual cores to allocate to each drill-bit.

    vcores: 4

    # The number of disk channels (or spindles) that Drill typically uses.
    # This value is supported only only selected YARN distributions.

    disks: 3

    # Add to the class path. Use for things such as HBase, etc. which must be installed
    # on every node. (Drill automatically adds its own class path as well as the one
    # provided by YARN.)

    classpath: ""
  }

  # The groups of hosts on which to launch Drill. Each group can be one of several types.
  #
  # Note: This version supports a single group. The example below has multiple groups
  # only to illustrate the various group types.

  cluster: [
    {
      # Arbitrary name, just used for error and statistics reporting.
      # Defaults to "group-" group index, starting at 1.

      name: "group1"

      # Basic group: let YARN pick any available node.

      type: "basic"

      # Number of Drill-bits to run. (Drill-on-YARN runs each on a separate host,
      # so this is also the number of hosts that will run Drill.)

      count: 2
    }
  ]
}
