关于分析:手把手教程|通过部署-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 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 业余服务教训,历任程序开发,软件架构师、解决方案架构师。