• hue编译、启动、使用


    背景

    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用户名):

    1. <property>
    2. <name>hadoop.proxyuser.root.hostsname>
    3. <value>*value>
    4. property>
    5. <property>
    6. <name>hadoop.proxyuser.root.groupsname>
    7. <value>*value>
    8. 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这两个配置项):

    1. [[database]]
    2.     engine=mysql
    3.     host=192.168.71.135
    4.     port=3306
    5.     user=root
    6.     password=123456
    7.     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文件

    1. <property>
    2. <name>hadoop.proxyuser.hue.hostsname>
    3. <value>*value>
    4. property>
    5. <property>
    6. <name>hadoop.proxyuser.hue.groupsname>
    7. <value>*value>
    8. property>
    9. ## 下面配置可选,但如果HA或者使用httpfs传递消息则比选
    10. <property>
    11. <name>hadoop.proxyuser.httpfs.hostsname>
    12. <value>*value>
    13. property>
    14. <property>
    15. <name>hadoop.proxyuser.httpfs.groupsname>
    16. <value>*value>
    17. property>

    2)修改httpfs-site.xml配置文件(可选)

    1. <property>
    2. <name>httpfs.proxyuser.hue.hostsname>
    3. <value>*value>
    4. property>
    5. <property>
    6. <name>httpfs.proxyuser.hue.groupsname>
    7. <value>*value>
    8. property>

    3)重启hdfs

    4)开启httpfs服务

    5)修改hue.ini文件

    1. [[hdfs_clusters]]
    2. [[[default]]]
    3. fs_defaultfs=hdfs://192.168.71.135:9000
    4. webhdfs_url=http://192.168.71.135:50070/webhdfs/v1

    6)重启hue

            ./build/env/bin/supervisor

    7)效果如下:

    7、yarn连接

    1)修改hue.ini

    1. [[yarn_clusters]]
    2. [[[default]]]
    3. resourcemanager_host=192.168.71.136
    4. resourcemanager_api_url=http://192.168.71.136:8088
    5. proxy_api_url=http://192.168.71.136:8088
    6. history_server_api_url=http://192.168.71.137:19888

    2)重启yarn

    3)重启hue

    4)效果如下:

    8、hbase连接

    1)修改hdfs的core-site配置文件,增加hbase代理

    1. <property>
    2. <name>hadoop.proxyuser.hbase.hostsname>
    3. <value>*value>
    4. property>
    5. <property>
    6. <name>hadoop.proxyuser.hbase.groupsname>
    7. <value>*value>
    8. property>

    2)修改hbase-site.xml

    1. <property>
    2. <name>hbase.regionserver.thrift.httpname>
    3. <value>truevalue>
    4. property>
    5. <property>
    6. <name>hbase.thrift.support.proxyusername>
    7. <value>truevalue>
    8. property>

    3)修改hue.ini配置

    1. [hbase]
    2. hbase_clusters=(Cluster|192.168.71.137:9090)
    3. 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

    1. [beeswax]
    2. hive_server_host=192.168.71.136
    3. hive_server_port=10000
    4. 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]]中配置关系型数据库

    1. [librdbms]
    2. [[databases]]
    3. [[[mysql]]]
    4. engine=mysql
    5.     host=192.168.71.135
    6.     port=3306
    7.     user=root
    8.     password=123456

    2)配置关系型数据库和hive的展示

    1. [notebook]
    2. [[interpreters]]
    3. [[[mysql]]]
    4. name = MySQL
    5. interface=sqlalchemy
    6. [[[hive]]]
    7. name=Hive
    8. interface=hiveserver2

    3)效果如下:

    11、ubuntu16 - apt本地库使用

    离线环境我主要使用的是ubuntu环境,在迁移底层包时为了更好的管理包之间的依赖关系,我个人推荐使用apt本地库来管理包的迁移,因为经过测试,对于包含很多依赖的包,如果用dpkg一次性全装或者一个个装,有些场景下回一直失败,而通过apt本地库,则可以直接安装。话不多说,下面直接介绍apt本地库的制作和使用。

    1)首先在联网机器配置apt源 /etc/apt/sources.list 

    1. deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    2. deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    3. deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    4. deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    5. deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    6. deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    7. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    8. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    9. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    10. 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等其它默认展示的数据源也需要显示声明才能展示出来

  • 相关阅读:
    linux driver i2c core driver
    QT 多语言例子的编译和运行——简单几步了解QT翻译的机制
    ASP.NET WebApi 极简依赖注入
    leetcode-每日一题-1758-生成交替二进制字符串的最少操作数(简单,数学思想)
    阅读文献小技巧
    【蓝桥杯嵌入式】一、初识stm32
    Kubernetes 简述
    深入解析 qsort 函数(下),用冒泡排序模拟实现 qsort 函数
    .NET周报【11月第1期 2022-11-07】
    终于可以彻底告别手写正则表达式了
  • 原文地址:https://blog.csdn.net/Interest1_wyt/article/details/127815837