Superset Ubuntu开发环境搭建与常见问题解决

克隆仓库

首先,在 GitHub 上分叉存储库,然后克隆它。

git clone https://github.com/apache/superset.git

cd superset

方式一:docker-compose 启动

docker compose up

这将拉取/构建 docker 映像并运行服务集群,并将本地代码挂在到容器中,所以在本地的代码修改都会被映射到容器中,使容器更新。

注意:使用docker-compose启动的superset服务并不能立马访问,访问8088端口时会出现空白页,这是因为第一次启动会执行一次前端资源的构建,由于前端资源还没有构建完成导致的,等个大概十来分钟再访问试试。构建非常慢,甚至卡住了?建议查看一下内存,确保在10G以上,因为superset前端使用的是webpack构建的,所以在build时非常消耗内存。

方式二:本地部署

后端 Flask Server

首先确保你的python版本是3.9、3.10或3.11,然后执行:

#安装一些必要的依赖,不然在执行下面命令pip install -r requirements/development.txt时会失败。

apt-get update -qq && apt-get install -yqq --no-install-recommends \
    curl \
    default-libmysqlclient-dev \
    libsasl2-dev \
    libsasl2-modules-gssapi-mit \
    libpq-dev \
    libecpg-dev \
    libldap2-dev

apt-get install python3-dev build-essential pkg-config

# 创建一个虚拟环境并激活

cd superset

python3 -m venv venv

source venv/bin/activate

# 安装外部依赖

pip install -r requirements/development.txt

# 以可编辑(开发)模式安装 Superset

pip install -e .

#生成一个密匙,并加入到环境变量

echo export SUPERSET_SECRET_KEY=`(openssl rand -base64 42)` > \
/etc/profile.d/superset_secret_key.sh

source /etc/profile

# 初始化数据库

superset db upgrade

# 创建管理员用户

superset fab create-admin

# 创建默认角色和权限

superset init

# 加载案例数据 ,在此之前必须创建管理员用户

superset load-examples

# 从虚拟环境内部启动 Flask 开发 Web 服务器。

superset run -p 8088 --with-threads --reload --debugger --debug

或者使用Makefile安装

# Create a virtual environment and activate it (recommended)

python3 -m venv venv # setup a python3 virtualenv

source venv/bin/activate

# install pip packages + pre-commit

make install

# Install superset pip packages and setup env only

make superset

前端 superset-frontend

环境准备

首先,确认 Node.js 和 npm的版本

Node.js: Version 18

npm: Version 10

建议使用 nvm 管理节点环境。使用nvm安装nvm与node:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash

#如果使用nvm命令出现 '-bash: nvm: command not found',请执行下面的命令或打开一个新的shell
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion


cd superset-frontend

nvm install

nvm use

安装依赖模块

# 进入到superset-frontend目录

cd superset-frontend

# 安装来自 `package-lock.json`的依赖

npm ci

在执行npm run build构建前端资源时会消耗很大的内存,如果使用的是虚拟机的话建议将内存调高点,不然会一直卡住。

#构建前端资源

npm run build

#构建成功后启动前端

npm run dev-server

浏览器访问

http://localhost:9000

FAQ

为什么使用docker compose启动登录后是一个空白页面,并且容器出现错误信息?

Superset_app报错:

2023-08-31 08:26:20,442:INFO:werkzeug:192.168.0.1 - - [31/Aug/2023 08:26:20] "GET /static/appbuilder/datepicker/bootstrap-datepicker.js HTTP/1.1" 200 -

2023-08-31 08:26:20,443:WARNING:superset.views.base:HTTPException

Traceback (most recent call last):

File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1823, in full_dispatch_request

rv = self.dispatch_request()

File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1799, in dispatch_request

return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)

File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 713, in <lambda>

view_func=lambda **kw: self_ref().send_static_file(**kw), # type: ignore # noqa: B950

File "/usr/local/lib/python3.9/site-packages/flask/scaffold.py", line 331, in send_static_file

return send_from_directory(

File "/usr/local/lib/python3.9/site-packages/flask/helpers.py", line 590, in send_from_directory

return werkzeug.utils.send_from_directory( # type: ignore[return-value]

File "/usr/local/lib/python3.9/site-packages/werkzeug/utils.py", line 578, in send_from_directory

raise NotFound()

werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

2023-08-31 08:26:20,457:INFO:werkzeug:192.168.0.1 - - [31/Aug/2023 08:26:20] "GET /static/appbuilder/js/ab.js HTTP/1.1" 200 -

2023-08-31 08:26:20,458:INFO:werkzeug:192.168.0.1 - - [31/Aug/2023 08:26:20] "GET /static/appbuilder/select2/select2.js HTTP/1.1" 200 -

2023-08-31 08:26:20,473:INFO:werkzeug:192.168.0.1 - - [31/Aug/2023 08:26:20] "GET /static/assets/images/superset-logo-horiz.png HTTP/1.1" 404 -

Superset_node (Exit status 251):

npm ERR! code EIO

npm ERR! syscall rename

npm ERR! path /app/superset-frontend/node_modules/sha.js

npm ERR! dest /app/superset-frontend/node_modules/.sha.js-sPyHcmzN

npm ERR! errno -5

npm ERR! EIO: i/o error, rename '/app/superset-frontend/node_modules/sha.js' -> '/app/superset-frontend/node_modules/.sha.js-sPyHcmzN'

npm ERR! A complete log of this run can be found in:

npm ERR! /root/.npm/_logs/2023-08-31T08_25_51_287Z-debug-0.log

  1. superset_app的报错指的是找不到静态资源,一般这种原因是构建静态资源失败导致的。
  2. superset_node的报错指的是该目录下已经有这个文件了,将会被重命名为.sha.js-sPyHcmzN

如何解决?

其实最主要的问题还是出现在npm,npm在安装依赖是发现已经有这个文件,文件冲突了,导致前端的资源构建失败,出现问题1,然后登录之后返回空白的页面,。所以只需要将这些冲突的文件删掉就可以了,为了减少麻烦,在superset-frontend通过执行find . -type d -name "node_modules" -exec rm -rf {} +npm cache clean --force命令删除所有的node_modules模块与缓存。docker compose重新运行。

问题2

superset_init报错,并且登录页面登录不上去

The above exception was the direct cause of the following exception:

Traceback (most recent call last):

File "/usr/local/bin/superset", line 8, in <module>

sys.exit(superset())

self._handle_dbapi_exception(

File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapi_exception

util.raise_(

File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_

raise exception

File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context

self.dialect.do_execute(

File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute

cursor.execute(statement, parameters)

sqlalchemy.exc.OperationalError: (psycopg2.errors.DeadlockDetected) deadlock detected

DETAIL: Process 77 waits for AccessExclusiveLock on relation 16405 of database 16384; blocked by process 79.

Process 79 waits for AccessShareLock on relation 16413 of database 16384; blocked by process 77.

HINT: See server log for query details.

[SQL: ALTER TABLE dashboard_roles DROP CONSTRAINT dashboard_roles_role_id_fkey]

(Background on this error at: https://sqlalche.me/e/14/e3q8)

sqlalchemy报错,解决这个问题也很简单,使用docker compose restart superset-init 重启一下superset_init就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值