1. 安装
$ mkdir ~/bigdata/superset
$ touch ~/bigdata/superset/superset_config.py
$ export SUPERSET_HOME=~/bigdata/superset
$ conda install mysqlclient -y
$ pip install pillow apache-superset
2. 配置zshrc
需要在 .zshrc 中 PYTHONPATH
变量添加该 superset 项目文件夹:
export PYTHONPATH="/home/yumingmin/bigdata/superset"
3. 创建 Superset 的MySQL数据库
> CREATE DATABASE superset;
> ALTER DATABASE superset CHARACTER SET utf8;
> CREATE USER 'superset'@'localhost' IDENTIFIED BY 'superset1234';
> GRANT ALL PRIVILEGES ON superset.* TO 'superset'@'localhost';
> FLUSH PRIVILEGES;
将 https://raw.githubusercontent.com/apache/superset/master/superset/config.py 文件内容,粘贴到 superset_config.py 文件,并修改以下几处:
BABEL_DEFAULT_LOCALE = "zh"
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"zh": {"flag": "cn", "name": "Chinese"},
}
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://superset:superset1234@localhost:3306/superset?charset=utf8&unix_socket=/var/run/mysqld/mysqld.sock"
你也可以使用默认的连接方式,但如果 MySQL 是 8.0 以上版本时,会报错 caching_sha2_password
插件无法加载。
SQLALCHEMY_DATABASE_URI = "mysql://superset:superset1234@localhost:3306/superset?charset=utf8&unix_socket=/var/run/mysqld/mysqld.sock"
解决此方问题的方法有 2 个,一是使用 PyMysql,另外一个则是修改权限,并在 /etc/mysql/mysql.conf.d/mysqld.cnf 文件中 [mysqld]
部分添加 default_authentication_plugin=mysql_native_password
。
ALTER USER 'superset'@'localhost' IDENTIFIED WITH mysql_native_password BY 'superset1234';
4. 创建用户
$ superset fab create-admin
$ superset fab create-user
一定要先执行这两步,否则会报 superset.user_attribute
错误(关于这一点非常重要,网上关于这个问题的解决办法大都是错误的)。
5. 启动
$ superset db upgrade
$ superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger
一定要看到 MySQLImpl 才说明使用 MySQL 作为后台数据库成功,如果是 SQLiteImpl 则表示还未成功。解决办法:在 superset 目录下执行
$ superset db init # 如果报错,需要删除 site-packages/superset/migrations 文件夹
$ superset db migrate
$ superset db upgrade
看到 Loaded your LOCAL configuration at [/home/yumingmin/bigdata/superset/superset_config.py
信息,才表示你的配置文件加载成功,否则都是使用的默认配置。
6. 登录后报错
如果出现上述情况时,在 superset 目录下再次执行 superset init
命令。并添加 MySQL 数据库,首先需要给 MySQL 用户赋予外部访问权限:
> USE mysql;
> UPDATE user SET host='%' WHERE user='superset';
> GRANT ALL PRIVILEGES ON superset.* TO 'superset'@'%'; -- 需要执行两次
[