背景
hue编译了很多遍,在ubuntu和centos上都安装过,联网和离线场景也都搞过,也搞坏过好多次操作系统,可以说hue是我目前为止编译踩坑最多的组件之一。不过坑多也意味着成长,所以记录下该文章一方面来加深自己的印象,另一方面也是想跟大家分享下自己的收获。
1、包管理了解
linux包管理大体上分为两类:
一类是Debian 系列,其底层基于dpkg命令管理各种deb包的安装,上层又有apt、apt-get、aptitude等操作性更友好的包管理工具;
另一类是RedHat 系列,底层基于rpm命令管理各种rpm包的安装,上层也有yum等其它操作性更好的包管理工具。
2、编译思路与准备
首先挑选编译的hue版本,这里我挑选的是hue 4.10.0版本。其次到该github上查看编译的命令。
sudo 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 sqlite-devel gmp-devel
可以看到,hue编译依赖很多,所以尽量不要拷贝那一整套命令直接执行,尽量一个一个的执行,这样即使哪个依赖出问题了,你也可以更精确的知道,这很便于后续的问题解决。
还有就是我刚开始编译的时候会报libc等库不存在或者版本不匹配的问题,这里友情提醒下,千万不要改系统库,一个失误可能就是整个系统不能用。我把系统玩坏的情况基本都是想修改系统库,不过后面也学会了如何修复系统库,但是那个操作性价比太低,而且麻烦,所以不会介绍如何修复。
对于libc或zlib等不存在或版本不匹配问题,基本上升级一遍依赖库就可以解决。因为如果需要修改系统库才能编译hue,那么hue是不可能被很好的推广的,因此不到万不得已以及知道修改系统库的可能后果,真的不建议编译时修改系统库。
3、遇到的问题
因为我已经安装过很多次,当时没有记录问题,因此这里我贴一些我还有印象的问题(centos和ubuntu的都包含),如果大家有问题也可以在下面留言一起交流。
另外,每一次编译过程如果出现问题,在重新编译前尽量make clean一下,避免上次的错误的编译安装残留影响后面的重新安装。
3.1 centos - mysql已经安装过
报错信息如下:
Error: Package: 1:mariadb-devel-5.5.68-1.el7.x86_64 (os)
Requires: mariadb-libs(x86-64) = 1:5.5.68-1.el7
You could try using --skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
mysql-community-server-8.0.28-1.el7.x86_64 has missing requires of mysql-community-icu-data-files = ('0', '8.0.28', '1.el7')
通过报错可以知道,系统中有更高的版本mysql 8,但是我们需要的是低版本mariadb,而且此时回过头看我们上一步安装mysql的详细信息可以知道由于mysql8已经存在,所以yum install mysql是没有安装成功的。
解决方式:
rpm -qa|grep -i mysql 查看已经安装的高版本mysql组件
rpm -ev --nodeps 组件名 卸载已经安装的组件
3.2 npm下载不下来
报错信息如下:
npm ERR! code ETIMEDOUT
npm ERR! syscall connect
npm ERR! errno ETIMEDOUT
npm ERR! network request to https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz failed, reason: connect ETIM
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
解决方式:
npm默认镜像源为国外地址,所以下载会很慢或者下不下来,所以可以通过修改npm下载的镜像源为国内淘宝镜像源进行解决。
npm config set proxy null 清空代理
npm cache clean --force 清空缓存
npm config set registry https://registry.npm.taobao.org 设置代理
3.3 nodejs版本问题
这个报错我没有截图,后面我看看能不能从其它博友的文章上转载一下。其出现的原因是nodejs 18版本及以上涉及最新底层操作系统相关的包。所以在安装nodejs的时候,推荐使用18以下的版本。
3.4 缺少libpam0g-dev依赖
报错信息如下:
AttributeError: /opt/hue-release-4.10.0/build/env/bin/python2.7: undefined symbol: pam_start
解决方式:
apt-get install libpam0g-dev
3.5 Api Error: 500 Server Error: User: root is not allowed to impersonate root for url: http://192.168.71.137:9090/
这是访问hbase时报的错,其提示信息很明显,是我们没有给root用户配置代理。这个需要在hadoop的core-site.xml配置文件中添加root代理(注意这个root可不是操作系统中的root,这个是我首次登陆hue创建的hue用户名):
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
最后注意要重启hdfs 以及 hbase thrift服务
4、编译安装
有两个命令:
make apps
其把安装包都打到当前的源码包中,如果迁移安装包,就需要把当前整个包都打包在一块,这样会造成安装包冗余大量的源码数据。
PREFIX=/opt/module/hue make install
其把安装包安装到指定的目录中。
如果有迁移安装包的需求,一定要注意安装包的路径,因为hue中一些依赖使用了绝对路径,所以在迁移安装包的时候,尽量保证路径不变。
5、启动前准备
5.1 创建hue用户和用户组
groupadd hue
useradd -g hue hue
这一步之后,其实hue就可以启动了,运行命令:./build/env/bin/supervisor 效果如下:
但是此时启动的hue服务其元数据默认存在本地的sqlLite上面,这经常会出现database is locked错误,所以一般强烈推荐配置成熟的数据库进行存储,如mysql、postgres、oracle等。
5.2 拷贝配置文件
可能有的版本编译安装后,desktop/conf/目录下没有hue.ini文件,此时可以将desktop/conf.dist/目录下的hue.ini拷贝过去,或者直接搜整个hue的源码目录,找到后再拷贝过去。
5.3 更换元数据存储目录(可选)
修改hue.ini配置文件,添加如下信息(注意区分database和databases这两个配置项):
[[database]]
engine=mysql
host=192.168.71.135
port=3306
user=root
password=123456
name=hue
5.4 连接上一步配置的数据库
这一步有两个操作,一个是创建上一步指定的hue数据库,还有一个就是查看数据库是否支持远程访问,因为有的mysql数据库默认安装后只能localhost访问。
1)创建数据库
create database hue;
2)查看配置的user是否可以远程访问
select host,user from mysql.user;
可以看到我这里user用户的host为%,所以是支持的,如果不是%,那么可以通过alter语句将所配置用户的host字段修改为%号。或者重新创建一个用户,但是注意不要忘记赋权,相关参考命令如下:
create user 'hue'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON *.* TO 'hue'@'%' IDENTIFIED BY '123456';
flush privileges;
5.5 同步数据库
在配置完元数据存储库后,我们要通过命令在对应的库上创建hue需要用到的表。具体执行命令如下:
./build/env/bin/hue syncdb
./build/env/bin/hue migrate
5.6 启动测试
至此,虽然我们还没有连接各种具体的大数据组件,但到此为止,hue的服务算是完整的启动起来了,效果图如下:
首次登陆会将输入的用户名和密码作为超级管理员。
另外如果启动时有端口号冲突,可以修改hue.ini的如下配置(默认是8888):
http_port=8008
6、hadoop连接
HDFS支持两种RESTful接口:WebHDFS和HttpFS。WebHDFS默认端口号为50070,HttpFS默认端口号为14000。默认启动WebHDFS而不会启动HttpFS,而HttpFS需要通过sbin/httpfs.sh来启动。
网上说如果有HA,那么只能用14000,但是经过测试,发现50070也可以有读写权限,所以具体的使用可以根据自己的实际情况进行配置。
1)修改core-site.xml文件
<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
## 下面配置可选,但如果HA或者使用httpfs传递消息则比选
<property>
<name>hadoop.proxyuser.httpfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.groups</name>
<value>*</value>
</property>
2)修改httpfs-site.xml配置文件(可选)
<property>
<name>httpfs.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<property>
<name>httpfs.proxyuser.hue.groups</name>
<value>*</value>
</property>
3)重启hdfs
4)开启httpfs服务
5)修改hue.ini文件
[[hdfs_clusters]]
[[[default]]]
fs_defaultfs=hdfs://192.168.71.135:9000
webhdfs_url=http://192.168.71.135:50070/webhdfs/v1
6)重启hue
./build/env/bin/supervisor
7)效果如下:
7、yarn连接
1)修改hue.ini
[[yarn_clusters]]
[[[default]]]
resourcemanager_host=192.168.71.136
resourcemanager_api_url=http://192.168.71.136:8088
proxy_api_url=http://192.168.71.136:8088
history_server_api_url=http://192.168.71.137:19888
2)重启yarn
3)重启hue
4)效果如下:
8、hbase连接
1)修改hdfs的core-site配置文件,增加hbase代理
<property>
<name>hadoop.proxyuser.hbase.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hbase.groups</name>
<value>*</value>
</property>
2)修改hbase-site.xml
<property>
<name>hbase.regionserver.thrift.http</name>
<value>true</value>
</property>
<property>
<name>hbase.thrift.support.proxyuser</name>
<value>true</value>
</property>
3)修改hue.ini配置
[hbase]
hbase_clusters=(Cluster|192.168.71.137:9090)
hbase_conf_dir=/opt/module/hbase-1.4.13/conf
4)重启hdfs hbase,以及开启hbase-thrift服务
start-dfs.sh
start-hbase.sh
hbase-daemon.sh start thrift
5)重启hue
6)效果如下
9、hive连接
1)修改hue.ini
[beeswax]
hive_server_host=192.168.71.136
hive_server_port=10000
server_conn_timeout=120
2)确保开启了hive-server2服务进程
./bin/hiveserver2
3)重启hue
4)效果如下
笔记本虚拟机资源属实有限,hiveserver2一直起不起来,所以hive的效果图这里就不展示了。
10、关系型数据库连接
在4.10.0版本中关系型数据库的配置是最坑爹的,我也是配置了好久才配置出来。首先说下,在hue3版本系列中关系型数据库好像默认就有,但是在hue4系列中好像关系型数据需要显示去配置才能显示出来(测试hue4.3.0、hue4.7.0、hue4.8.0、hue4.9.0都是需要显示配置),而且一旦配置了关系型数据库,在数据源那块的所有展示菜单,比如hive、impala、solar等都需要显示配置出来。
1)在[[databases]]中配置关系型数据库
[librdbms]
[[databases]]
[[[mysql]]]
engine=mysql
host=192.168.71.135
port=3306
user=root
password=123456
2)配置关系型数据库和hive的展示
[notebook]
[[interpreters]]
[[[mysql]]]
name = MySQL
interface=sqlalchemy
[[[hive]]]
name=Hive
interface=hiveserver2
3)效果如下:
11、ubuntu16 - apt本地库使用
离线环境我主要使用的是ubuntu环境,在迁移底层包时为了更好的管理包之间的依赖关系,我个人推荐使用apt本地库来管理包的迁移,因为经过测试,对于包含很多依赖的包,如果用dpkg一次性全装或者一个个装,有些场景下回一直失败,而通过apt本地库,则可以直接安装。话不多说,下面直接介绍apt本地库的制作和使用。
1)首先在联网机器配置apt源 /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
2)运行apt-get update更新本地库
3)清空或转移 /var/cache/apt/archives下面的deb包
4)通过apt-get install packagename --download-only下载deb到本地( /var/cache/apt/archives)
5)将 /var/cache/apt/archives目录下所有deb文件拷贝到一个新的目录中,我这里是拷贝到新建的/opt/debs目录中
6)去到要打包目录的上一层,这里debs的上一层是opt,所以运行命令cd /opt
7)创建一个描述文件,描述当前文件夹中有哪些依赖包以及依赖包之间的依赖关系。
dpkg-scanpackages debs/ /dev/null | gzip> debs/Packages.gz
8)打包debs,便于拷贝移植
tar -cvzf debs.tar.gz debs
9)移动到离线环境并解压
10)修改apt源配置文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak 备份原有源
touch /etc/apt/sources.list 创建空文件
echo"deb [trusted=yes] file:/opt debs/" > /etc/apt/sources.list 指定本地源
11)更新源并安装
apt-get update 此时apt源即指向我们的本地源
apt-get install package 这里就可以安装我们的目标包文件了
12)安装结束,还原已有的源
mv /etc/apt/sources.list.bak /etc/apt/sources.list
12、总结
无论用yum还是apt-get安装依赖,尽量一个个安装。
尽量不要直接改动系统核心库,可以通过整体升级的方式来升级核心库支持的相关版本。
每次重新编译安装前,尽量make clean一下,如果指定了目录,就将那个目录删除。
nodejs镜像源尽量配置成国内的。
nodejs 18 版本以上会依赖一个高级的核心系统库,推荐使用nodejs18以下的版本。
hue关系型数据库的展示需要显示声明,而且一旦配置了关系型数据库的显示展示,hive等其它默认展示的数据源也需要显示声明才能展示出来。