在CentOS7上的Superset安装及初始化
安装Python3.6
安装Python3.6可能需要的依赖:
1 | yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel xz-devel |
从官网下载最新的3.6.x.tgz包,本文写作时最新的是Python-3.6.13.tgz,解压到/usr/local目录下并进入目录:
1 | tar -xzvf Python-3.6.13.tgz -C /usr/local |
切换到root账户操作(用普通用户在make install时有可能出现权限不够而无法创建文件的报错,就算加上sudo也不行!):
1 | su root |
把Python3.6安装到指定目录下:
1 | ./configure --prefix=/usr/local/python3.6.13 |
如果使用
make install
,在系统中将会有两个不同版本的Python在/usr/bin/目录中。这将会导致很多问题,而且不好处理。在本来存在多个版本的python情况下建议后面手动配置环境变量和软链接。
建立新的软链接,使python3
指向Python-3.6.13:
1 | ln -s /usr/local/python3.6.13/bin/python3.6 /usr/bin/python3 |
在终端中输入python3
测试:
1 | [root@cpu-node1 local]# python3 |
或者加上-V
检查版本:
1 | [root@cpu-node1 local]# python3 -V |
创建pip软链接:
1 | ln -s /usr/local/python3.6.13/bin/pip3.6 /usr/bin/pip3 |
检查pip3
命令:
1 | [root@cpu-node1 local]# pip3 -V |
安装成功。
至于要不要把系统默认的python
命令指向python3.6,个人从维稳的角度来说没有这个需要。要改的话可以参考:CentOS7安装Python3.6,改完软链接之后还需要改一堆依赖于python2.7的系统文件。
安装OS依赖
1 | sudo yum upgrade python-setuptools |
搭建Python虚拟容器
官方文档&众多教程强烈建议把Superset搭建在一个隔离的虚拟容器virtualenv里,virtualenv的具体原理参考virtualenv - 廖雪峰的官方网站(不要参考里面的安装步骤,会装到python2里去)。
另外virtualenv与anaconda的区别:
virtualenv是针对项目管理的,比如web项目,每个项目的环境依赖都是独立的,所以必须用virtualenv去管理。anaconda不算虚拟环境管理,它只是集合了一些常用的数据分析的库,就是把数据分析的一些必备的库都给你准备好了,不用你去分别安装而已,跟虚拟环境不是一个概念的工具。
所以,在平时的开发环境中可以使用anaconda,特别是要做数据分析,这样会方便很多。但是在做一些独立的项目,比如Django和flask这种web的时候就必须用到virtualenv了,平时是不需要用到的。
首先用python3.6对应的pip3
安装virtualenv:
1 | pip install virtualenv |
新建Superset的工作目录并进入:
1 | mkdir superset_project |
创建一个独立的Python运行环境,命名为Superset
:
1 | python3 -m venv superset |
在superset_project的目录下会多出一个名为superset的文件夹。查看site-packages文件夹发现环境确实很干净:
1 | [hadoop@cpu-node1 superset_project]$ ll superset/lib/python3.6/site-packages/ |
激活虚拟环境,进入superset的容器环境:
1 | . superset/bin/activate |
可以看到终端左侧多了一个(superset)
,通过which
发现在该环境里python和pip确实指向了项目下的对应命令:
1 | (superset) [hadoop@cpu-node1 superset_project]$ which python3 |
可以在终端输入命令deactivate
退出该容器环境。
安装并初始化Superset
在已激活的容器环境下操作:
升级pip到最新版:
1 | pip3 install --upgrade pip |
pip安装Superset:
1 | pip3 install apache-superset |
带上apache开头,官方会把superset的所有python依赖包都一并下好。
安装成功后,需要初始化数据库:
1 | superset db upgrade |
如果是python3.6版本会报一个错:ModuleNotFoundError: No module named 'dataclasses'
,官方解释是这个包默认python3.7自带,在3.6作为补丁需要额外安装(所以apache默认superset其实是用在了3.7或更高的版本),装就完事了:
1 | pip3 install dataclasses |
重新初始化数据库成功。
创建admin用户:
1 | export FLASK_APP=superset |
然后要输入这些东西,做好心理准备:
1 | (superset) [hadoop@cpu-node1 superset]$ superset fab create-admin |
下载样例数据(可选):
1 | superset load_examples |
Superset环境初始化:
1 | superset init |
启动开发模式web页面:
1 | superset run -p 8088 -h cpu-node1 --with-threads --reload --debugger |
其中-p
用来确定端口号,-h
指定IP。若是服务器部署的话记得需要在防火墙里将这个端口开放,并且在对外跳板机上的Nginx中作转发。然后通过浏览器就可以访问web页面了。
消除Warning
缺少lzma的warning
1 | /home/hadoop/superset_project/superset/lib/python3.6/site-packages/pandas/compat/__init__.py:120: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError. |
如果在安装Python的第一步装好了xz-devel
是不会出现这个告警的。解决方法有两种:
- 用yum装上这个玩意并重新编译Python,只要编译的目标文件夹和软链接没动过的话就万事大吉,编译完成之后直接重开superset就没有告警信息了,参考。
- 用pip装上补丁包,改site-packages里的.py源码import部分,参考。不过在Python3.6环境下没有lzma.py这个文件,没搞定。
Flask-Caching的UserWarning
1 | /home/hadoop/superset_project/superset/lib/python3.6/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled. |
找到python3.6/site-packages/superset/config.py打开编辑:
1 | - THUMBNAIL_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"} |
pillow包没有安装
干净的site-packages环境+apache自动安装的包列表里确实没有pillow包,然后告警:
1 | No PIL installation found |
装上就行:
1 | pip3 install pillow |