.superset 是什么

 Superset 是一个基于 Python Flask 和 Apache Superset 的数据可视化和探索平台。建议去官方github去探索 GitHub - apache/superset:Apache Superset 是一个数据可视化和数据探索平台

GitHub网址有时候访问不进去,可以进入最先进的安全且免费的网络代理 |代理代理

Superset 提供:

  • 一个无代码界面,用于快速构建图表
  • 功能强大的基于 Web 的 SQL 编辑器,用于高级查询
  • 轻量级语义层,用于快速定义自定义维度和指标
  • 开箱即用,支持几乎任何 SQL 数据库或数据引擎
  • 各种精美的可视化效果,用于展示您的数据,从简单的条形图到地理空间可视化效果
  • 轻量级、可配置的缓存层,有助于减轻数据库负载
  • 高度可扩展的安全角色和身份验证选项
  • 用于编程自定义的 API
  • 专为规模化而从头开始设计的云原生架构

二.安装详细步骤

第一种 使用pip 建立单独的虚拟环境 安装

安装Python环境

Superset是由Python语言编写的Web应用,我使用过python3.7 会报错,(WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv          
大致意思:以“root”用户运行pip可能导致权限中断,并与系统包管理器的行为冲突。建议使用虚拟环境。导致了更新或者下载pip时候下载失败。解决:建立一个虚拟目录)目前使用 python 3.8 和python3.9.7 没有因为python环境导致的报错!配置国内镜像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --set show_channel_urls yes

安装Miniconda或者 Anaconda

conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同的虚拟环境,继而安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换。网上很多介绍,本文使用 远程拉取安装脚本

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

命令去获取Miniconda,

bash Miniconda3-latest-Linux-x86_64.sh

去安装Miniconda,过程都是yes,过程中自动在bashrc环境文件中添加环境参数,对我这种新手小白比较友好,

出现Thank you for installing Miniconda3! 则安装成功!缺点是每次打开终端都会激活默认的base环境,通过以下命令,禁止自动激活默认base环境 conda config --set auto_activate_base false

小tips 过程中不知道安装目录放在哪?可以使用find / -name "miniconda3 "  或者 grep -FzZ ‘/miniconda3’ 去查找目录(linux小白适用)

配置conda国内镜像,后续贴源代码

创建Python环境

创建Python3.8环境 --name(-n) 后面自定义虚拟环境的登陆名称 python=后面自定义python版本conda create --name superset python=3.8

激活登陆和退出对应conda环境命令

conda activate superset  退出 conda deactivate   ,目录下直接切换版本conda activate superset3.1.1 

取别名  python3.9.7 环境下 我安装的是3.1.1版本superset  conda  install superset=3.1.1

安装superset之前需要以下所需依赖(不同liunx版本)

在Linux中,使用yum作为包管理器主要是基于Red Hat系的发行版,如Red Hat Enterprise Linux (RHEL)、CentOS、Fedora等。不过,随着时间的推移,一些新的Red Hat系的发行版(如Fedora 22+和CentOS 8+)开始使用dnf作为默认的包管理器,而yum则逐渐被淘汰。以sudo yum install -y python-setuptools为例;

对于基于yum的系统:

bashsudo yum install -y python-setuptools

对于基于dnf的系统:

bashsudo dnf install -y python3-setuptools注意:
  1. dnf系统中,python-setuptools可能已经被替换为python3-setuptools,这取决于你的系统是否默认使用Python 3。
  2. 在某些发行版中,可能还需要首先启用EPEL(Extra Packages for Enterprise Linux)仓库,因为某些包可能不在默认的仓库中。对于yum系统,你可以使用sudo yum install -y epel-release来安装EPEL仓库;对于dnf系统,使用sudo dnf install -y epel-release

在Ubuntu和其他非Red Hat系的Linux发行版上,sudo yum install -y python-setuptools 命令是不适用的,因为yum是Red Hat及其衍生发行版的包管理器。在Ubuntu上,你应该使用aptapt-get来安装软件包。

对于Ubuntu和其他基于Debian的系统(如Mint、Debian等),你可以使用以下命令来安装python-setuptools(对于Python 2)或python3-setuptools(对于Python 3):

bash# 对于Python 2
sudo apt-get update
sudo apt-get install -y python-setuptools

# 对于Python 3
sudo apt-get update
sudo apt-get install -y python3-setuptools

如果你使用的是基于apt的新版本Ubuntu(如Ubuntu 20.04及更高版本),则推荐使用apt而不是apt-get

bash# 对于Python 2
sudo apt update
sudo apt install -y python-setuptools

# 对于Python 3
sudo apt update
sudo apt install -y python3-setuptools

如果你使用的是Fedora(从Fedora 22开始),它使用dnf作为包管理器,你可以使用以下命令:

bash# 对于Python 3
sudo dnf install -y python3-setuptools

请注意,许多现代的Linux发行版已经转向Python 3,并且可能不再支持Python 2的包。因此,通常建议安装python3-setuptools,除非你有特定的原因需要Python 2。

另外,如果你使用的是Arch Linux或其衍生发行版(如Manjaro),你将使用pacman作为包管理器,命令如下:

bash# 对于Python 3
sudo pacman -S python-setuptools

请根据你使用的Linux发行版选择适当的命令和包名。如果你不确定你的系统使用的是哪个包管理器,可以通过查阅发行版的官方文档或运行which aptwhich yumwhich dnfwhich pacman等命令来确定。

以下所有命令根据版本不同自行找到相对应的

sudo yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel

安装(更新)setuptools和pip

pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/

 -i https://pypi.douban.com/simple/ 

这条命令会从豆瓣的 PyPI 镜像源下载并安装 somepackage。如果你希望永久地更改默认的 PyPI 源,你需要修改 pip 的配置文件。这通常涉及到编辑 pip 的配置文件,将默认的源地址更改为镜像源地址。

安装superset

pip install apache-superset==3.1.1 -i https://pypi.douban.com/simple/

 此时报错来了,说的没有3.1.1这个版本,官网明明有,原来按照 conda  install superset=3.1.1 可以成功

出现以上图表明成功

初始化superset数据库 

superset db upgrade

1 :ModuleNotFoundError: No module named 'dataclasses' # 提示ERROR报错,找不到dataclasses模块,根据报错安装 pip install dataclasses  -i https://pypi.douban.com/simple/ 

2:接着报错

Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.

这个是因为superset是基于Flask框架开发的,运行时,需要到项目的根目录下运行,因为我的环境是python的virtualenv,所以,对应的superset根目录为/opt/superset/venv/lib/python3.9/site-packages/superset,到该目录下重新执行命令。

(venv) [root@localhost venv]# cd /opt/superset/venv/lib/python3.9/site-packages/superset
(venv) [root@localhost superset]# superset db upgrade

后面改配置文件需要执行superset init   初始化时候 还会报这个错 ,此时执行

export FLASK_APP=superset

3:**ModuleNotFoundError: No module named ‘werkzeug.wrappers.etag’

  • 这个是在 superset 2.1 版本出现的bug,通过降低Werkzeug的版本解决

    python -m pip uninstall -y Werkzeug
    python -m pip install Werkzeug==2.1.3
TypeError: __init__() got an unexpected keyword argument 'unbound_message'

# 这个是在 superset 2.1 版本出现的bug,需要降低Flask的版本到2.0.3
python -m pip uninstall -y Flask
python -m pip install Flask==2.0.3


ModuleNotFoundError: No module named 'wtforms.ext'
# 这个是因为WTForms 3.0的版本去掉了ext,需要降低WTForms的版本到2.3.3
python -m pip uninstall -y WTForms
python -m pip install WTForms==2.3.3

创建管理员用户

export FLASK_APP=superset
superset fab create-admin

按照提示输入管理员账号的相关信息,flask是一个python web框架,Superset使用的就是flask,会在此创建用户名、密码,注意: username默认为admin,请记住Password!!!后续登录前段页面使用到 

 superset初始化 

superset init

这样是成功了,但红色好多警告会成为未来大量数据superset页面查询简单分组聚合sql运行不动的潜在威胁,后续会继续分析,内存存储用什么数据库,和速率相关的

Superset超过1000行的图表数据可以通过配置缓存来加速仪表盘的查询,从而进行展示。

Superset使用Flask-Cache进行缓存。 配置缓存后端与在superset_config.py中提供符合Flask-Cache规范的CACHE_CONFIG常量一样简单。Flask-Cache支持多个缓存后端(Redis,Memcached,SimpleCache(内存中)或本地文件系统)。 如果你要使用Memcached请使用pylibmc客户端库,因为python-memcached不能正确处理存储二进制数据。 如果你使用Redis,请安装[python-redis](https://pypi.python.org/pypi/redis)。

对于设置超时,这是在Superset元数据中完成的,并从“切片配置”到数据源的配置,到数据库的“timeosearchpath”,并最终落回在CACHE_CONFIG中定义的全局默认值。superset数据库后端是一个OLTP数据库,Superset使用它来存储内部信息,比如用户列表、切片和仪表板定义。Superset的后端使用Mysql、Postgresql和Sqlite进行测试。建议您在其中一个数据库服务器上安装Superset以用于生产。使用列存储,非OLTP数据库(如Vertica、Redshift或Presto)作为数据库后端将无法工作,后续研究。

pip list查看已安装包的信息

cryptography的版本是39.0.0
SQLAlchemy-Utils的版本是0.36.8

pip uninstall cryptography
pip install cryptography==2.9.2 -i https://pypi.douban.com/simple/
pip install sqlalchemy-utils==0.36.6 -i https://pypi.douban.com/simple/

中文设置

Superset默认界面语言为英文的,可以通过修改/opt/superset/venv/lib/python3.9/site-packages/superset/config.py这个文件来设置为中文,只需要在config.py文件中修改BABEL_DEFAULT_LOCALE的值为zh即可。记得改完重启,会用到superset init

# 修改superset的config.py文件中关于语言的设置
# 文件路径:/site-packages/superset/config.py
# ---------------------------------------------------
# Babel config for translations
# ---------------------------------------------------
# Setup default language
BABEL_DEFAULT_LOCALE = "zh"
# Your application default translation path
BABEL_DEFAULT_FOLDER = "superset/translations"
# The allowed translation for you app
LANGUAGES = {
    "en": {"flag": "us", "name": "English"},
    "es": {"flag": "es", "name": "Spanish"},
    "it": {"flag": "it", "name": "Italian"},
    "fr": {"flag": "fr", "name": "French"},
    "zh": {"flag": "cn", "name": "Chinese"},
    "ja": {"flag": "jp", "name": "Japanese"},
    "de": {"flag": "de", "name": "German"},
    "pt": {"flag": "pt", "name": "Portuguese"},
    "pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
    "ru": {"flag": "ru", "name": "Russian"},
    "ko": {"flag": "kr", "name": "Korean"},
    "sk": {"flag": "sk", "name": "Slovak"},
    "sl": {"flag": "si", "name": "Slovenian"},
    "nl": {"flag": "nl", "name": "Dutch"},
}
# Turning off i18n by default as translation in most languages are
# incomplete and not well maintained.
LANGUAGES = {}

还可以做到中英文随意切换,修改代码后续补上 

安装gunicorn用来提供http服务

pip install gunicorn -i https://pypi.douban.com/simple/

将 Gunicorn 与 Tomcat 进行比较,可以这样理解:

  • Tomcat 是 Java 的一个流行的 web 服务器和 servlet 容器,主要用于托管 Java web 应用程序,如基于 Servlet 或 JSP 的应用程序。
  • Gunicorn 是 Python 的一个 web 服务器和 WSGI 容器,主要用于托管 Python web 应用程序,如 Flask、Django 等。

两者都是用于为 web 应用程序提供 HTTP 服务的软件,但分别针对 Java 和 Python。

启动Superset

  1. 确保当前conda环境为superset
  2. 启动
(superset) [localhost ~]$ gunicorn --workers 5 --timeout 120 --bind 你的服务器ip地址:8787  "superset.app:create_app()" --daemon 

--workers:指定进程个数
--timeout:worker进程超时时间,超时会自动重启
--bind:绑定本机地址,即为Superset访问地址
--daemon:后台运行

在 Gunicorn 中使用 --daemon 选项确实会使 Gunicorn 在后台运行,并且默认情况下,它会将日志输出到系统的日志文件中。然而,具体日志的位置取决于你的操作系统和 Gunicorn 的配置。

在大多数 Linux 系统中,Gunicorn 的日志通常可以在 /var/log/syslog 或 /var/log/gunicorn.log 中找到。但是,这并不是一个固定的规则,因此最好查看 Gunicorn 的文档或你的系统配置来确定确切的日志位置。

如果你想要自定义日志的位置和格式,你可以使用 Gunicorn 的 --log-file 和 --log-level 选项,就像你在之前的回复中所提到的那样。例如:

bash(superset) [localcast ~]$ gunicorn --workers 5 --timeout 120 --bind 你的服务器ip地址:8787 --log-file /path/to/your/log/gunicorn.log --log-level INFO "superset.app:create_app()" --daemon

在这个命令中,--log-file /path/to/your/log/gunicorn.log 指定了日志文件的路径,而 --log-level INFO 设置了日志的级别为 INFO。这样,所有的 INFO 级别及以上的日志信息都会被写入到 /path/to/your/log/gunicorn.log 文件中。

 gunicorn --workers 5 --timeout 120 --bind 192.168.20.87:8787  "superset.app:create_app()"  > superset.log 2>&1

 你在哪个目录,就会 输出到那个目录下生成superset.log;2>&1的作用是将标准错误(2)重定向到标准输出(1)。在shell命令中,1代表标准输出,2代表标准错误。默认情况下,标准输出会打印在屏幕上,标准错误会输出到错误终端。但使用2>&1后,标准错误会被重定向到标准输出,也就是说标准输出和标准错误都会被打印在屏幕上;

请确保将 你的服务器ip地址 替换为你的服务器实际的 IP 地址或 0.0.0.0(以监听所有可用接口),并将 /path/to/your/log/gunicorn.log 替换为你想要保存日志的实际文件路径。

此外,如果你的 Superset 应用程序有自己的日志配置,那么它可能也会生成自己的日志文件。你应该检查 Superset 的配置和文档,以确定如何配置和管理这些日志。

# 控制台日志记录
LOG_TO_STDERR = False

如果 LOG_TO_STDERR 被设置为 False,则日志不会输出到控制台。如果设置为 True,则日志会输出到标准错误流(stderr),这通常与终端或控制台输出相关联。如果你想让日志输出到控制台,而不是写入到默认的文件中,你可以将 LOG_TO_STDERR 设置为 True

不过,请注意,仅仅设置 LOG_TO_STDERR 可能还不足以使日志输出到控制台。Superset 可能还使用其他日志配置,例如日志处理器(handlers)、日志格式(formatters)等,这些都需要在配置文件中正确设置

但还是要看config.py 配置文件 里面有个参数显示false 就默认输出日志到控制台,不写到默认文件中

Superset使用Flask-Cache进行缓存。 配置缓存后端与在superset_config.py中提供符合Flask-Cache规范的CACHE_CONFIG常量一样简单。

Flask-Cache支持多个缓存后端(Redis,Memcached,SimpleCache(内存中)或本地文件系统)。 如果你要使用Memcached请使用pylibmc客户端库,因为python-memcached不能正确处理存储二进制数据。 如果你使用Redis,请安装[python-redis](https://pypi.python.org/pypi/redis)。

对于设置超时,这是在Superset元数据中完成的,并从“切片配置”到数据源的配置,到数据库的“timeosearchpath”,并最终落回在CACHE_CONFIG中定义的全局默认值。

3 登录Superset
访问http://locathost:8787,并使用之前创建的管理员账号进行登录。

 修改Superset仪表盘(Dashboard)可以匿名访问(免登录)

坑一:百度搜索结果中的方法是“修改public权限等同gamma”,操作如下:手动修改容器中/app/superset/config.py文件,将PUBLIC_ROLE_LIKE: Optional[str] = None的None改成"copyToPublic",此处copyToPublic带有引号,请注意使用英文引号。(或可通过如下命令修改),但有个问题 ,config.py 配置文件 里面有个REST API 参数设置:之前怎么都修改没生效,后面看了配置文件有好多默认参数,需要检查下(此时小白需要具体看参数代码,累哭)

用于用户和角色管理的 REST API  在 Superset 配置中怎么设置以下内容:FAB_ADD_SECURITY_API = True

在 Apache Superset 中,FAB_ADD_SECURITY_API 是一个配置选项,用于启用或禁用 Flask AppBuilder(FAB)的安全 API。这些 API 允许通过 HTTP 请求来管理用户和角色。启用这些 API 通常是为了支持第三方认证系统或自定义的用户和角色管理功能。

要在 Superset 配置中设置 FAB_ADD_SECURITY_API 为 True,需要编辑 Superset 的配置文件。通常,这个配置文件是 superset_config.py。以下是如何设置这个选项的步骤:

找到 superset_config.py 文件:

这个文件通常位于 Superset 安装目录的 superset/config.py 或者在虚拟环境中,如果遵循了官方安装指南,它可能位于 ~/superset/superset_config.py。

编辑 superset_config.py 文件:

打开这个文件,并查找 FAB_ADD_SECURITY_API 配置项。如果找不到,可以添加它。

**设置 FAB_ADD_SECURITY_API 为 True**:

在文件中添加或修改以下行:

FAB_ADD_SECURITY_API = True

保存并关闭文件。

重启 Superset 服务:

更改配置后,需要重启 Superset 服务以使更改生效。如果使用的是 Gunicorn、uWSGI 或其他 WSGI 服务器来运行 Superset,需要重启该服务。如果是在开发模式下运行 Superset,可以通过命令行重新启动它。

验证更改:

一旦 Superset 服务重启,可以通过尝试访问安全 API 来验证更改是否生效。例如,尝试访问 /api/v1/security/users/ 端点来查看是否可以获取用户列表。

请注意,启用这些 API 可能会增加安全风险,因为未经授权的访问可能导致敏感数据的泄露。因此,在启用这些 API 后,请确保实施适当的安全措施,例如使用 HTTPS、配置认证和授权机制,以及限制访问 IP 地址等。

此外,FAB_ADD_SECURITY_API 可能不是直接在 Superset 的配置中设置的,而是通过 Flask AppBuilder(FAB)的配置来设置的。

 clickhouse或Redis作为内存数据库

要查找Linux下ClickHouse存储数据所在的目录,可以按照以下步骤进行操作:

首先登录到运行ClickHouse服务器的Linux系统。

打开命令行界面(如Terminal)或使用SSH远程连接到该系统。

输入以下命令来定位ClickHouse配置文件的路径:sudo find / -name "config.xml"。这将会在整个文件系统中搜索名为"config.xml"的文件并返回其路径。

根据上一步得到的配置文件路径,再次输入以下命令来获取ClickHouse数据存储目录的设置信息:cat <配置文件路径> | grep "<path>。注意将 <配置文件路径> 替换成第三步中找到的实际路径。

最后,从结果中提取出ClickHouse数据存储目录的值,通常是类似于 /var/lib/clickhouse/ 的形式。

为什么我的查询超时了?

这里有很多原因导致的超时。

对于运行来自Sql Lab的长查询,默认情况下,Superset允许它在被celery杀死之前运行6小时。如果要增加运行查询的时间,可以在配置中指定超时。例如:

SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6

Superset正在gunicorn web服务器上运行,该服务器可能会超时web请求。如果要增加默认值(50),可以使用-t标志(以秒为单位)指定启动web服务器时的超时。

Superset runserver -t 300

如果在加载仪表板或explore slice时看到超时(504网关超时),则可能在网关或代理服务器(如Nginx)之后。如果没有从Superset server(正在处理长查询)收到及时的响应,这些web服务器将直接向客户端发送504状态代码。Superset有一个客户端超时限制来解决此问题。如果查询未在客户端超时(默认为60秒)内返回,超级集将显示警告消息以避免网关超时消息。如果网关超时限制较长,可以在superset_config.py中更改超时设置:

SUPERSET_WEBSERVER_TIMEOUT=60

后续 接着更新密钥失效等一系列报错的解决,还有 docker安装 superset 方式的要点,核心是要输出到目录的报错日志去定位分析,周一更新!!!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐