module.exports = (service) ->
options = service.options
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]
Identities
options.hadoop_group = merge {}, service.deps.hadoop_core.options.hadoop_group, options.hadoop_group
options.group = merge service.deps.hbase_master[0].options.group, options.group
options.user = merge service.deps.hbase_master[0].options.user, options.user
options.admin = merge service.deps.hbase_master[0].options.admin, options.admin
# Kerberos Test Principal
options.test_krb5_user ?= service.deps.test_user.options.krb5.user
Environment
# Layout
options.conf_dir ?= '/etc/hbase-regionserver/conf'
# We could use hdfs_dn but defaultFS isnt defined
options.hdfs_conf_dir ?= service.deps.hdfs_client.options.conf_dir
options.log_dir ?= '/var/log/hbase'
options.pid_dir ?= '/var/run/hbase'
# Env & Java
options.env ?= {}
# http://blog.sematext.com/2012/07/16/hbase-memstore-what-you-should-know/
# Keep hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs just
# Value is a bit above hbase.regionserver.global.memstore.lowerLimit * HBASE_HEAPSIZE
# 'HBASE_REGIONSERVER_OPTS ?= '-Xmn200m -Xms4096m -Xmx4096m' # Default in HDP companion file
options.java_home ?= "#{service.deps.java.options.java_home}"
options.heapsize ?= '1024m'
options.newsize ?= '200m'
# Misc
options.fqdn = service.node.fqdn
options.hostname = service.node.hostname
options.iptables ?= service.deps.iptables and service.deps.iptables.options.action is 'start'
options.clean_logs ?= false
System Options
options.opts ?= {}
options.opts.base ?= ''
options.opts.java_properties ?= {}
options.opts.jvm ?= {}
options.opts.jvm['-Xms'] ?= options.heapsize
options.opts.jvm['-Xmx'] ?= options.heapsize
options.opts.jvm['-XX:NewSize='] ?= options.newsize #should be 1/8 of hbase regionserver heapsize
options.opts.jvm['-XX:MaxNewSize='] ?= options.newsize #should be 1/8 of hbase regionserver heapsize
Registration
for srv in service.deps.hbase_master
srv.options.regionservers[service.node.fqdn] ?= true
for srv in service.deps.hbase_regionserver
srv.options.regionservers ?= {}
srv.options.regionservers[service.node.fqdn] ?= true
Configuration
options.hbase_site ?= {}
options.hbase_site['hbase.regionserver.port'] ?= '60020'
options.hbase_site['hbase.regionserver.info.port'] ?= '60030'
options.hbase_site['hbase.ssl.enabled'] ?= 'true'
options.hbase_site['hbase.regionserver.handler.count'] ?= 60 # HDP default
Security
options.hbase_site['hbase.security.authentication'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.security.authentication']
if options.hbase_site['hbase.security.authentication'] is 'kerberos'
options.hbase_site['hbase.master.kerberos.principal'] = service.deps.hbase_master[0].options.hbase_site['hbase.master.kerberos.principal']
options.hbase_site['hbase.regionserver.kerberos.principal'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.regionserver.kerberos.principal']
options.hbase_site['hbase.regionserver.keytab.file'] ?= '/etc/security/keytabs/rs.service.keytab'
options.hbase_site['hbase.security.authentication.ui'] ?= 'kerberos'
options.hbase_site['hbase.security.authentication.spnego.kerberos.principal'] ?= "HTTP/_HOST@#{options.krb5.realm}"
options.hbase_site['hbase.security.authentication.spnego.kerberos.keytab'] ?= service.deps.hadoop_core.options.core_site['hadoop.http.authentication.kerberos.keytab']
options.hbase_site['hbase.regionserver.global.memstore.upperLimit'] = null # Deprecated from HDP 2.3
options.hbase_site['hbase.regionserver.global.memstore.size'] = '0.4' # Default in HDP Companion Files
options.hbase_site['hbase.coprocessor.region.classes'] = service.deps.hbase_master[0].options.hbase_site['hbase.coprocessor.region.classes']
# Jaas file
options.opts.java_properties['java.security.auth.login.config'] ?= "#{options.conf_dir}/hbase-regionserver.jaas"
# Copy the Master keytab if a colocalised Master is found and if their principals are equal.
local_master = service.deps.hbase_master.filter( (srv) -> srv.node.fqdn is service.node.fqdn)[0]
are_principal_equal = local_master.options.hbase_site['hbase.master.kerberos.principal'] is options.hbase_site['hbase.regionserver.kerberos.principal'] if local_master
if local_master and are_principal_equal
options.copy_master_keytab ?= local_master.options.hbase_site['hbase.master.keytab.file']
Configuration Distributed mode
for property in [
'zookeeper.znode.parent'
'zookeeper.session.timeout'
'hbase.cluster.distributed'
'hbase.rootdir'
'hbase.zookeeper.quorum'
'hbase.zookeeper.property.clientPort'
'dfs.domain.socket.path'
] then options.hbase_site[property] ?= service.deps.hbase_master[0].options.hbase_site[property]
Configuration for HA Reads
HA properties must be available to masters and regionservers.
properties = [
'hbase.regionserver.storefile.refresh.period'
'hbase.regionserver.meta.storefile.refresh.period'
'hbase.region.replica.replication.enabled'
'hbase.master.hfilecleaner.ttl'
'hbase.master.loadbalancer.class'
'hbase.meta.replica.count'
'hbase.region.replica.wait.for.primary.flush'
'hbase.region.replica.storefile.refresh.memstore.multiplier'
]
for property in properties then options.hbase_site[property] ?= service.deps.hbase_master[0].options.hbase_site[property]
Configuration for security
options.hbase_site['hbase.security.authorization'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.security.authorization']
options.hbase_site['hbase.rpc.engine'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.rpc.engine']
options.hbase_site['hbase.superuser'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.superuser']
options.hbase_site['hbase.bulkload.staging.dir'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.bulkload.staging.dir']
Configuration Quota
options.hbase_site['hbase.quota.enabled'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.quota.enabled']
options.hbase_site['hbase.quota.refresh.period'] ?= service.deps.hbase_master[0].options.hbase_site['hbase.quota.refresh.period']
Configuration for metrics
Metrics information are entirely derived from the Master.
options.metrics ?= service.deps.hbase_master[0].options.metrics
Configuration for Log4J
options.log4j = merge {}, service.deps.log4j?.options, options.log4j
options.opts.java_properties['hbase.security.log.file'] ?= 'SecurityAuth-Regional.audit'
#HBase bin script use directly environment bariables
options.env['HBASE_ROOT_LOGGER'] ?= 'INFO,RFA'
options.env['HBASE_SECURITY_LOGGER'] ?= 'INFO,RFAS'
if options.log4j.remote_host? and options.log4j.remote_port?
# adding SOCKET appender
options.log4j.socket_client ?= "SOCKET"
# Root logger
if options.env['HBASE_ROOT_LOGGER'].indexOf(options.log4j.socket_client) is -1
then options.env['HBASE_ROOT_LOGGER'] += ",#{options.log4j.socket_client}"
# Security Logger
if options.env['HBASE_SECURITY_LOGGER'].indexOf(options.log4j.socket_client) is -1
then options.env['HBASE_SECURITY_LOGGER']+= ",#{options.log4j.socket_client}"
options.opts.java_properties['hbase.log.application'] = 'hbase-regionserver'
options.opts.java_properties['hbase.log.remote_host'] = options.log4j.remote_host
options.opts.java_properties['hbase.log.remote_port'] = options.log4j.remote_port
options.log4j.socket_opts ?=
Application: '${hbase.log.application}'
RemoteHost: '${hbase.log.remote_host}'
Port: '${hbase.log.remote_port}'
ReconnectionDelay: '10000'
options.log4j.properties = merge options.log4j.properties, appender
type: 'org.apache.log4j.net.SocketAppender'
name: options.log4j.socket_client
logj4: options.log4j.properties
properties: options.log4j.socket_opts
Wait
options.wait_krb5_client = service.deps.krb5_client.options.wait
options.wait_zookeeper_server = service.deps.zookeeper_server[0].options.wait
options.wait_hdfs_nn = service.deps.hdfs_nn[0].options.wait
options.wait_hbase_master = service.deps.hbase_master[0].options.wait
options.wait = {}
for srv in service.deps.hbase_regionserver
srv.options.hbase_site ?= {}
srv.options.hbase_site['hbase.regionserver.port'] ?= '60020'
srv.options.hbase_site['hbase.regionserver.info.port'] ?= '60030'
options.wait.rpc = for srv in service.deps.hbase_regionserver
host: srv.node.fqdn
port: srv.options.hbase_site['hbase.regionserver.port']
options.wait.info = for srv in service.deps.hbase_regionserver
host: srv.node.fqdn
port: srv.options.hbase_site['hbase.regionserver.info.port']
for srv in service.deps.hbase_master
srv.options.wait_hbase_regionserver ?= options.wait
Dependencies
appender = require '../../lib/appender'
{merge} = require '@nikitajs/core/lib/misc'