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:

Amazon Athena
 
Amazon Redshift
 
Apache Drill
 
Apache Druid
 
Apache Hive
 
Apache Impala
 
Apache Kylin
 
Apache Pinot
 
Apache Spark SQL
 
BigQuery
 
ClickHouse
 
CockroachDB
 
Dremio
 
Elasticsearch
 
Exasol
 
Google Sheets
 
Greenplum
 
IBM Db2
 
MySQL
 
Oracle
 
PostgreSQL
 
Presto
 
Snowflake
 
SQLite
 
SQL Server
 
Teradata
 
Vertica
 
Hana

一些图例


其他参考资料: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

http://zhang-jc.github.io/2018/11/27/CentOS-6-8-%E5%AE%89%E8%A3%85-Python3-Could-not-build-the-ssl-module/

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)      共两处

posted @ 2020-09-21 23:16  God_Mode  阅读(1071)  评论(0编辑  收藏  举报