Menu

Druid Configure

Example:

{
  "version": "0.9.1.1"
}
module.exports = (service) ->
  options = service.options

Environment

  # Layout
  options.dir ?= '/opt/druid'
  options.conf_dir ?= '/etc/druid/conf'
  options.log_dir ?= '/var/log/druid'
  options.pid_dir ?= '/var/run/druid'
  options.hadoop_conf_dir = service.deps.hdfs_client.options.conf_dir
  # Java
  options.server_opts ?= ''
  options.server_heap ?= ''
  # Package
  options.version ?= '0.10.0'
  options.source ?= "http://static.druid.io/artifacts/releases/druid-#{options.version}-bin.tar.gz"
  options.source_mysql_extension ?= "http://static.druid.io/artifacts/releases/mysql-metadata-storage-#{options.version}.tar.gz"

Identities

  # Group
  options.group = name: options.group if typeof options.group is 'string'
  options.group ?= {}
  options.group.name ?= 'druid'
  options.group.system ?= true
  # User
  options.user = name: options.user if typeof options.user is 'string'
  options.user ?= {}
  options.user.name ?= 'druid'
  options.user.system ?= true
  options.user.comment ?= 'Druid User'
  options.user.home ?= "/var/lib/#{options.user.name}"
  options.user.groups ?= ['hadoop']
  options.user.gid = options.group.name

Kerberos

  options.krb5 ?= {}
  options.krb5.realm ?= service.deps.krb5_client.options.etc_krb5_conf?.libdefaults?.default_realm
  throw Error 'Required Options: "realm"' unless options.krb5.realm
  options.krb5.admin ?= service.deps.krb5_client.options.admin[options.krb5.realm]
  # Kerberos Druid Admin
  options.krb5_user ?= {}
  options.krb5_user.principal ?= "druid@#{options.krb5.realm}"
  options.krb5_user.password ?= "druid123"
  # Kerberos Druid Service
  options.krb5_service ?= {}
  options.krb5_service.principal ?= "druid/#{service.node.fqdn}@#{options.krb5.realm}"
  options.krb5_service.keytab ?= "#{options.dir}/conf/druid/_common/druid.keytab"
  # Kerberos HDFS Admin
  options.hdfs_krb5_user = service.deps.hdfs_client.options.krb5_user

Configuration

  options.timezone ?= 'UTC'
  options.common_runtime ?= {}
  # Extensions
  # Note, Mysql extension isnt natively supported due to licensing issues
  # Seems like it is either postgresql or mysql extension ("postgresql-metadata-storage", "mysql-metadata-storage")
  # "druid-s3-extensions",
  options.common_runtime['druid.extensions.loadList'] = JSON.parse options.common_runtime['druid.extensions.loadList'] if options.common_runtime['druid.extensions.loadList']
  options.common_runtime['druid.extensions.loadList'] ?= ["druid-kafka-eight", "druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "druid-hdfs-storage"]
  # Logging
  options.common_runtime['druid.startup.logging.logProperties'] ?= 'true'
  # Zookeeper
  zookeeper_quorum = for srv in service.deps.zookeeper_server
    continue unless srv.options.config['peerType'] is 'participant'
    "#{srv.node.fqdn}:#{srv.options.config['clientPort']}"
  options.common_runtime['druid.zk.service.host'] ?= "#{zookeeper_quorum.join ','}"
  options.common_runtime['druid.zk.paths.base'] ?= '/druid'

Metadata storage

  options.supported_db_engines ?= ['mysql', 'mariadb', 'postgresql']
  options.db ?= {}
  options.db.engine ?= service.deps.db_admin.options.engine
  Error 'Unsupported database engine' unless options.db.engine in options.supported_db_engines
  options.db = merge {}, service.deps.db_admin.options[options.db.engine], options.db
  options.db.database ?= 'druid'
  options.db.username ?= 'druid'
  throw Error "Require Options: db.password" unless options.db.password
  switch options.db.engine
    when 'postgresql'
      options.common_runtime['druid.metadata.storage.type'] ?= 'postgresql'
      options.common_runtime['druid.metadata.storage.connector.connectURI'] ?= "jdbc:postgresql://#{options.db.host}:#{options.db.port}/#{options.db.database}"
      options.common_runtime['druid.metadata.storage.connector.host'] ?= "#{options.db.host}"
      options.common_runtime['druid.metadata.storage.connector.port'] ?= "#{options.db.port}"
      options.common_runtime['druid.extensions.loadList'].push "postgresql-metadata-storage"
    when 'mysql', 'mariadb'
      options.common_runtime['druid.metadata.storage.type'] ?= 'mysql'
      options.common_runtime['druid.metadata.storage.connector.connectURI'] ?= "jdbc:mysql://#{options.db.host}:#{options.db.port}/#{options.db.database}"
      options.common_runtime['druid.metadata.storage.connector.host'] ?= "#{options.db.host}"
      options.common_runtime['druid.metadata.storage.connector.port'] ?= "#{options.db.port}"
      options.common_runtime['druid.extensions.loadList'].push "mysql-metadata-storage"
    when 'derby'
      options.common_runtime['druid.metadata.storage.type'] ?= 'derby'
      options.common_runtime['druid.metadata.storage.connector.connectURI'] ?= "jdbc:derby://#{service.node.fqdn}:1527/var/druid/metadata.db;create=true"
      options.common_runtime['druid.metadata.storage.connector.host'] ?= "#{service.node.fqdn}"
      options.common_runtime['druid.metadata.storage.connector.port'] ?= '1527'
  options.common_runtime['druid.metadata.storage.connector.user'] ?= "#{options.db.username}"
  options.common_runtime['druid.metadata.storage.connector.password'] ?= "#{options.db.password}"
  # Deep storage
  # Extension "druid-hdfs-storage" added to "loadList"
  options.common_runtime['druid.storage.type'] ?= 'hdfs'
  options.common_runtime['druid.storage.storageDirectory'] ?= '/apps/druid/segments'
  # Indexing service logs
  options.common_runtime['druid.indexer.logs.type'] ?= 'hdfs'
  options.common_runtime['druid.indexer.logs.directory'] ?= '/apps/druid/indexing-logs'
  # Service discovery
  options.common_runtime['druid.selectors.indexing.serviceName'] ?= 'druid/overlord'
  options.common_runtime['druid.selectors.coordinator.serviceName'] ?= 'druid/coordinator'
  # Monitoring
  options.common_runtime['druid.monitoring.monitors'] ?= '["com.metamx.metrics.JvmMonitor"]'
  options.common_runtime['druid.emitter'] ?= 'logging'
  options.common_runtime['druid.emitter.logging.logLevel'] ?= 'info'
  options.common_runtime['druid.extensions.loadList'] = JSON.stringify options.common_runtime['druid.extensions.loadList']

Command Specific

  # Ensure "prepare" is executed locally only once
  options.prepare = service.node.id is service.instances[0].node.id

Dependencies

{merge} = require '@nikitajs/core/lib/misc'