Hue Configure
hdp.hue.ini.desktop.database.admin_username
(string) Database admin username used to create the Hue database user.hdp.hue.ini.desktop.database.admin_password
(string) Database admin password used to create the Hue database user.hue.ini
Configuration merged with default values and written to "/etc/hue/conf/hue.ini" file.hue.user
(object|string) The Unix Hue login name or a user object (see Nikita User documentation).hue.group
(object|string) The Unix Hue group name or a group object (see Nikita Group documentation).
Example:
{
"ryba": {
"hue: {
"user": {
"name": "hue", "system": true, "gid": "hue",
"comment": "Hue User", "home": "/usr/lib/hue"
},
"group": {
"name": "Hue", "system": true
},
"ini": {
"desktop": {
"database":
"engine": "mysql"
"password": "hue123"
"custom": {
banner_top_html: "HADOOP : PROD"
}
}
},
banner_style: 'color:white;text-align:center;background-color:red;',
clean_tmp: false
}
}
}
module.exports = irreversible: true, handler: ->
ryba = @config.ryba
hue = @config.ryba.hue ?= {}
Environment
hue.conf_dir ?= '/etc/hue/conf'
hue.log_dir ?= '/var/log/hue'
hue.clean_tmp ?= true
Identities
# Group
hue.group = name: hue.group if typeof hue.group is 'string'
hue.group ?= {}
hue.group.name ?= hue.user.name
hue.group.system ?= true
# User
hue.user ?= {}
hue.user = name: hue.user if typeof hue.user is 'string'
hue.user.name ?= 'hue'
hue.user.system ?= true
hue.user.gid = hue.group.name
hue.user.comment ?= 'Hue User'
hue.user.home = '/var/lib/hue'
Proxy Users
hadoop_ctxs = @contexts ['ryba/hadoop/hdfs_nn', 'ryba/hadoop/hdfs_dn', 'ryba/hadoop/yarn_rm', 'ryba/hadoop/yarn_nm']
for hadoop_ctx in hadoop_ctxs
hadoop_ctx.config.ryba ?= {}
hadoop_ctx.config.ryba.core_site ?= {}
hadoop_ctx.config.ryba.core_site["hadoop.proxyuser.#{hue.user.name}.hosts"] ?= '*'
hadoop_ctx.config.ryba.core_site["hadoop.proxyuser.#{hue.user.name}.groups"] ?= '*'
httpfs_ctxs = @contexts 'ryba/hadoop/httpfs'
for httpfs_ctx in httpfs_ctxs
httpfs_ctx.config.ryba ?= {}
httpfs_ctx.config.ryba.httpfs ?= {}
httpfs_ctx.config.ryba.httpfs.site ?= {}
httpfs_ctx.config.ryba.httpfs.site["httpfs.proxyuser.#{hue.user.name}.hosts"] ?= '*'
httpfs_ctx.config.ryba.httpfs.site["httpfs.proxyuser.#{hue.user.name}.groups"] ?= '*'
oozie_ctxs = @contexts 'ryba/oozie/server'
for oozie_ctx in oozie_ctxs
oozie_ctx.config.ryba ?= {}
oozie_ctx.config.ryba.oozie ?= {}
oozie_ctx.config.ryba.oozie.site ?= {}
oozie_ctx.config.ryba.oozie.site["oozie.service.ProxyUserService.proxyuser.#{hue.user.name}.hosts"] ?= '*'
oozie_ctx.config.ryba.oozie.site["oozie.service.ProxyUserService.proxyuser.#{hue.user.name}.groups"] ?= '*'
{hadoop_conf_dir, webhcat, hue, db_admin, core_site, hdfs, yarn} = ryba
nn_ctxs = @contexts 'ryba/hadoop/hdfs_nn', require('../hadoop/hdfs_nn/configure').handler
Configuration
hue.ini ?= {}
# todo, this might not work as expected after ha migration
nodemanagers = @contexts('ryba/hadoop/yarn_nm').map((ctx) -> ctx.config.host)
# Webhdfs should be active on the NameNode, Secondary NameNode, and all the DataNodes
# throw new Error 'WebHDFS not active' if ryba.hdfs.site['dfs.webhdfs.enabled'] isnt 'true'
hue.ca_bundle ?= '/etc/hue/conf/trust.pem'
hue.ssl ?= {}
hue.ssl.client_ca ?= null
throw Error "Property 'hue.ssl.client_ca' required in HA with HTTPS" if nn_ctxs.length > 1 and ryba.hdfs.site['dfs.http.policy'] is 'HTTPS_ONLY' and not hue.ssl.client_ca
# HDFS & YARN url
# NOTE: default to unencrypted HTTP
# error is "SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed"
# see https://github.com/cloudera/hue/blob/master/docs/manual.txt#L433-L439
# another solution could be to set REQUESTS_CA_BUNDLE but this isnt tested
# see http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cm_sg_ssl_hue.html
# Hue Install defines a dependency on HDFS client
nn_protocol = if nn_ctxs[0].config.ryba.hdfs.nn.site['dfs.http.policy'] is 'HTTP_ONLY' then 'http' else 'https'
nn_protocol = 'http' if nn_ctxs[0].config.ryba.hdfs.nn.site['dfs.http.policy'] is 'HTTP_AND_HTTPS' and not hue.ssl_client_ca
if nn_ctxs[0].config.ryba.hdfs.nn.site['dfs.ha.automatic-failover.enabled'] is 'true'
nn_host = nn_ctxs[0].config.ryba.active_nn_host
shortname = @contexts(hosts: nn_host)[0].config.shortname
nn_http_port = nn_ctxs[0].config.ryba.hdfs.nn.site["dfs.namenode.#{nn_protocol}-address.#{nn_ctxs[0].config.ryba.nameservice}.#{shortname}"].split(':')[1]
webhdfs_url = "#{nn_protocol}://#{nn_host}:#{nn_http_port}/webhdfs/v1"
else
nn_host = nn_ctxs[0].config.host
nn_http_port = nn_ctxs[0].config.ryba.hdfs.nn.site["dfs.namenode.#{nn_protocol}-address"].split(':')[1]
webhdfs_url = "#{nn_protocol}://#{nn_host}:#{nn_http_port}/webhdfs/v1"
# Support for RM HA was added in Hue 3.7
# rm_protocol = if yarn.site['yarn.http.policy'] is 'HTTP_ONLY' then 'http' else 'https'
# rm_hosts = @contexts('ryba/hadoop/yarn_rm').map((ctx) -> ctx.config.host)
# if rm_hosts.length > 1
# rm_host = ryba.yarn.active_rm_host
# rm_ctx = @context rm_host, require('../hadoop/yarn_rm').configure
# rm_port = rm_ctx.config.ryba.yarn.site["yarn.resourcemanager.address.#{rm_ctx.config.shortname}"].split(':')[1]
# yarn_api_url = if yarn.site['yarn.http.policy'] is 'HTTP_ONLY'
# then "http://#{yarn.site['yarn.resourcemanager.webapp.address.#{rm_ctx.config.shortname}']}"
# else "https://#{yarn.site['yarn.resourcemanager.webapp.https.address.#{rm_ctx.config.shortname}']}"
# else
# rm_host = rm_hosts[0]
# rm_ctx = @context rm_host, require('../hadoop/yarn_rm').configure
# rm_port = rm_ctx.config.ryba.yarn.site['yarn.resourcemanager.address'].split(':')[1]
# yarn_api_url = if yarn.site['yarn.http.policy'] is 'HTTP_ONLY'
# then "http://#{yarn.site['yarn.resourcemanager.webapp.address']}"
# else "https://#{yarn.site['yarn.resourcemanager.webapp.https.address']}"
# YARN ResourceManager
rm_ctxs = @contexts 'ryba/hadoop/yarn_rm', require('../hadoop/yarn_rm/configure').handler
throw Error "No YARN ResourceManager configured" unless rm_ctxs.length
is_yarn_ha = rm_ctxs.length > 1
rm_ctx = rm_ctxs[0]
yarn_id = if rm_ctx.config.ryba.yarn.rm.site['yarn.resourcemanager.ha.enabled'] is 'true' then ".#{rm_ctx.config.ryba.yarn.rm.site['yarn.resourcemanager.ha.id']}" else ''
rm_host = rm_ctx.config.host
# Strange, "rm_rpc_url" default to "http://localhost:8050" which doesnt make
# any sense since this isnt http
rm_rpc_add = rm_ctx.config.ryba.yarn.rm.site["yarn.resourcemanager.address#{yarn_id}"]
rm_rpc_url = "http://#{rm_rpc_add}"
rm_port = rm_rpc_add.split(':')[1]
yarn_api_url = if rm_ctx.config.ryba.yarn.rm.site['yarn.http.policy'] is 'HTTP_ONLY'
then "http://#{yarn.site['yarn.resourcemanager.webapp.address']}"
else "https://#{yarn.site['yarn.resourcemanager.webapp.https.address']}"
# NodeManager
[nm_ctx] = @contexts 'ryba/hadoop/yarn_nm', require('../hadoop/yarn_nm/configure').handler
node_manager_api_url = if @config.ryba.yarn.site['yarn.http.policy'] is 'HTTP_ONLY'
then "http://#{nm_ctx.config.ryba.yarn.site['yarn.nodemanager.webapp.address']}"
else "https://#{nm_ctx.config.ryba.yarn.site['yarn.nodemanager.webapp.https.address']}"
# WebHcat
[webhcat_ctx] = @contexts 'ryba/hive/webhcat', require('../hive/webhcat/configure').handler
if webhcat_ctx
webhcat_port = webhcat_ctx.config.ryba.webhcat.site['templeton.port']
templeton_url = "http://#{webhcat_ctx.config.host}:#{webhcat_port}/templeton/v1/"
# Configure HDFS Cluster
hue.ini['hadoop'] ?= {}
hue.ini['hadoop']['hdfs_clusters'] ?= {}
hue.ini['hadoop']['hdfs_clusters']['default'] ?= {}
# HA require webhdfs_url
hue.ini['hadoop']['hdfs_clusters']['default']['fs_defaultfs'] ?= core_site['fs.defaultFS']
hue.ini['hadoop']['hdfs_clusters']['default']['webhdfs_url'] ?= webhdfs_url
hue.ini['hadoop']['hdfs_clusters']['default']['hadoop_hdfs_home'] ?= '/usr/lib/hadoop'
hue.ini['hadoop']['hdfs_clusters']['default']['hadoop_bin'] ?= '/usr/bin/hadoop'
hue.ini['hadoop']['hdfs_clusters']['default']['hadoop_conf_dir'] ?= hadoop_conf_dir
# Configure YARN (MR2) Cluster
hue.ini['hadoop']['yarn_clusters'] ?= {}
hue.ini['hadoop']['yarn_clusters']['default'] ?= {}
hue.ini['hadoop']['yarn_clusters']['default']['resourcemanager_host'] ?= "#{rm_host}" # Might no longer be required after hdp2.2
hue.ini['hadoop']['yarn_clusters']['default']['resourcemanager_port'] ?= "#{rm_port}" # Might no longer be required after hdp2.2
hue.ini['hadoop']['yarn_clusters']['default']['submit_to'] ?= "true"
hue.ini['hadoop']['yarn_clusters']['default']['hadoop_mapred_home'] ?= '/usr/hdp/current/hadoop-mapreduce-client'
hue.ini['hadoop']['yarn_clusters']['default']['hadoop_bin'] ?= '/usr/hdp/current/hadoop-client/bin/hadoop'
hue.ini['hadoop']['yarn_clusters']['default']['hadoop_conf_dir'] ?= hadoop_conf_dir
hue.ini['hadoop']['yarn_clusters']['default']['resourcemanager_api_url'] ?= yarn_api_url
hue.ini['hadoop']['yarn_clusters']['default']['resourcemanager_rpc_url'] ?= rm_rpc_url
hue.ini['hadoop']['yarn_clusters']['default']['proxy_api_url'] ?= yarn_api_url
hue.ini['hadoop']['yarn_clusters']['default']['node_manager_api_url'] ?= node_manager_api_url
# JHS
[jhs_ctx] = @contexts 'ryba/hadoop/mapred_jhs', require('../hadoop/mapred_jhs/configure').handler
jhs_protocol = if jhs_ctx.config.ryba.mapred.site['mapreduce.jobhistory.http.policy'] is 'HTTP' then 'http' else 'https'
jhs_port = if jhs_protocol is 'http'
then jhs_ctx.config.ryba.mapred.site['mapreduce.jobhistory.webapp.address'].split(':')[1]
else jhs_ctx.config.ryba.mapred.site['mapreduce.jobhistory.webapp.https.address'].split(':')[1]
hue.ini['hadoop']['yarn_clusters']['default']['history_server_api_url'] ?= "#{jhs_protocol}://#{jhs_ctx.config.host}:#{jhs_port}"
# Configure components
hue.ini['liboozie'] ?= {}
hue.ini['liboozie']['oozie_url'] ?= ryba.oozie.site['oozie.base.url']
hue.ini['hcatalog'] ?= {}
hue.ini['hcatalog']['templeton_url'] ?= templeton_url
hue.ini['beeswax'] ?= {}
# HCatalog
[hs2_ctx] = @contexts 'ryba/hive/server2', require('../hive/server2/configure').handler
throw Error "No Hive HCatalog Server configured" unless hs2_ctx
hue.ini['beeswax']['hive_server_host'] ?= "#{hs2_ctx.config.host}"
hue.ini['beeswax']['hive_server_port'] ?= if hs2_ctx.config.ryba.hive.site['hive.server2.transport.mode'] is 'binary'
then hs2_ctx.config.ryba.hive.site['hive.server2.thrift.port']
else hs2_ctx.config.ryba.hive.site['hive.server2.thrift.http.port']
# http://www.cloudera.com/content/www/en-us/documentation/cdh/5-0-x/CDH5-Security-Guide/cdh5sg_hue_security.html
if hs2_ctx.config.ryba.hive.site['hive.server2.use.SSL']
throw Error 'Hue must be configured with ssl if communicating with hive over ssl' unless hue.ssl.client_ca
hue.ini['beeswax']['ssl'] ?= {}
hue.ini['beeswax']['ssl']['enabled'] ?= 'true'
hue.ini['beeswax']['ssl']['cacerts'] ?= "#{hue.conf_dir}/trust.pem"
hue.ini['beeswax']['ssl']['cert'] ?= "#{hue.conf_dir}/cert.pem"
hue.ini['beeswax']['ssl']['key'] ?= "#{hue.conf_dir}/key.pem"
# Desktop
hue.ini['desktop'] ?= {}
hue.ini['desktop']['django_debug_mode'] ?= '0' # Disable debug by default
hue.ini['desktop']['http_500_debug_mode'] ?= '0' # Disable debug by default
hue.ini['desktop']['http'] ?= {}
hue.ini['desktop']['http_host'] ?= '0.0.0.0'
hue.ini['desktop']['http_port'] ?= '8888'
hue.ini['desktop']['secret_key'] ?= 'jFE93j;2[290-eiwMYSECRTEKEYy#e=+Iei*@Mn<qW5o'
hue.ini['desktop']['smtp'] ?= {}
hue.ini['desktop']['time_zone'] ?= 'ETC/UTC'
# Desktop database
hue.ini['desktop']['database'] ?= {}
hue.ini['desktop']['database']['engine'] ?= db_admin.mysql.engine
hue.ini['desktop']['database']['host'] ?= db_admin.mysql.host
hue.ini['desktop']['database']['port'] ?= db_admin.mysql.port
hue.ini['desktop']['database']['user'] ?= 'hue'
hue.ini['desktop']['database']['password'] ?= 'hue123'
hue.ini['desktop']['database']['name'] ?= 'hue'
# Kerberos
hue.ini.desktop.kerberos ?= {}
hue.ini.desktop.kerberos.hue_keytab ?= '/etc/hue/conf/hue.service.keytab'
hue.ini.desktop.kerberos.hue_principal ?= "hue/#{@config.host}@#{ryba.realm}"
# Path to kinit
# For RHEL/CentOS 5.x, kinit_path is /usr/kerberos/bin/kinit
# For RHEL/CentOS 6.x, kinit_path is /usr/bin/kinit
hue.ini['desktop']['kerberos']['kinit_path'] ?= '/usr/bin/kinit'
# Uncomment all security_enabled settings and set them to true
hue.ini.hadoop ?= {}
hue.ini.hadoop.hdfs_clusters ?= {}
hue.ini.hadoop.hdfs_clusters.default ?= {}
hue.ini.hadoop.hdfs_clusters.default.security_enabled = 'true'
hue.ini.hadoop.mapred_clusters ?= {}
hue.ini.hadoop.mapred_clusters.default ?= {}
hue.ini.hadoop.mapred_clusters.default.security_enabled = 'true'
hue.ini.hadoop.yarn_clusters ?= {}
hue.ini.hadoop.yarn_clusters.default ?= {}
hue.ini.hadoop.yarn_clusters.default.security_enabled = 'true'
hue.ini.liboozie ?= {}
hue.ini.liboozie.security_enabled = 'true'
hue.ini.hcatalog ?= {}
hue.ini.hcatalog.security_enabled = 'true'