在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官方文档
相关推荐
kongxx35 分钟前
AWS S3在客户端应用不能使用aws-sdk场景下的文件上传与下载
aws
kongxx37 分钟前
AWS S3 JavaScript SDK(v3)常用操作
aws
Elastic 中国社区官方博客41 分钟前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
九河云41 分钟前
如何选择适合的AWS EC2实例类型
服务器·云计算·aws
Aloudata2 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
Huaqiwill3 小时前
Ubuntun搭建并行计算环境
linux·云计算
为什么这亚子5 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
划水小将军5 小时前
阿里云函数计算GBK编码
阿里云·云计算
沈艺强6 小时前
云计算答案
云计算
Thanks_ks8 小时前
探索计算机互联网的奇妙世界:从基础到前沿的无尽之旅
物联网·云计算·区块链·tcp/ip协议·计算机互联网·万维网·未来科技