Superset
1、介绍
官网:https://superset.apache.org/index.html
Apache Superset 是一个现代的、面向企业的商业智能web应用程序。
superset是由Airbnb(知名在线短租赁公司)开源的数据分析与可视化平台(曾用名Caravel、Panoramix)
该工具主要特点是可自助分析、自定义仪表盘、分析结果可视化(导出)、用户/角色权限控制,还集成了一个SQL编辑器,可以进行SQL编辑查询对结果集进行保存可视化等。
核心功能:
1.快速创建数据可视化互动仪表盘
2.丰富的可视化图表模板,灵活可扩展
3.细粒度高可扩展性的安全访问模型,支持主要的认证供应商(数据库、OpenID、LDAP、OAuth 等)
4.简洁的语义层,可以控制数据资源在 UI 的展现方式
5.与 Druid(其实它貌似就是为了druid而生的)深度集成,可以快速解析大规模数据集
6.快速的通过配置装载仪表盘等
支付的RDBMS:
一些图例
其他参考资料:https://www.zhihu.com/topic/20677618/hot
2、安装
环境准备:
centos7 python3 mysql npm
安装步骤:
1、Python3安装 以及其他依赖
sudo yum upgrade python-setuptools sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel
2、创建Python virtualenv
pip install virtualenv python3 -m venv venv . venv/bin/activate pip install --upgrade setuptools pip
3、安装superset
# Install superset pip install apache-superset # Initialize the database superset db upgrade # Create an admin user (you will be prompted to set a username, first and last name before setting a password) $ export FLASK_APP=superset superset fab create-admin # Load some data to play with superset load_examples # Create default roles and permissions superset init # To start a development web server on port 8088, use -p to bind to another port superset run -p 8088 --with-threads --reload --debugger
这里选用的是pip的方式安装的0.36.0版。 superset -h参数可以指定主机IP。
4、可以通过http://安装主机IP:8088进行访问
config.py中的数据库配置【SQLALCHEMY_DATABASE_URI】默认是SQLlite,这里改为了MySQL。
安装完成,superset路径为venv/lib/python3.7/site-packages/superset。
参考:
https://github.com/apache/incubator-superset
http://superset.apache.org/installation.html#python-virtualenv
3、遇到的问题
1、Python3安装缺失ssl
2、fabmanager命令不存在
pip安装flask等依赖。安装此文件requirements.txt中依赖即可。
3、Unexpected error invalid syntax (hive.py, line 280)
解决:
pyhive 安装不正确
sudo yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi -y sudo pip install bit_array sudo pip3 install thrift sudo pip3 install thrift_sasl sudo pip3 install sasl sudo pip3 install impyla sudo pip3 install pyhive[hive]
4、pyhive no mechanism available: No worthy mechs found
解决:
sudo yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi -y
与第3点相同处理,这边是因为pyhive不是最新版本导致,升级到最新问题解决。
5、testcnn接口报错
superset/views/core.py 1366行报错
修改:
db_name = request.json.get("name") --》db_name = request.json["name"] uri = request.json.get("uri") --》uri = request.json["uri"]
6、hive连接配置
hive://0.0.0.0:10000/default?auth=NONE
需要勾选该项"模拟登录用户",公司的用户都是分配的用户,勾选该项可以以hivesever启动程序所属角色运行SQL。
还需要配置hive-site.xml,配置如下:
<property> <name>hive.server2.authentication</name> <value>NONE</value> <description> Expects one of [nosasl, none, ldap, kerberos, pam, custom]. Client authentication types. NONE: no authentication check LDAP: LDAP/AD based authentication KERBEROS: Kerberos/GSSAPI authentication CUSTOM: Custom authentication provider (Use with property hive.server2.custom.authentication.class) PAM: Pluggable authentication module NOSASL: Raw transport </description> </property> <property> <name>hive.server2.enable.doAs</name> <value>false</value> </property>
这里配置的hive.server2.authentication该项值为NONE(注意必须大写),与URI处的值相同。你也可以选用其他方式。
7、依赖版本问题
安装过程中遇到的最多的问题就是依赖版本不对导致的各种各样的问题,所以最好按照github上提供的requirements.txt依赖版本进行安装,即使如此也还有可能遇到依赖问题,到时适当升级或者降级即可。
8、csv导出中文乱码
修改config配置 改为使用utf-8-sig编码
9、sqllab查询导出csv结果报错;
INFO:werkzeug:100.81.4.55 - - [02/Jun/2020 17:22:41] "GET /superset/csv/IuNtiyKxZU HTTP/1.1" 200 - ERROR:werkzeug:Error on request: Traceback (most recent call last): File "/home/xxx/venv/lib/python3.7/site-packages/werkzeug/serving.py", line 304, in run_wsgi execute(self.server.app) File "/home/xxx/venv/lib/python3.7/site-packages/werkzeug/serving.py", line 295, in execute write(data) File "/home/xxx/venv/lib/python3.7/site-packages/werkzeug/serving.py", line 258, in write self.send_header(key, value) File "/usr/local/python3/lib/python3.7/http/server.py", line 516, in send_header ("%s: %s\r\n" % (keyword, value)).encode('latin-1', 'strict')) UnicodeEncodeError: 'latin-1' codec can't encode character '\u5355' in position 53: ordinal not in range(256)
原因:查询tab的名字中包含中文
解决:
修改superset/views/core.py中csv函数
response.headers[ "Content-Disposition" ] = f"attachment; filename={query.name}.csv".encode('utf-8')
10、hive图表查询,选择日期列后自动拼接的SQL中group处程序自动利用date_trunc函数转换
原因:
HiveEngineSpec继承自PrestoEngineSpec,而PrestoEngineSpec中当按照天聚合时会用到date_trunc函数,部分代码如下:
class PrestoEngineSpec(BaseEngineSpec): engine = "presto" _time_grain_expressions = { None: "{col}", "PT1S": "date_trunc('second', CAST({col} AS TIMESTAMP))", "PT1M": "date_trunc('minute', CAST({col} AS TIMESTAMP))", "PT1H": "date_trunc('hour', CAST({col} AS TIMESTAMP))", "P1D": "date_trunc('day', CAST({col} AS TIMESTAMP))", "P1W": "date_trunc('week', CAST({col} AS TIMESTAMP))", "P1M": "date_trunc('month', CAST({col} AS TIMESTAMP))", "P0.25Y": "date_trunc('quarter', CAST({col} AS TIMESTAMP))", "P1Y": "date_trunc('year', CAST({col} AS TIMESTAMP))", "P1W/1970-01-03T00:00:00Z": "date_add('day', 5, date_trunc('week', " "date_add('day', 1, CAST({col} AS TIMESTAMP))))", "1969-12-28T00:00:00Z/P1W": "date_add('day', -1, date_trunc('week', " "date_add('day', 1, CAST({col} AS TIMESTAMP))))", }
解决:
config.py中可配置当按天聚合时如何对字段进行操作,新增配置如下:
TIME_GRAIN_ADDON_EXPRESSIONS: Dict[str, Dict[str, str]] = { 'hive': { 'P1D': 'to_date({col})' } }
11、图表60s查询无结果自动停止
解决:修改config配置文件中该项 SUPERSET_WEBSERVER_TIMEOUT
12、表中存储的日期字段都为String或者varchar类型,而superset日期列需要为datatime类型
13、日志操作时间不是本地时间,是格林尼治时间
解决:
修改superset/models/core.py中
dttm = Column(DateTime, default=datetime.utcnow) 改为 dttm = Column(DateTime, default=datetime.now) 共两处