环境信息
因使用要求,需要临时在集群中加装Hue。Hue所在集群的情况如下:
- CentOS 7.4
- Hue 4.10
- Hadoop 3.x
- Hive 3.x
- HBase 2.x
本篇记录Hadoop集群安装Hue的全过程。
Hue编译
Hue 4.10版本下载可在GitHub Release下载:Release Release 4.10 · cloudera/hue (github.com)
在编译前需要在环境环境安装如下内容:
yum install sqlite-devel
yum install ant asciidoc cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-plain gcc gcc-c++ krb5-devel libffi-devel libxml2-devel libxslt-devel make mysql mysql-devel openldap-devel python-devel gmp-devel
yum install npm
然后将下载好的源代码包解压,进入源代码解压的根目录执行:
make install
编译成功后Hue可在编译机启动。如果需要在其他机器部署,需要将usr/local/hue
目录打包压缩后复制到目标机器。
安装和基础配置
将上一步编译打包后的Hue解压在目标机器usr/local/hue
。然后配置/usr/local/hue/desktop/conf/hue.ini
:
http_host=0.0.0.0
http_port=8888
time_zone=Asia/Shanghai
# Webserver runs as this user
server_user=hue
server_group=hue
配置项解释如下:
- http_host: bind host。Hue绑定什么IP。0.0.0.0表示多网络场景可以用任何一个网络下的IP访问Hue。
- http_port: HTTP端口号。
- time_zone: 时区。
-
server_user
和server_group
: Hue web server启动使用的用户身份。默认为Hue,按需修改。
MySQL元数据同步
Hue自身的配置需要一个外部数据库帮忙存储。默认不配置情况下Hue使用的是sqlite3。sqlite3储存形式仅仅是一个数据库文件。没有自身的服务。经过博客作者验证Hue配置成sqlite3使用的时候还会出现database is locked
的错误。所以说除了学习用途不建议Hue配置为默认的sqlite3。建议使用MySQL等其他数据库。
下面给出配置MySQL数据库的步骤。
首先需要修改hue.ini
文件的[[database]]
和[[librdbms]]
节,如下所示。
[[database]]
engine=mysql
host=mysqlhost
port=3306
user=hue
password=hue
name=hue
[librdbms]
[[databases]]
name=hue
engine=mysql
host=mysqlhost
port=3306
user=hue
password=hue
其中name
为hue使用的database名称。MySQL中的hue用户,hue数据库和hue用户访问hue数据库的权限需要提前创建并配置好。配置的方法可查阅MySQL相关资料,这里不再赘述。
到这一步,我们创建好的hue数据库里面是空的,没有任何表。因此我们需要hue初始化数据库。执行下面命令创建元数据表:
/usr/local/hue/build/env/bin/hue syncdb
/usr/local/hue/build/env/bin/hue migrate
执行成功后在hue数据库执行show tables
,可以发现hue为我们创建好了所有运行时候用到的table。
启动Hue
到这里位置Hue的安装和基本配置已完成。可以尝试启动Hue。启动命令如下:
nohup /usr/local/hue/build/env/bin/supervisor &
然后使用浏览器访问hue的IP 8888端口(按照例子中的配置)。如果可以打开Hue的web页面,说明前面操作无误。可以使用admin/admin创建新用户并登录。
下面介绍Hue集成部分大数据组件的方法。
HDFS文件浏览集成
若使用Hue浏览HDFS中的数据,要求Hadoop开启webHDFS。
在hdfs-site.xml
中增加如下配置:
dfs.webhdfs.enabled
true
重启Hadoop后修改hue.ini
:
[[hdfs_clusters]]
[[[default]]]
fs_defaultfs=hdfs://hadoop_ip:8020
webhdfs_url=http://hadoop_ip:50070/webhdfs/v1
然后重启Hue。
注意:
如果出现User: xxx is not allowed to impersonate xxx
错误,需要增加Hadoop用户代理的配置。类似如下:
core-site.xml
:
hadoop.proxyuser.hue.hosts
*
hadoop.proxyuser.hue.groups
*
httpfs-site.xml
:
httpfs.proxyuser.hue.hosts
*
httpfs.proxyuser.hue.groups
*
HBase集成
HBase要求启动thrift server:
./hbase-daemons.sh start thrift2
默认HBase thrift server端口号为9090。如需修改可参考HBase文档。
然后修改hue.ini
:
[hbase]
hbase_clusters=(Cluster|hbase_thrift_server_ip:9090)
hbase_conf_dir=/path/to/hbase/conf
其中hbase_clusters
为HBase的thrift server地址和端口号,务必按照给出的格式配置,即(Cluster|ip:port)
。
配置完毕后重启Hue。
Hive集成
Hive集成需要提供hiveserver2的地址和端口号,以及metastore的地址。
修改hue.ini
,示例如下:
[beeswax]
hive_server_host=hiveserver2_ip
hive_server_port=10000
hive_server_http_port=10001
hive_metastore_host=metastore_ip
hive_conf_dir=/path/to/hive/conf
# auth_username=
# auth_password=
use_sasl=true
注意,需要配置use_sasl=true
否则会出现如下错误:
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
Hive如果没有开启认证,无需配置auth_username
和auth_password
。
最后重启Hue。
查询Hive表的时候可能会遇到如下错误:
Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found (code THRIFTTRANSPORT): TTransportException('Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found',)
这个错误说意味着我们没有安装cyrus-sasl
。安装的方法为执行:
yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5
Kerberos 集成
修改hue.ini
Kerberos配置相关部分。如下所示:
[[kerberos]]
# Path to Hue's Kerberos keytab file
# hue使用的keytab
## hue_keytab=
# Kerberos principal name for Hue
# hue的principal
## hue_principal=hue/hostname.foo.com
# Frequency in seconds with which Hue will renew its keytab
## REINIT_FREQUENCY=3600
# Path to keep Kerberos credentials cached
# hue的ticket cache,需要配置为default_user配置项对应用户的ticket cache目录(默认为hue,可以通过klist查看)
## ccache_path=/var/run/hue/hue_krb5_ccache
HDFS开启Kerberos认证需要配置:
[[hdfs_clusters]]
# HA support by using HttpFs
[[[default]]]
# 省略其他配置……
# Change this if your HDFS cluster is Kerberos-secured
security_enabled=true