Superset数据看板平台搭建

Superset 是一个现代数据探索和数据可视化平台。Superset 可以替代或增强许多团队的专有商业智能工具。Superset 与各种数据源很好地集成。

Superset 提供:

  • 用于快速构建图表的无代码界面
  • 一个强大的、基于 Web 的 SQL 编辑器 ,用于高级查询
  • 用于快速定义自定义维度和指标的轻量级语义层
  • 几乎任何 SQL 数据库或数据引擎的开箱即用支持
  • 各种精美的可视化效果来展示您的数据,从简单的条形图到地理空间可视化效果
  • 轻量级、可配置的 缓存层 ,有助于减轻数据库负载
  • 高度可扩展的安全角色和身份验证选项
  • 用于编程自定义的 API
  • 专为扩展而设计的云原生架构

在Centos上用Conda安装

  1. 系统基础依赖安装
    1. 旧版的centos上:sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel
    2. 较为新版的centos上:sudo dnf install gcc gcc-c++ libffi-devel python3-devel python3-pip python3-wheel openssl-devel cyrus-sasl-devel openldap-devel
      1. 如果后续看到有报错sasl的错误,再安装 yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi # 非必须:添加hive连接时报错sasl相关错误时需要
  2. conda安装python依赖包
    1. conda create -n py39superset python=3.9 # 最低需要3.9
    2. conda activate py39superset
    3. pip install --upgrade pip # 不能太老版本的pip
    4. pip install apache-superset -i https://mirrors.aliyun.com/pypi/simple
    5. export SUPERSET_SECRET_KEY="oh-my-recommend" && export FLASK_APP="superset" # 配置环境变量
    6. superset db upgrade # 初始化db
    7. superset fab create-admin # Create an admin user in your metadata database (use admin as username to be able to load the examples)
    8. superset load_examples # (可选) 从网络上加载个demo数据集用于play(大概率会遭遇网络问题,建议跳过本步骤)
    9. superset init # 创建默认角色和权限
    10. pip install pyhive sasl thrift thrift-sasl pyhs2 -i https://mirrors.aliyun.com/pypi/simple/ # 连接hive需要的依赖包
  3. 在开发环境启动:
    1. SUPERSET_SECRET_KEY="oh-my-recommend" FLASK_APP=superset superset run -h '0.0.0.0' -p 9999 --with-threads --reload --debugger # To start a development web server on port 9999, use -p to bind to another port (服务器上记得开放9999端口)
    2. 然后用ip:9999在浏览器访问即可。本地的话ip可以用localhost,服务器上可用公网ip访问(curl cip.cc可获取到公网IP)

界面改成中文

  1. 修改 ~/.conda/envs/py39superset/lib/python3.9/site-packages/superset/config.py文件
    1
    2
    3
    4
    5
    6
    7
    8
    # 找到 BABEL_DEFAULT_LOCALE 将其改为
    BABEL_DEFAULT_LOCALE = "zh"

    # 找到 LANGUAGES = {} 将其改为
    LANGUAGES = {
    "en": {"flag": "us", "name": "English"},
    "zh": {"flag": "cn", "name": "简体中文"},
    }
  2. 重启服务生效

SuperSet连接Hive数据库

  1. 点击右上角 Settings -> 数据库连接 -> +DATABASE -> Apache Hive
  2. SQLAlchemy URI中输入 hive://hive@localhost:10000/default,点击 TEST CONNECTION测试连接是否成功
  3. ADVANCED 选项卡中,在 OtherEngine Parameters中输入 {"connect_args":{"configuration":{"hive.execution.engine":"tez"}}}以启用tez引擎而非默认的MR引擎
  4. 最后点击 CONNECT 完成即可(可能弹出报错,但忽略并刷新网页即可)

SuperSet连接Spark-SQL

  1. 点击右上角 Settings -> 数据库连接 -> +DATABASE -> Apache Spark SQL
  2. SQLAlchemy URI中输入 hive://hive@localhost:10001/default(默认是10000和hiveserver冲突),点击 TEST CONNECTION测试连接是否成功
    • 需要启动Spark Thrift Server服务: $SPARK_HOME/sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=10001
  3. 最后点击 CONNECT 完成即可
  4. (可选)解决获取不到表名的问题:手动改pyhive的代码,将 /root/miniconda3/envs/py39superset/lib/python3.9/site-packages/pyhive/sqlalchemy_hive.py 中的 get_table_names 函数中 return [row[0] for row in connection.execute(text(query))] 的改为 return [row[0] if len(row)!=3 else row[1] for row in connection.execute(text(query))]

创建图表和看板

  1. 点击 数据集 TAB,点击 +DATASET 按钮
  2. 选择 Database -> Schema -> Table -> Create dataset and create chart,完成将Hive的一张表映射为这里的DataSet
  3. 选择 Line Chart为例
    1. DATA 子选项卡
      1. X-AXIS:选择做为x轴的列。常用的如:日期
      2. METRICS:选择做为y轴的指标(可多选)。如:次留,首日LTV等
      3. DIMENSIONS:选择做为分组对比的列。如:分实验组看多天的次留指标趋势,这里的实验组就是DIMENSIONS
      4. FILTERS:等效于SQL中的WHERE/HAVING语句,过滤一些不要的数据。如:按天分区筛选
      5. 其他:大部分时候保持默认即可
    2. CUSTOMIZE 子选项卡
      1. X Axis:配置x轴标题以及标题离刻度的距离。中文建议距离30而非默认的15
      2. Y Axis:配置y轴标题以及标题离刻度的距离。中文建议默认的15即可,Y Axis Title Position建议选Top而非默认的Left
      3. SHOW VALUE:显示每个点的值,适合少量数据或条形图
      4. MARKER:加粗显示每个点
      5. DATA ZOOM:显示拖动条,可拖动X轴的刻度范围,如日期可拖动选择任意一段时间内的数据显示
      6. Y AXIS FORMAT:可选择百分数显示
      7. TRUNCATE Y AXIS:截断Y轴的空白区域

参考资料