写点什么

手把手教程|通过部署 Apache Superset 实现 Amazon S3 的数据可视化

  • 2022 年 1 月 17 日
  • 本文字数:3720 字

    阅读完需:约 12 分钟

手把手教程|通过部署 Apache Superset 实现 Amazon S3 的数据可视化


为了让数据挖掘和数据查询能够更加普世化,惠及更多的想使用数据的但缺乏 SQL 能力的一般数据消费者,各类数据可视化工具应运而生,像 Amazon Quicksight 就是这样一款产品。目前亚马逊云科技中国区 Amazon Quicksight 还没有上线,开源界也有不少好用的可视化项目,Apache Superset 就是其中之一。


本篇推送会带您一步一步地在亚马逊云科技上部署 Apache Superset 并在 Superset 上创建一个展示新冠肺炎情况的 Dashboard(示例如下)。新冠肺炎数据存储于 Amazon S3 上并通过 Amazon Athena 来直接查询。


Apache Superset 基本功能:

  • 支持多种图表类型和数据源类型

  • 支持通过可视化的方式进行数据探索并一键生成展示看板,并提供数据下载功能

  • 支持报表分享和复杂的权限管理

  • 支持直接写 SQL 构建基于原始数据的逻辑虚拟层


准备好我们就开始吧,

以下步骤基于亚马逊云科技宁夏区域!

步骤 1

使用 docker 部署 Apache Superset


本步骤阐述了如何在 Amazon Linux 环境中部署 Superset,并且在宁夏区域已经准备好了一个公用的 Superset AMI 环境。这个 AMI 中包含了所有下述步骤创建的 Superset 报表和所需数据,如果直接使用此 AMI 的话可以跳过步骤 1,AMI 名字 为 Amazon-Demo-Superset-Covid19,可以在宁夏区 Amazon EC2 公有映像中找到。登录的用户名密码默认都是 admin,默认的 Web 端口是 8088。


注意:此 AMI 仅供本博客教学演示使用,非官方认证 AMI 请勿直接用于生产环境。

1.1   启动一台 Amazon Linux EC2 并安装启动 docker 环境,需要机型为 t.xlarge 及以上,EBS 盘 20GB 以上。

sudo yum update -y
# install python3 gccsudo yum install -y python3 libpq-dev python3-devsudo yum install -y gcc gcc-c++
# add following into ~/.bashrcecho "export PATH=/usr/local/bin:$PATH" >> ~/.bashrcecho "alias python=python3" >> ~/.bashrcecho "alias pip=pip3" >> ~/.bashrcsource ~/.bashrcpython --version
# install dockersudo yum -y install dockersudo usermod -a -G docker ec2-usersudo systemctl start dockersudo systemctl status dockersudo systemctl enable dockersudo chmod 666 /var/run/docker.sockdocker ps
# install docker-composesudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version
复制代码

1.2   下载 Superset Docker 文件

sudo yum install -y git curlgit clone https://github.com/apache/incubator-superset/
复制代码

1.3   修改 Dockerfile 安装 PyAthena 插件以支持 Athena 数据源

cd incubator-supersetvi Dockerfile
复制代码

加入连接 Athena 需要的依赖

RUN pip install PyAthenaJDBC \        && pip install PyAthena \        && pip install psycopg2
复制代码

重新 build 和启动 Superset

docker-compose builddocker-compose up
复制代码

需要配置管理员用户权限,在 docker/docker-init.sh 中默认创建用户 admin(密码也是 admin)但权限并没有更新,通过以下命令更新权限

docker-compose exec superset bashsuperset init
复制代码

1.4   配置成功后,Superset 默认使用 8088 端口,使用 http://<EC2 公有 IP>:8088 访问,用户名和密码均为 admin(注意:国内亚马逊云科技账户需要 ICP 备案才能访问)

1.5   本实验使用本地存储来保存用户名和密码,如需要配置外部的数据库用来存储登录数据 Docker 的配置请参考 GitHub 文档 。

https://github.com/amancevice/docker-superset/tree/main/examples


另外 Superset 也支持 LDAP 或者 OpenID 登录,配置文件

https://github.com/apache/superset/blob/master/superset/config.py


步骤 2

配置新冠数据实时数据源


本实验中的数据来源于约翰霍普金斯大学的实时更新的开放数据集。此 S3 存储桶在海外账户,如果海外账号可以参照博客,但如果国内区域的话需要同步到国内的 S3 桶中使用。


2.1   同步海外 S3 的数据源到宁夏 S3


Option 1:可以使用同步工具设置源桶和目标桶来同步数据

https://github.com/aws-samples/amazon-s3-resumable-upload

需要同步的 S3 路径为 s3://covid19-lake/enigma-jhu/,每个文件夹里面有 json 和 csv 两种类型的数据,选择其一即可。此数据缺乏省市名字到 ISO3166-2 代码映射表,Superset 中的城市地图需要用到。需要使用 AMI (Amazon-Demo-Superset-Covid19)中的 province_code_mapping 数据。


Option 2: 2020-04-22 号的静态数据存储在机器 AMI(Amazon-Demo-Superset-Covid19)的/home/ec2-user/data/ 可使用以下命令上传到位于宁夏的 S3 桶中


aws s3 cp /home/ec2-user/data/ s3://<宁夏S3桶名字>/ --recursive
复制代码


2.2   Amazon Glue 爬取 S3 数据生成 Athena 表


配置一个 Glue 的爬网程序,指定宁夏 S3 桶数据的根目录(包含两张表的数据,爬虫会自动分表),并配置表前缀为 covid19_ 数据库为 covid19。具体操作参照官方文档。

https://docs.aws.amazon.com/zh_cn/glue/latest/dg/console-crawlers.html

2.3   原始数据存在一些重复值和需要丰富的部分,可以使用 Amazon Athena 创建 view 来简单处理。如果想要把处理的结果持久化还是推荐使用 Amazon Glue 来做定时的 ETL。创建语句如下:


CREATE OR REPLACE VIEW "daily_region_stats" ASSELECT date_trunc('day', CAST(date_parse(last_update, '%Y-%m-%dT%T') AS TIMESTAMP)) AS day,combined_key as region,province_state,country_region, max(confirmed) as confirmed ,max(deaths) as deaths,max(recovered) as recoveredFROM "covid19"."covid19_enigma_jhu" group by date_trunc('day', CAST(date_parse(last_update, '%Y-%m-%dT%T') AS TIMESTAMP)),combined_key,province_state,country_region
CREATE OR REPLACE VIEW region_stats_snapshot AS WITH  src AS (   SELECT     "province_state"   , "combined_key"   , (CASE "country_region" WHEN 'US' THEN 'United States' ELSE "country_region" END) "country_region"   , "max"("confirmed") "confirmed"   , "max"("deaths") "deaths"   , "max"("recovered") "recovered"   FROM     covid19.covid19_enigma_jhu   GROUP BY "province_state", "country_region", "combined_key"SELECT  src.*, "iso_code"FROM  (srcLEFT JOIN covid19_province_code_mapping USING (province_state))
复制代码



步骤 3

SUPERSET 配置 ATHENA 数据源并创建 DASHBOARD


如果使用 AMI(Amazon-Demo-Superset-Covid19),图表和 Dashboard 已经配好,只需要修改步骤 3.1 中数据库连接中的 S3_staging_dir 为自己的 S3 地址即可,另外 EC2 的 IAM 角色需要有相应权限。以下步骤仅展示 Superset 的基本功能,如果想要深入了解细节操作请参照 Superset 官网。

https://superset.apache.org/docs/intro/


3.1   Superset 中可以指定不同的数据源,通过 Sources-> Databases 添加 Athena 为数据源。


部署 Superset 的 EC2 附加的 IAM 角色需要有 Athena 查询和 Glue Catalog 的权限,为方便起见可以赋予 AthenaFullAccess 和 GlueFullAccess。但实际情况请按照最小权限原则来保障安全。

Athena 连接 URL:

awsathena+rest://@athena.cn-northwest-1.amazonaws.com.cn/default?s3_staging_dir=<用来存储查询结果的 S3 地址>

3.2  要使用表前需要先在 Superset 中定义表及聚合指标,通过 Sources->Tables 添加新表(绿色+图标),并设置好需要的聚合指标(Metrics)

修改表中 Metrics,Verbose Name 是想要显示的指标名字,范例可参照 AMI 中已有的表格


3.3   Charts 是 Superset 中的做图功能,可以绘制单一图表并有不同的图表选择。通过选择选择不同的聚合方式生成图表。在表列中点击表名字即可进入如下做图编辑页面。

点击 Run Query 后会应用所选的值形成 SQL 查询,并且生成的 SQL 查询语句和相应的返回结果都可以在线查看

3.4   保存相应的 Charts 时候可以选择把 Charts 加入 Dashboard。如果使用 AMI 部署,Dashboard 中可以找到已建好的文首所述的新冠肺炎情况看板。

3.5   除了使用 Charts 的方式编辑查询数据,Superset 还为熟悉 SQL 的用户准备了 SQL Lab 功能。和 Athena 类似,此处可以直接查询数据源中的数据。

总结


除了 Athena 数据源,Superset 还支持各种各样的 JDBC 连接数据库甚至 Apache Druid,支持的数据源种类详见官网。现在我们完成了一个简单的新冠肺炎情况看板,此看板还可以添加更多的指标和展示方式比如添加每日新增的趋势,top 死亡率列表等等。更多的功能和完善方式等着你来探索!


本篇作者

贺浏璐

亚马逊云科技解决方案架构师

负责亚马逊云科技云计算方案的咨询和架构设计,同时致力于大数据方面的研究和应用。

梁睿

亚马逊云科技解决方案架构师

主要负责企业级客户的上云工作,服务客户涵盖从汽车,传统生产制造,金融,酒店,航空,旅游等,擅长 DevOps 领域。11 年 IT 专业服务经验,历任程序开发,软件架构师、解决方案架构师。



用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
手把手教程|通过部署 Apache Superset 实现 Amazon S3 的数据可视化