本文主要讲解了如何安装并启动Hue 4.1.0,然后连接impala集群进行sql查询。其中,还包含了在安装部署过程中遇到的一些问题,希望可以帮助到大家。
首先,我们需要下载hue的源代码,进行编译,这里有两种方式可以下载:
1. 通过git命令从github上直接拉取对应版本的分支即可,hue的官方git地址是:https://github.com/cloudera/hue,可以通过如下命令直接拉取
git clone https://github.com/cloudera/hue.git
但是有一个问题,因为我是在公司的服务器上进行git clone,下载速度会非常慢,慢的令人发指!此时,也可以通过本地使用迅雷直接下载zip包,然后上传至服务器。但是我在服务器上使用unzip进行解压的过程中发现出现了错误:
上网搜索发现,好像是zip命令的一个bug。因此,我又采用了下面的方法来获取源码;
2. 可以直接通过hue的官网下载相应版本的hue:http://gethue.com/,可以从这里面选取各个版本的hue下载,然后进行编译:
使用这种方法可以直接在本地用迅雷下载tar包,然后上传至服务器进行解压。这种方式下载会很快,而且使用tar命令进行解压也不会有问题。但是,该方法下载的源码是没有git相关信息的,因此具体采用哪种方法看大家自己的需求吧。我这里选择的是4.1版本的hue。
我们将刚刚下载的压缩包解压至要安装的目录下,然后进入相应的目录,准备编译(假设我们这里安装目录为/home/hue-4.1.0)。由于我这边选择的4.1.0版本,因此,下面安装所依赖的一些组件,都是以该版本为主,具体可参考:https://github.com/cloudera/hue/tree/branch-4.1。这里我就简要介绍一下各个主要的步骤,注意,我服务器所在的环境是debian 8,因此主要以该系统为主,其他系统也类似。
1. 安装依赖的组件和库;
sudo apt-get install git ant gcc g++ libffi-dev libkrb5-dev libmysqlclient-dev libsasl2-dev libsasl2-modules-gssapi-mit libsqlite3-dev libssl-dev libxml2-dev libxslt-dev make maven libldap2-dev python-dev python-setuptools libgmp3-dev
2. 安装JDK,这里就不多做介绍,比较简单;
3. 源码编译
cd /home/hue-4.1.0
make apps
编译完成之后,就可以准备启动hue服务了;另外,如果要重新编译的话,可以使用如下命令进行清理:
# Remove desktop build products
make clean
# Remove desktop and thirdparty build products
make distclean
也可以通过直接make命令查看可以选择的参数:
如果在编译过程中,出现了找不到某个包或者软件的问题,请按照错误提示依次下载安装,在这个过程中需要root权限,请提前准备好。
编译完成之后,我们需要对配置文件进行配置,hue的配置文件位于desktop/conf/pseudo-distributed.ini,我们可以通过对该文件进行修改,来进行相应的配置,这里主要介绍几个比较重要的配置。
首先,由于数据库引擎我使用了mysql,所有需要配置mysql的相关选项,其中name表示创建的各个表所属的数据库。
[[database]]
# Database engine is typically one of:
# postgresql_psycopg2, mysql, sqlite3 or oracle.
#
# Note that for sqlite3, 'name', below is a path to the filename. For other backends, it is the database name.
# Note for Oracle, options={"threaded":true} must be set in order to avoid crashes.
# Note for Oracle, you can use the Oracle Service Name by setting "host=" and "port=" and then "name=:/".
# Note for MariaDB use the 'mysql' engine.
engine=mysql
host=127.0.0.1
port=3306
user=hue
password=hue
# Execute this script to produce the database password. This will be used when 'password' is not set.
## password_script=/path/script
name=hue
## options={}
其次,由于线上需要配置kerberos认证,因此我们需要配置相应的各个参数。
[[kerberos]]
# Path to Hue's Kerberos keytab file
hue_keytab=/home/keytab/hue.keytab
# Kerberos principal name for Hue
hue_principal=hue/xxx@xxx
# Frequency in seconds with which Hue will renew its keytab
keytab_reinit_frequency=3600
# Path to keep Kerberos credentials cached
ccache_path=/tmp/hue/hue_krb5_ccache
# Path to kinit
kinit_path=/usr/bin/kinit
注意,如果没有配置ccache_path这个参数,那么在启动hue的时候,可能会报“No such file or directory: '/var/run/hue/hue_krb5_ccache'”这个错误,如下所示:
由于我这边主要是为了连接impala,所以还需要进行impala的相关配置,如下所示:
[impala]
# Host of the Impala Server (one of the Impalad)
server_host=xxx
# Port of the Impala Server
server_port=21050
# Kerberos principal
impala_principal=impala/xxx@xxx
其他的一些相关的,例如hadoop,hive之类的配置,网上有很多资料,这里就不再一一列举出来,大家可以自行搜索并参考。
启动
在官方文档中,我们可以看到,编译完成之后,就是通过如下命令启动:
build/env/bin/hue runserver
# start the production server (but lose the automatic reloading after source modification)
build/env/bin/supervisor
但是,实际上,直接启动会有问题,如下所示:
提示“Table 'hue.south_migrationhistory' doesn't exist”,在网上查阅各种资料后发现,由于我是使用了mysql来存储的元数据,因此在启动服务前还有一些其他的准备工作要做,关于mysql的具体配置,我在前面已经介绍过了,这里就不再赘述。可以通过下面两条命令创建所需要的一些表:
./build/env/bin/hue syncdb --noinput
./build/env/bin/hue migrate
更多具体的可以参考:https://www.cloudera.com/documentation/enterprise/5-6-x/topics/cdh_ig_hue_database.html。执行完两条命令之后,我们就可以在mysql的对应库(我们在上面配置的name为hue,这里的库就是指这个)下面看到相应的表了:
上图中我只截图了部分表。此时,我们就可以再次通过命令来启动hue,此时我们发现可以正常启动了,然后通过http://hostname:8000就可以访问hue的页面了:
由于是第一次进入,所以我们需要创建新用户,这个用户就是超级用户(相当于管理员),本以为创建之后就可以愉快的查询了,结果没想到有出现了下面的错误:
AttributeError 'Config' object has no attribute 'get',在网上搜索了一阵子之后,发现跟配置文件里面的如下配置项有关:
然后,我将app_blacklist注释之后,再使用刚刚创建的用户名和密码登录,发现登录成功,然后查询一切正常!
之后我又将app_blacklist配置了一些少量的值,发现也是可以正常使用的,说明是有某一个依赖的如果配置进去了,则会导致上面的错误,具体是哪一个我也没有过多研究,大家有兴趣的话可以自己研究研究。
到这里,Hue的安装和启动终于搞定了,真是一波三折!现在我们就可以愉快的使用hue来查询impala中的数据了,还是非常方便的。
关于其他的一些更多操作,我们可以通过直接执行build/env/bin/hue来查看可选项,包括创建超级用户,修改用户密码等等,如下所示:
上图只截图了部分命令,更多相关hue相关的信息可以参见hue官方文档。
问题一 Couldn't renew kerberos ticket问题
在本地执行/usr/bin/kinit -R -c /tmp/hue/hue_krb5_ccache失败,明显kerberos有问题,与hue无关。
问题二 error load database,TSocket read 0 bytes
经过排查发现,由于我们使用了代理用户,principal和be_principal不一样,因此导致hue在连接impalad的时候有kerberos认证失败的问题,因此建议使用impala的principal。即principal和be_principal使用同一个principle,然后hue的配置文件中impala_principal也配置为相同的principle。