前言
最近在准备一个小的项目,需要对 Hive 的数据进行展示,所以想到了把 Hive 的数据导出到 MySQL 然后用 Superset 进行展示。
Superset
1.1 Superset概述
Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源(比如 Hive、Durid),包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。
1.2 Superset安装
1.2.1、安装Python环境
这里废话少说,按照某谷的配置文档配的话一堆问题,毕竟当时的版本和现在可能不一样,以及镜像地址有的已经不能用了。
1、安装 Miniconda
下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
安装命令:
bash Miniconda3-latest-Linux-x86_64.sh
2、加载环境变量配置文件,使之生效
source ~/.bashrc
3、取消激活 base 环境(conda 自己的 python 环境)
Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。
conda config --set auto_activate_base false
4、配置 Python 环境
CentOS 7 自带的是 2.7 版本的,明显太低,但是又不能把它删了或者覆盖,我们得在 conda 下再建一个 python 环境。
修改镜像源:
vi ~/.condarc
然后把下面的东西直接复制进去(文件里原本有的配置留一个就行):
channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
show_channel_urls: true
ssl_verify: false
5、创建Python3.9环境!
注意:是 3.9 !别用 3.7 了,不然一堆报错,我觉得是教程出的那会 superset 版本比较低,所以 3.7 安装的时候没问题,但是我今天安装一堆毛病,换了3.9还没出问题。
conda create --name superset python=3.9
安装完了 pythpn -V 看一下
6、激活 superset 环境
注意:之后所有关于 superset 的操作尽量都在 superset 环境下操作!!!
(base) [lyh@hadoop102 ~]$ conda activate superset
1.2.2、Superset 部署
1、安装 Superset 需要的依赖
(superset) [lyh@hadoop102 ~]$ sudo yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel python-setuptools openssl-devel cyrus-sasl-devel openldap-devel
2、更新 setuptools 和 pip
直接用下面这个命令:
(superset) [lyh@hadoop102 ~]$ pip install --upgrade setuptools pip -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
不行就换源!
3、安装 Superset
(superset) [lyh@hadoop102 ~]$ pip install apache-superset pip -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
4、初始化 Superset 数据库
(superset) [lyh@hadoop102 ~]$ export FLASK_APP=superset
(superset) [lyh@hadoop102 ~]$ superset db upgrade
这里容易报错,如果自己是 python 3.7 我反正是换了 3.9 后就没报错了。
5、创建管理员用户
(superset) [lyh@hadoop102 ~]$ superset fab create-admin
这里会让我们创建用户名和密码
6、superset 初始化
(superset) [lyh@hadoop102 ~]$ superset init
1.2.3、启动 Superset
1、安装gunicorn
(superset) [lyh@hadoop102 ~]$ pip install gunicorn -i https://pypi.douban.com/simple/
我是自带的(提示已存在),还是那句话:不行就去换源(-i 镜像源地址)!
2、启动 Superset
注意:一定要确保当前 conda 环境为 superset !!!
(superset) [lyh@hadoop102 ~]$ gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 "superset.app:create_app()" --daemon
- workers:指定进程个数
- timeout:worker进程超时时间,超时会自动重启
- bind:绑定本机地址,即为Superset访问地址
- daemon:后台运行
3、登录 Superset
打开 hadoop102:8087 ,用上面创建的用户名和密码登录
4、停止 superset
(superset) [lyh@hadoop102 ~]$ ps -ef | awk '/superset/ && !/awk/{print $2}' | xargs kill -9
1.2.4、Superset 启停脚本
#!/bin/bashsuperset_status(){result=`ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l`if [[ $result -eq 0 ]]; thenreturn 0elsereturn 1fi
}
superset_start(){source ~/.bashrcsuperset_status >/dev/null 2>&1if [[ $? -eq 0 ]]; thenconda activate superset ; gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 --daemon 'superset.app:create_app()'elseecho "superset正在运行"fi}superset_stop(){superset_status >/dev/null 2>&1if [[ $? -eq 0 ]]; thenecho "superset未在运行"elseps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9fi
}case $1 instart )echo "启动Superset"superset_start;;stop )echo "停止Superset"superset_stop;;restart )echo "重启Superset"superset_stopsuperset_start;;status )superset_status >/dev/null 2>&1if [[ $? -eq 0 ]]; thenecho "superset未在运行"elseecho "superset正在运行"fi
esac
1.2.5、退出 Superset
superset.sh stop
conda deactivate
总结
这是我安装过最麻烦的软件了,让我把 Hadoop、Flink、Spark 全重装我不怕,但这东西是真tm恶心啊。
无法打开网页问题解决
打不开网页的话在 conda 的 superset 环境下输入下面的命令:
superset run --host 0.0.0.0
发现报错:
export FLASK_APP=superset
继续测试,还有警告:
export SUPERSET_SECRET_KEY=“oh-so-secret”
所以:建议把这两个环境变量放到启动脚本中去!!!!
解决!不得不说,这是第一次把我恶心到的软件,版本依赖是真的多,配置起来是真麻烦。