如何结合Redshift、AWS Data Pipeline与Elastic MapReduce实现数据仓库?
三者协作流程与具体操作指南
你的思路完全正确——AWS Data Pipeline、EMR、Redshift的典型协作模式就是用Data Pipeline调度EMR完成ETL转换,再将处理后的数据加载到Redshift,下面是具体的操作步骤:
整体架构梳理
- 原始数据落地到S3(AWS生态中最常用的原始数据存储位置)
- Data Pipeline 触发EMR集群,运行MapReduce(或Hive/Spark)作业完成数据清洗、转换
- 转换后的数据写入S3的临时处理目录
- Data Pipeline 接着调度Redshift执行COPY命令,将S3中的处理后数据批量加载到目标表
具体操作步骤
1. 前置资源准备
- 在S3创建三个专用目录:
- 原始数据目录:
s3://your-bucket/raw-data/(存放待处理的原始数据) - ETL输出目录:
s3://your-bucket/processed-data/(存放转换后的数据) - 日志目录:
s3://your-bucket/logs/(存储EMR和Data Pipeline的运行日志)
- 原始数据目录:
- 在Redshift中创建目标数据表,示例SQL:
CREATE TABLE sales ( sale_id INT, product_name VARCHAR(100), sale_date DATE, amount DECIMAL(10,2) );
- 配置IAM权限:
- 给EMR集群角色添加S3读写权限、Redshift访问权限
- 给Data Pipeline角色添加EMR集群启停权限、S3访问权限、Redshift操作权限
- 给Redshift集群角色添加S3读权限(用于COPY命令拉取数据)
2. 编写ETL作业(以MapReduce/Hive为例)
方式1:MapReduce JAR作业
- 编写你的MapReduce业务逻辑(比如用Java实现数据清洗、格式转换),打包成JAR文件
- 将JAR上传到S3的作业目录,比如
s3://your-bucket/emr-jobs/sales-transform.jar
方式2:Hive脚本(更适合新手快速实现)
编写Hive转换脚本,完成原始数据的格式转换、字段清洗,示例如下:
-- 映射S3上的原始数据为外部表 CREATE EXTERNAL TABLE raw_sales ( sale_id STRING, product_name STRING, sale_date STRING, amount STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://your-bucket/raw-data/'; -- 转换数据并输出到S3处理目录 INSERT OVERWRITE DIRECTORY 's3://your-bucket/processed-data/' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' SELECT CAST(sale_id AS INT), product_name, CAST(sale_date AS DATE), CAST(amount AS DECIMAL(10,2)) FROM raw_sales;
将这个脚本上传到S3,比如 s3://your-bucket/emr-jobs/transform-sales.hql
3. 配置AWS Data Pipeline
登录AWS控制台进入Data Pipeline服务,新建管道:
- 基础配置:选择「Build using a template」,可以直接选「Run an EMR Job」模板,减少配置工作量
- 添加EMR执行活动:
- 配置EMR集群:选择实例类型(比如m5.xlarge)、实例数量,指定S3日志目录
- 指定作业内容:
- 如果是MapReduce JAR:填写JAR路径、主类名、运行参数
- 如果是Hive脚本:选择「Run Hive Script」类型,指定S3中的脚本路径
- 设置依赖规则:配置为「仅当原始数据目录有新数据时触发」或固定时间触发
- 添加Redshift加载活动:
- 选择「Copy Data to Redshift」活动类型
- 配置Redshift连接:填写集群端点、数据库名,建议用IAM角色认证替代明文密码
- 数据源选择S3的
processed-data目录,目标表填写Redshift中创建的sales表 - 设置依赖规则:配置为「仅当EMR作业成功完成后执行」
- 调度设置:根据需求选择触发方式——一次性执行(适合测试)、定时调度(比如每日凌晨)
4. 测试与验证
- 上传少量测试数据到S3的
raw-data目录 - 手动触发Data Pipeline,在控制台查看管道运行状态
- 登录EMR控制台,查看集群的作业日志,确认ETL转换完成
- 登录Redshift客户端,执行
SELECT * FROM sales;验证数据是否正确加载
内容的提问来源于stack exchange,提问作者Abi Manoharan
相关产品推荐
相关产品推荐

