搞定Apache Superset

踩雷了无数次终于解决了Superset的一系列问题

现在是北京时间2023年12月27日,亲测有效。

Superset概述

Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。

特别注意:

下面的教程所使用的服务器操作系统为CentOS 7,Superset对接的数据源为MySQL数据库。

Superset官网地址:Welcome | Superset

安装Python环境

Superset是由Python语言编写的Web应用,要求Python3.7以上的环境。

安装Miniconda

conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。

此处,我们不需要如此多的工具包,故选择MiniConda。

下载Miniconda(Python3版本)

下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

安装Miniconda

(1)执行以下命令进行安装,并按照提示操作,直到安装完成。

[zhangxi@hadoop102 lib]$ bash Miniconda3-latest-Linux-x86_64.sh

(2)在安装过程中,出现以下提示时,可以指定安装路径 /opt/module/miniconda3

(3)出现以下字样,即为安装完成

3)加载环境变量配置文件,使之生效

[zhangxi@hadoop102 lib]$ source ~/.bashrc

4)取消激活base环境

Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。

[zhangxi@hadoop102 lib]$ conda config --set auto_activate_base false

创建Python3.8环境

1)配置conda国内镜像(此处可不配置,国外镜像比清华镜像更快)

(base) [zhangxi@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
(base) [zhangxi@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
(base) [zhangxi@hadoop102 ~]$ conda config --set show_channel_urls yes

查看conda的镜像channel配置

[zhangxi@hadoop102 ~]$ conda config --show channels
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - defaults

删除清华镜像,继续用默认的

[zhangxi@hadoop102 ~]$ conda config --remove-key channels
[zhangxi@hadoop102 ~]$ conda config --show channels
  - defaults

2)创建Python3.8环境

(base) [zhangxi@hadoop102 ~]$ conda create --name superset python=3.8.16

说明:conda环境管理常用命令

创建环境:conda create -n env_name

查看所有环境:conda info --envs

删除一个环境:conda remove -n env_name --all

3)激活superset环境

(base) [zhangxi@hadoop102 ~]$ conda activate superset

激活后效果如下图所示

说明:退出当前环境

(superset) [zhangxi@hadoop102 ~]$ conda deactivate

4)执行python -V命令查看python版本

(superset) [zhangxi@hadoop102 ~]$ python -V
Python 3.8.16

Superset部署

安装依赖

安装Superset之前,需安装以下所需依赖。

(superset) [zhangxi@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

安装Superset

1)更新pip

(superset) [zhangxi@hadoop102 ~]$ pip install --upgrade pip -i https://pypi.douban.com/simple/

说明:pip是python的包管理工具,可以和centos中的yum类比

2)安装Supetset

vim base.txt文件至任意路径,添加以下内容

aiohttp==3.8.1
    # via slackclient
aiosignal==1.2.0
    # via aiohttp
alembic==1.6.5
    # via flask-migrate
amqp==5.1.0
    # via kombu
apispec[yaml]==3.3.2
    # via flask-appbuilder
async-timeout==4.0.2
    # via aiohttp
attrs==21.2.0
    # via
    #   aiohttp
    #   jsonschema
babel==2.9.1
    # via flask-babel
backoff==1.11.1
    # via apache-superset
billiard==3.6.4.0
    # via celery
bleach==3.3.1
    # via apache-superset
brotli==1.0.9
    # via flask-compress
cachelib==0.4.1
    # via apache-superset
celery==5.2.2
    # via apache-superset
cffi==1.14.6
    # via cryptography
charset-normalizer==2.0.4
    # via aiohttp
click==8.0.4
    # via
    #   apache-superset
    #   celery
    #   click-didyoumean
    #   click-plugins
    #   click-repl
    #   flask
    #   flask-appbuilder
click-didyoumean==0.3.0
    # via celery
click-plugins==1.1.1
    # via celery
click-repl==0.2.0
    # via celery
colorama==0.4.4
    # via
    #   apache-superset
    #   flask-appbuilder
convertdate==2.3.2
    # via holidays
cron-descriptor==1.2.24
    # via apache-superset
croniter==1.0.15
    # via apache-superset
cryptography==3.4.7
    # via apache-superset
deprecation==2.1.0
    # via apache-superset
dnspython==2.1.0
    # via email-validator
email-validator==1.1.3
    # via flask-appbuilder
flask==2.0.3
    # via
    #   apache-superset
    #   flask-appbuilder
    #   flask-babel
    #   flask-caching
    #   flask-compress
    #   flask-jwt-extended
    #   flask-login
    #   flask-migrate
    #   flask-sqlalchemy
    #   flask-wtf
flask-appbuilder==4.1.3
    # via apache-superset
flask-babel==1.0.0
    # via flask-appbuilder
flask-caching==1.10.1
    # via apache-superset
flask-compress==1.10.1
    # via apache-superset
flask-jwt-extended==4.3.1
    # via flask-appbuilder
flask-login==0.4.1
    # via flask-appbuilder
flask-migrate==3.1.0
    # via apache-superset
flask-sqlalchemy==2.5.1
    # via
    #   flask-appbuilder
    #   flask-migrate
flask-talisman==0.8.1
    # via apache-superset
flask-wtf==0.14.3
    # via
    #   apache-superset
    #   flask-appbuilder
frozenlist==1.3.0
    # via
    #   aiohttp
    #   aiosignal
func-timeout==4.3.5
    # via apache-superset
geographiclib==1.52
    # via geopy
geopy==2.2.0
    # via apache-superset
graphlib-backport==1.0.3
    # via apache-superset
gunicorn==20.1.0
    # via apache-superset
hashids==1.3.1
    # via apache-superset
holidays==0.10.3
    # via apache-superset
humanize==3.11.0
    # via apache-superset
idna==3.2
    # via
    #   email-validator
    #   yarl
isodate==0.6.0
    # via apache-superset
itsdangerous==2.1.1
    # via
    #   flask
    #   flask-wtf
jinja2==3.0.3
    # via
    #   flask
    #   flask-babel
jsonschema==3.2.0
    # via flask-appbuilder
kombu==5.2.4
    # via celery
korean-lunar-calendar==0.2.1
    # via holidays
mako==1.1.4
    # via alembic
markdown==3.3.4
    # via apache-superset
markupsafe==2.0.1
    # via
    #   jinja2
    #   mako
    #   wtforms
marshmallow==3.13.0
    # via
    #   flask-appbuilder
    #   marshmallow-enum
    #   marshmallow-sqlalchemy
marshmallow-enum==1.5.1
    # via flask-appbuilder
marshmallow-sqlalchemy==0.23.1
    # via flask-appbuilder
msgpack==1.0.2
    # via apache-superset
multidict==5.1.0
    # via
    #   aiohttp
    #   yarl
numpy==1.22.1
    # via
    #   apache-superset
    #   pandas
    #   pyarrow
packaging==21.3
    # via
    #   bleach
    #   deprecation
pandas==1.3.4
    # via apache-superset
parsedatetime==2.6
    # via apache-superset
pgsanity==0.2.9
    # via apache-superset
polyline==1.4.0
    # via apache-superset
prison==0.2.1
    # via flask-appbuilder
prompt-toolkit==3.0.28
    # via click-repl
pyarrow==5.0.0
    # via apache-superset
pycparser==2.20
    # via cffi
pyjwt==2.4.0
    # via
    #   apache-superset
    #   flask-appbuilder
    #   flask-jwt-extended
pymeeus==0.5.11
    # via convertdate
pyparsing==3.0.6
    # via
    #   apache-superset
    #   packaging
pyrsistent==0.16.1
    # via jsonschema
python-dateutil==2.8.2
    # via
    #   alembic
    #   apache-superset
    #   croniter
    #   flask-appbuilder
    #   holidays
    #   pandas
python-dotenv==0.19.0
    # via apache-superset
python-editor==1.0.4
    # via alembic
python-geohash==0.8.5
    # via apache-superset
pytz==2021.3
    # via
    #   babel
    #   celery
    #   convertdate
    #   flask-babel
    #   pandas
pyyaml==5.4.1
    # via
    #   apache-superset
    #   apispec
redis==3.5.3
    # via apache-superset
selenium==3.141.0
    # via apache-superset
simplejson==3.17.3
    # via apache-superset
six==1.16.0
    # via
    #   bleach
    #   click-repl
    #   flask-talisman
    #   holidays
    #   isodate
    #   jsonschema
    #   polyline
    #   prison
    #   pyrsistent
    #   python-dateutil
    #   sqlalchemy-utils
    #   wtforms-json
slackclient==2.5.0
    # via apache-superset
sqlalchemy==1.3.24
    # via
    #   alembic
    #   apache-superset
    #   flask-appbuilder
    #   flask-sqlalchemy
    #   marshmallow-sqlalchemy
    #   sqlalchemy-utils
sqlalchemy-utils==0.37.8
    # via
    #   apache-superset
    #   flask-appbuilder
sqlparse==0.3.0
    # via apache-superset
tabulate==0.8.9
    # via apache-superset
typing-extensions==3.10.0.0
    # via apache-superset
urllib3==1.26.6
    # via selenium
vine==5.0.0
    # via
    #   amqp
    #   celery
    #   kombu
wcwidth==0.2.5
    # via prompt-toolkit
webencodings==0.5.1
    # via bleach
werkzeug==2.0.3
    # via
    #   flask
    #   flask-jwt-extended
wtforms==2.3.3
    # via
    #   flask-appbuilder
    #   flask-wtf
    #   wtforms-json
wtforms-json==0.3.3
    # via apache-superset
yarl==1.6.3
    # via aiohttp

# The following packages are considered to be unsafe in a requirements file:
# setuptools

查看文件

(superset) [zhangxi@hadoop102 ~]$ ll ~
总用量 12
-rw-r--r--. 1 zhangxi zhangxi 5795 2月   3 15:27 base.txt
drwxrwxr-x. 2 zhangxi zhangxi 4096 2月   6 11:42 bin

该文件可用于指定superset依赖组件及版本,下载地址及内容如下。

https://raw.githubusercontent.com/apache/superset/2.0.0/requirements/base.txt

在base.txt所在目录下执行如下命令,安装SuperSet

(superset) [zhangxi@hadoop102 ~]$ pip install apache-superset==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple -r base.txt

说明:

  • -i的作用是指定镜像,这里选择国内镜像

  • -r的作用是指定superset依赖组件及相应版本,指向base.txt文件即可

配置Superset元数据库

Superset的元数据支持MySQL、PostgreSQL,此处采用MySQL。

1)在MySQL中创建superset元数据库

mysql> CREATE DATABASE superset DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

2)创建superset用户

mysql> create user superset@'%' identified WITH mysql_native_password BY 'superset';
mysql> grant all privileges on *.* to superset@'%' with grant option;
mysql> flush privileges;

3)修改superset配置文件

(superset) [zhangxi@hadoop102 ~]$ vim /opt/module/miniconda3/envs/superset/lib/python3.8/site-packages/superset/config.py

修改内容如下:(184、185行)

# SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset@hadoop102:3306/superset?charset=utf8'

4)安装python msyql驱动

(superset) [zhangxi@hadoop102 ~]$ conda install mysqlclient

5)初始化superset元数据

(superset) [zhangxi@hadoop102 ~]$ export FLASK_APP=superset
(superset) [zhangxi@hadoop102 ~]$ superset db upgrade

SupersetSet初始化

1)创建管理员用户

(superset) [zhangxi@hadoop102 ~]$ superset fab create-admin

2)初始化superset

(superset) [zhangxi@hadoop102 ~]$ superset init

启动Supterset

1)安装gunicorn

(superset) [zhangxi@hadoop102 ~]$ pip install gunicorn -i https://pypi.douban.com/simple/

说明:gunicorn是一个Python Web Server,可以和java中的Tomcat类比

2)启动Superset

确保当前conda环境为superset,及下图所示

启动

(superset) [zhangxi@hadoop102 ~]$ gunicorn --workers 5 --timeout 120 --bind hadoop102:8787  "superset.app:create_app()" --daemon

说明:

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

登录Superset

访问http://hadoop102:8787

3)停止superset

(1)停掉gunicorn进程

(superset) [zhangxi@hadoop102 ~]$ ps -ef | awk '/superset/ && !/awk/{print $2}' | xargs kill -9

(2)退出superset环境

(superset) [zhangxi@hadoop102 ~]$ conda deactivate

superset启停脚本

1)创建superset.sh文件

[zhangxi@hadoop102 bin]$ vim superset.sh

内容如下

#!/bin/bash

superset_status(){
    result=`ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l`
    if [[ $result -eq 0 ]]; then
        return 0
    else
        return 1
    fi
}
superset_start(){
        source ~/.bashrc
        superset_status >/dev/null 2>&1
        if [[ $? -eq 0 ]]; then
            conda activate superset ; gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 --daemon 'superset.app:create_app()'
        else
            echo "superset正在运行"
        fi

}

superset_stop(){
    superset_status >/dev/null 2>&1
    if [[ $? -eq 0 ]]; then
        echo "superset未在运行"
    else
        ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9
    fi
}


case $1 in
    start )
        echo "启动Superset"
        superset_start
    ;;
    stop )
        echo "停止Superset"
        superset_stop
    ;;
    restart )
        echo "重启Superset"
        superset_stop
        superset_start
    ;;
    status )
        superset_status >/dev/null 2>&1
        if [[ $? -eq 0 ]]; then
            echo "superset未在运行"
        else
            echo "superset正在运行"
        fi
esac

2)加执行权限

[zhangxi@hadoop102 bin]$ chmod +x superset.sh

3)测试

启动superset

[zhangxi@hadoop102 bin]$ superset.sh start

停止superset

[zhangxi@hadoop102 bin]$ superset.sh stop

关于Apache Superset的使用后续讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/283363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis多表映射

1. 多表映射概念 MyBatis 思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。 如果能有一种数据库映射模式,完美适配所有的应用程序查询需求,那就太…

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树: 2.3数据结构中的二叉树: 2.4特殊的二叉树: 2.5 二叉树的存储结构 2.51 顺序存储: 2.5.2 链式存储&…

【快速全面掌握 WAMPServer】09.如何在 WAMPServer 中安装 Composer

网管小贾 / sysadm.cc WAMPServer 的大名想必应该有不少人特别是新手小白们略有耳闻吧。 它是出自法国大神之手的一款 PHP 开发环境集成包,工作于 Windows 环境,类似于它这样的集成包在 Linux 平台上反正我是没找到,所以它应该算是对使用 Wi…

sparkstreamnig实时处理入门

1.2 SparkStreaming实时处理入门 1.2.1 工程创建 导入maven依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.12</artifactId><version>3.1.2</version> </dependency> <dependency…

【MySQL表的增删查改】

文章目录 前言1 Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩 ( &…

CocoaPods安装及‘__rvm_make -j8‘处理

CocoaPods是一个用Ruby写的、负责管理iOS项目中第三方开源库的工具&#xff0c;CocoaPods能让我们集中的、统一管理第三方开源库&#xff0c;为我们节省设置和更新第三方开源库的时间。 安装步骤 1.查看ruby版本 ruby -v 2.通过rvm来安装或升级Ruby&#xff0c;依次执行 cu…

Apache OFBiz RCE漏洞复现(CVE-2023-51467)

0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。 0x02 漏洞概述 漏洞成因 该系统的身份验证机制存在缺陷,可能允许未授权用户通过绕过标准登录流程来获取后台访问权限。此外,在…

【PTA-C语言】实验七-函数与指针I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离&#xff08;分数 10&#xff09;6-2 使用函数输出一个整数的逆序数&#xff08;分数 10&#xff09;6-3 使用函数求最大公约数&#xff08;分数 10&#xff09;6-4…

使用Pycharm给html文件添加浏览器

1、选择菜单栏的File---->选择setting设置 2、选择Tools(工具)---> Web Browser(web 浏览器) 勾选 自己想要添加的浏览器前面 的勾选框即可 注意点击ok进行保存

《数据结构、算法与应用C++语言描述》- 平衡搜索树 -全网唯一完整详细实现插入和删除操作的模板类

平衡搜索树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_34Balanced search tree 概述 本章会讲AVL、红-黑树、分裂树、B-树。 平衡搜索树的应用&#xff1f; AVL 和红-黑树和分裂树适合内部存储的应用。 B-树适合外部存储的…

github使用技巧(经验篇)

相关经验 指定代码范围并高亮显示 例如&#xff0c;指定nn_ops.py文件2612-L2686行的代码&#xff1a;https://github.com/tensorflow/tensorflow/blob/v2.14.0/tensorflow/python/ops/nn_ops.py#L2612-L2686 FAQ Q&#xff1a;github网页打不开&#xff1f; 【github加载不…

Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题

Java项目调试实战&#xff1a;如何高效调试Spring Boot项目中的GET请求&#xff0c;并通过equalsIgnoreCase解决大小写不一致问题 写在最前面全部过程Java equalsIgnoreCase() 方法idea中如何调试SpringBoot项目在IntelliJ IDEA中使用内置HTTP客户端设置断点和调试 补充&#x…

PiflowX组件-WriteToUpsertKafka

WriteToUpsertKafka组件 组件说明 以upsert方式往Kafka topic中写数据。 计算引擎 flink 有界性 Streaming Upsert Mode 组件分组 kafka 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_h…

Unity坦克大战开发全流程——结束场景——通关界面

结束场景——通关界面 就照着这样来拼 写代码 hideme不要忘了 修改上一节课中的代码

旅游网站Xtrip 前端模板html推荐

一、需求分析 旅游网站的功能可以根据具体的业务需求和目标进行不同的设计和实现&#xff0c;但是以下是一些常见的旅游网站功能&#xff0c;供参考&#xff1a; 酒店预订功能&#xff1a;用户可以搜索并预订酒店&#xff0c;查看酒店的详细信息、价格、评价和照片&#xff0c…

MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之General Tablespaces&#xff08;通用表空间/一般表空间&#xff09;General tablespaces&#xff08;通用表空间/一般表空间&#xff09;通用表空间的功能通用表空间的限制 创建通用表空间&#xff08;一般表空间&#xff09;创建语法…

Linux磁盘与文件管理

目录 一、磁盘介绍 1. 磁盘数据结构 2. 磁盘的接口类型 3. 磁盘在Linux上的表现形式 二、磁盘分区与MBR 1. 分区优缺点 2. 分区方式 3. MBR分区 4. GPT分区 三、文件系统 1. 文件系统的组成 2. 默认的文件系统 3. 文件系统的作用 4. 模拟破坏文件与修复文件 4…

项目总结报告

《项目总结报告》 1.项目概要&#xff08;项目基本信息&#xff0c;项目期间&#xff0c;项目成果&#xff0c;项目开发工具环境&#xff09; 2.项目工作分析&#xff08;需求变更&#xff0c;计划与进度实施&#xff0c;投入情况&#xff0c;收益情况&#xff0c;质量情况&…

【Linux】Linux 下基本指令 -- 详解

无论是什么命令&#xff0c;用于什么用途&#xff0c;在 Linux 中&#xff0c;命令有其通用的格式&#xff1a; command [-options] [parameter] command&#xff1a;命令本身。-options&#xff1a;[可选&#xff0c;非必填]命令的一些选项&#xff0c;可以通过选项控制命令的…

navicat premium历史版本下载及更新navicat premium15 永久(使用)有效期

1、navicat premium介绍 Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 GaussDB 、OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amaz…