AWS EMR 搭建数据处理集群(一)
AWS介绍
AWS EMR 搭建数据处理集群-一-标题头官方:Amazon Web Services (AWS) 是一个安全的服务平台,提供计算能力、数据库存储、内容交付以及其他功能来帮助实现业务扩展和增长。
其实AWS就是一个云服务平台,很多之前线下本地服务器上构建的通用服务环境,都可以在云端找到对应的AWS服务,对中小企业快速构建服务提供支撑;
AWS-EMR服务介绍
AWS的EMR服务为云端托管的集群平台,个人/企业构建的大数据集群可以由该平台进行管理,集群服务可以通过配置选择目标服务,也可以通过自定义引导方式安装其他服务,构建集群过程和使用过程非常方便,较早在做大数据项目时是使用移动机房N台物理服务器进行的集群构建,采用AMBARI+HDP的方式进行日常管理,包括操作,监控,告警等,每次安装第三方服务时也是非常麻烦,还有重启amb server,数据量较低,长期费用运行的情况下还是使用云端服务较为方便;
在引用一段官方描述:
Amazon EMR 是一个托管集群平台,可简化在 AWS 上运行大数据框架 (如 Apache Hadoop 和 Apache Spark ) 以处理和分析海量数据的操作。借助这些框架和相关的开源项目 (如 Apache Hive 和 Apache Pig)。您可以处理用于分析目的的数据和商业智能工作负载。此外,您可以使用 Amazon EMR 转换大量数据和将大量数据移入和移出其他 AWS 数据存储和数据库,如 Amazon Simple Storage Service (Amazon S3) 和 Amazon DynamoDB。
文档目标
这里通过在EMR-HADOOP集群上处理一个CSV文本文件,对集群操作进行宏观了解;
操作大致分为如下几层:
- 前期准备工作
- 集群构建的配置工作
- 集群启动与监控
前期准备工作
干活脚本
HIVE外部表参考如下:
#region table
CREATE EXTERNAL TABLE IF NOT EXISTS RPT_REGION(
REGION_ID STRING,
REGION_NAME STRING,
REGION_TYPE INT,
COUNTY_ID STRING,
CITY_ID STRING,
REGION_DESC STRING,
CREATE_TIME STRING
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE
LOCATION '${INPUT}/data/region';
#region_event table
CREATE EXTERNAL TABLE IF NOT EXISTS RPT_REGION_EVNET(
REIGON_ID STRING
RULE_ID STRING,
RULE_NAME STRING,
REGION_TYPE INT,
ACTIVE_TYPE INT,
ENABLE INT,
STAY_TIME STRING,
STORE_TYPE STRING,
CREATE_TIME STRING
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE
LOCATION '${INPUT}/data/region_event';
数据处理逻辑参考如下:
INSERT OVERWRITE DIRECTORY '${OUTPUT}/' ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT a.REGION_ID,
a.REGION_NAME,
COUNT(b.RULE_ID) count
FROM
RPT_REGION a, RPT_REGION_EVENT b
WHERE
a.REGION_ID = b.REGION_ID
GROUP BY
a.REGION_ID,
a.REGION_NAME;
以上部分可以写在一个脚本内region-hive.sql
输入数据
集群通过与S3进行交互读取原始csv文件信息,事件规则数据如下:
区域信息数据文件: region.csv
10000001,TESTREG01,5,city001,county001,20180518123400
10000002,TESTREG02,7,city001,county001,20180518123400
10000003,TESTREG01,5,city001,county002,20180518123400
10000004,TESTREG02,7,city001,county003,20180518123400
区域事件信息数据文件: region_event.csv
10000001,88000001,1,0,1,300,local_kafka,20180518123400
10000001,88000002,1,1,1,300,local_kafka,20180518123400
10000001,88000003,1,0,1,300,local_kafka,20180518123400
10000002,88000001,1,1,1,400,local_kafka,20180518123400
10000002,88000002,1,0,1,400,local_kafka,20180518123400
10000003,88000001,1,1,1,300,local_kafka,20180518123400
10000004,88000001,1,1,1,600,local_kafka,20180518123400
10000004,88000002,1,0,1,600,local_kafka,20180518123400
10000004,88000003,1,0,1,600,local_kafka,20180518123400
10000004,88000004,1,0,1,600,local_kafka,20180518123400
输出数据
通过汇总计算,统计出10000001区域下定义的事件数量,并对计算结果进行存储
(以上统计结果输出到S3存储单元内,文件进行保存)
S3资源设置
存储桶
在S3上创建存储桶,创建存储桶时注意选择与集群创建选择同一地理区域,测试过程全程使用宁夏区域,下图可以看到我创建了一个region_emr_test的存储桶(S3的实践在做单独的博文,这里使用默认的权限等参数即可)
输入输出
在region-emr-test存储桶内创建3个目录,分别为script/datainput/dataoutput/log
进入datainput目录,创建如下子目录:
datainput/data/rpt_region -> 区域数据目录
datainput/data/rpt_region_event -> 区域事件数据目录
数据上传
将准备好的文件上传至对应的目录:
region-hive.sql 上传至 region-emr-test/script目录
region.csv 上传至 region-emr-test/datainput/data/rpt_region目录
region_event.csv 上传至 region-emr-test/datainput/data/rpt_region_event目录
登录秘钥
创建ssh秘钥对,方便后续登录集群节点;
选择目标区域,这里选用了宁夏区的相关服务,EC2->网络与安全->秘钥对,点击‘创建秘钥对’
AWS-EMR-1-登录秘钥
成功创建秘钥对后,会下载一个emr-scr-ssh.pem.text的秘钥文件,要保存好,后续再AWS CLI登录的时候会携带使用作为认证依据;
通过HIVE服务对该样本数据进行处理,然后将结果数据通过EMRFS写入AWS的S3对象存储单元进行保存;
集群构建的配置工作
目标
通过使用EMR配置模板规划出我们预使用的集群服务所具备的资源与数据处理流;服务人口参考如下,里面有之前使用的临时集群;
AWS-EMR-1-配置工作
集群配置 - 步骤模式配置
基础设置
- 设置S3日志的输出目录,方便后续观察日志,这里选择目录可以直接选择S3上面已经创建的s3://region-emr-test/log/
- 启动模式选择步骤执行,可以定制数据处理步骤;
-
步骤类型选择-> Hive程序,表示为该集群添加HIVE处理步骤,这里也是数据的处理流程;
通过以上设置后如图所示:
AWS-EMR-1-基础设置
HIVE详细配置
HIVE的详细配置主要涉及输入,输出,逻辑脚本文件
- 脚本S3位置 -> s3://region-emr-test/script/region-hive.sh
- 输入S3位置 -> s3://region-emr-test/datainput/
- 输出S3位置 -> s3://region-emr-test/dataoutput/
自变量,主要是针对HIVE逻辑执行过程中相关变量的设置,如打开分区模型,修改锁机制,调整相关限制等等;
出现故障时这里选择继续 - 具体问题可以通过日志进行查看;
AWS-EMR-1-详细配置
软硬件配置
- 软硬件配置直接使用最新发行版本即可,每个EMR发行版本对应的hadoop套装组件版本各不相同;
-
硬件配置使用也同样使用默认,m4.large在宁夏区域性价比很高,实例数量这里采用1个主管理节点,2个核心节点,共3个;
AWS-EMR-1-软硬件配置
访问安全配置
这里目前采用默认配置即可,定制化配置需要结合实际使用才有意义,后续再开文聊;
通过以上配置,就完成了步骤模式的集群配置模板创建工作,点击‘创建集群’,EMR即可通过该配置实例进行集群的相关初始化操作;
AWS-EMR-1-集群初始化
待执行的步骤
AWS-EMR-1-集群步骤
集群配置 - 集群模式配置(停止保护)
待补充
网络VPC配置
待补充
结果观察
异常类日志查看
通过任务步骤的日志文件选项观察stderr/stdout相关日志
处理后的步骤状态会转换为已完成
AWS-EMR-1-步骤完成
(期间出现了脚本问题,集群会终止,这种情况下可以修正脚本问题并同步脚本至S3,并克隆一个新的集群进行数据处理)
处理结束后可以看到S3的输出目录上面出现了结果文件,点击文件,并在属性中点击‘选择范围’
可以预览结果文件
AWS-EMR-1-结果检查