共计 5219 个字符,预计需要花费 14 分钟才能阅读完成。
为了让数据挖掘和数据查问可能更加普世化,惠及更多的想应用数据的但不足 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 gcc
sudo yum install -y python3 libpq-dev python3-dev
sudo yum install -y gcc gcc-c++
# add following into ~/.bashrc
echo "export PATH=/usr/local/bin:$PATH" >> ~/.bashrc
echo "alias python=python3" >> ~/.bashrc
echo "alias pip=pip3" >> ~/.bashrc
source ~/.bashrc
python --version
# install docker
sudo yum -y install docker
sudo usermod -a -G docker ec2-user
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
sudo chmod 666 /var/run/docker.sock
docker ps
# install docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
1.2 下载 Superset Docker 文件
sudo yum install -y git curl
git clone https://github.com/apache/incubator-superset/
1.3 批改 Dockerfile 装置 PyAthena 插件以反对 Athena 数据源
`cd incubator-superset
vi Dockerfile`
退出连贯 Athena 须要的依赖
RUN pip install PyAthenaJDBC \
&& pip install PyAthena \
&& pip install psycopg2
从新 build 和启动 Superset
`docker-compose build
docker-compose up`
须要配置管理员用户权限,在 docker/docker-init.sh 中默认创立用户 admin(明码也是 admin)但权限并没有更新,通过以下命令更新权限
docker-compose exec superset bash
superset init
1.4 配置胜利后,Superset 默认应用 8088 端口,应用 http://<EC2 私有 IP>:8088 拜访,用户名和明码均为 admin(留神:国内亚马逊云科技账户须要 ICP 备案能力拜访)
1.5 本试验应用本地存储来保留用户名和明码,如须要配置内部的数据库用来存储登录数据 Docker 的配置请参考 GitHub 文档。
https://github.com/amancevice…
另外 Superset 也反对 LDAP 或者 OpenID 登录,配置文件
https://github.com/apache/sup…
步骤 2 配置新冠数据实时数据源
本试验中的数据来源于约翰霍普金斯大学的实时更新的凋谢数据集。此 S3 存储桶在海内账户,如果海内账号能够参照博客,但如果国内区域的话须要同步到国内的 S3 桶中应用。
2.1 同步海内 S3 的数据源到宁夏 S3
Option 1: 能够应用同步工具设置源桶和指标桶来同步数据
https://github.com/aws-sample…
须要同步的 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/z…
2.3 原始数据存在一些反复值和须要丰盛的局部,能够应用 Amazon Athena 创立 view 来简略解决。如果想要把解决的后果长久化还是举荐应用 Amazon Glue 来做定时的 ETL。创立语句如下:
CREATE OR REPLACE VIEW "daily_region_stats" AS
SELECT 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 recovered
FROM "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
(src
LEFT 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/d…
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 业余服务教训,历任程序开发,软件架构师、解决方案架构师。