为了让数据挖掘和数据查问可能更加普世化,惠及更多的想应用数据的但不足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 业余服务教训,历任程序开发,软件架构师、解决方案架构师。