在AWS EC2中部署和使用Apache Superset的方案

大纲

  • [1 Superset部署](#1 Superset部署)
    • [1.1 启动AWS EC2](#1.1 启动AWS EC2)
    • [1.2 下载Superset Docker文件](#1.2 下载Superset Docker文件)
    • [1.3 修改Dockerfile](#1.3 修改Dockerfile)
    • [1.4 配置管理员](#1.4 配置管理员)
    • [1.5 结果展示](#1.5 结果展示)
    • [1.6 检查数据库驱动](#1.6 检查数据库驱动)
    • [1.7 常见错误处理](#1.7 常见错误处理)
  • [2 Glue(可选参考)](#2 Glue(可选参考))
  • [3 IAM与安全组](#3 IAM与安全组)
    • [3.1 使用AWS Athena](#3.1 使用AWS Athena)
    • [3.2 使用AWS RedShift或AWS RDS](#3.2 使用AWS RedShift或AWS RDS)
      • [3.2.1 查看AWS Redshift集群VPC安全组](#3.2.1 查看AWS Redshift集群VPC安全组)
      • [3.2.2 设置Superset所在AWS EC2实例的安全组](#3.2.2 设置Superset所在AWS EC2实例的安全组)
      • [3.2.3 添加入站规则](#3.2.3 添加入站规则)
  • [4 Superset配置数据源并创建Dashboard](#4 Superset配置数据源并创建Dashboard)
    • [4.1 连接AWS Athena](#4.1 连接AWS Athena)
    • [4.2 连接AWS Redshift](#4.2 连接AWS Redshift)
  • [5 Superset教程](#5 Superset教程)

本文将讲解如何在AWS EC2中部署Apache Superset,并通过AWS Glue连接AWS S3、AWS RDS、AWS RedShift中的数据,进行可视化展现。

1 Superset部署

1.1 启动AWS EC2

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

powershell 复制代码
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文件

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

1.3 修改Dockerfile

powershell 复制代码
cd incubator-superset
vi Dockerfile

在末尾添加

powershell 复制代码
RUN pip install PyAthenaJDBC \    #这个是athena连接
        && pip install PyAthena \ #这个是athena连接
        && pip install psycopg2 \
        && pip install sqlalchemy-redshift # 这个是redshift连接

构建

powershell 复制代码
docker-compose build
docker-compose up

1.4 配置管理员

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

powershell 复制代码
#进入docker
docker-compose exec superset bash
superset init

1.5 结果展示

配置成功后,Superset默认使用8088端口,使用http://<EC2 公有IP>:8088访问,默认用户名和密码均为admin 可在Dockerfile、docker中命令、管理页面更改。

1.6 检查数据库驱动

查看数据库驱动是否安装成功。

若没有

powershell 复制代码
#进入docker
docker-compose exec superset bash
#安装  athena 和redshift驱动
pip install PyAthenaJDBC \
        && pip install PyAthena \
        && pip install psycopg2 \
        && pip install sqlalchemy-redshift

1.7 常见错误处理

build中如果出现error

powershell 复制代码
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

原因:

  1. docker 没有启动
powershell 复制代码
sudo systemctl start docker
  1. 用户不再docker用户组里面
powershell 复制代码
sudo gpasswd -a ${USER} docker

如果是第二个,请退出shell 再次登陆

2 Glue(可选参考)

3 IAM与安全组

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

3.1 使用AWS Athena

如果在 Amazon Athena中运行查询时,出现 "Access Denied"(拒绝访问)错误。

powershell 复制代码
Your query has the following errors:Access denied when writing output to url: s3://my-athena-result-bucket/Unsaved/2021/05/07/example_query_ID.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key

向 IAM 用户授予所需的权限。以下 IAM 策略允许源数据存储桶和查询结果存储桶的最低权限:

xml 复制代码
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::【数据源的s3名称】"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::【数据源的s3名称】/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:PutObject",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::【存储Athena查询结果的s3名称】",
                "arn:aws:s3:::【存储Athena查询结果的s3名称】/*"
            ]
        }
    ]
}

请务必在此示例策略中替换【】中的内容。

3.2 使用AWS RedShift或AWS RDS

此处以AWS RedShift集群为例。

3.2.1 查看AWS Redshift集群VPC安全组

3.2.2 设置Superset所在AWS EC2实例的安全组


3.2.3 添加入站规则


4 Superset配置数据源并创建Dashboard

此处提供了AWS Athena与AWS RedShift的连接教程,其他JDBC语法请看官方文档。

4.1 连接AWS Athena

powershell 复制代码
awsathena+rest://@athena.{region}.amazonaws.com.cn/<Glue数据库表>?s3_staging_dir=<用来存储查询结果的S3地址>

测试连接

4.2 连接AWS Redshift

powershell 复制代码
redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:<port>/<Database Name>

创建连接


5 Superset教程

  1. 简单教学
  2. superset官方文档
相关推荐
翼龙云_cloud8 小时前
阿里云渠道商:如何手动一键扩缩容ECS实例?
运维·服务器·阿里云·云计算
AKAMAI10 小时前
基准测试:Akamai云上的NVIDIA RTX Pro 6000 Blackwell
人工智能·云计算·测试
China_Yanhy14 小时前
AWS EKS三种类别,如何选择
云计算·aws
xybDIY14 小时前
亚马逊云 Organizations 组织 Link 账号关联与解绑自动化解决方案
运维·自动化·云计算·aws
倪某某15 小时前
阿里云无影GPU部署WAN2.2模型
阿里云·云计算
倪某某15 小时前
阿里云ECS GPU部署WAN2.2
人工智能·阿里云·云计算
SeaTunnel16 小时前
Apache SeaTunnel 2025 案例精选重磅发布!
大数据·开源·apache·seatunnel·案例
小白考证进阶中18 小时前
阿里云ACA认证常见问题答疑
阿里云·大模型·云计算·阿里云aca证书·阿里云aca·aca认证·入门证书
可爱又迷人的反派角色“yang”18 小时前
k8s(四)
linux·网络·云原生·容器·kubernetes·云计算
可爱又迷人的反派角色“yang”19 小时前
k8s(二)
linux·运维·docker·云原生·容器·kubernetes·云计算