• 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
    " % (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)      共两处

    收住自己的心 一步一个脚印 做好自己的事
  • 相关阅读:
    为什么要提倡"Design Pattern"呢? 开闭原则 系统设计时,注意对扩展开放,对修改闭合。
    面向对象、接口编程的重要性 python 为什么引入接口interface
    ON DUPLICATE KEY UPDATE
    Starting Session of user root.
    DRDS和RDS主要用来存储用户交易信息,MongoDB主要用来存储商品维度信息
    抽象不应该依赖于具体,具体应该依赖于抽象。 要针对接口编程,而不是针对实现编程。
    高层次的模块不应该依赖于低层次的模块
    系统设计的次要目的
    存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档
    JVM 的 Xms 和 Xmx 设置一样大小的内存容量
  • 原文地址:https://www.cnblogs.com/GodMode/p/13709378.html
Copyright © 2020-2023  润新知