AWS EMR 搭建数据处理集群

最近boss让去研究aws,未来公司业务可能要通过aws的一套生态进行数据处理和分析,在网上看了不少资料和文档,也顺利运行了aws的大数据集群组件,下面自己总结了一下在部署步骤以及自己所遇到的一些问题。

AWS介绍

官方:Amazon Web Services (AWS) 是一个安全的服务平台,提供计算能力、数据库存储、内容交付以及其他功能来帮助实现业务扩展和增长。

其实AWS就是一个云服务平台,很多之前线下本地服务器上构建的通用服务环境,都可以在云端找到对应的AWS服务,对中小企业快速构建服务提供支撑;

AWS-EMR服务介绍

AWS的EMR服务为云端托管的集群平台,个人/企业构建的大数据集群可以由该平台进行管理,集群服务可以通过配置选择目标服务,也可以通过自定义引导方式安装其他服务,构建集群过程和使用过程非常方便,较早在做大数据项目时是使用移动机房N台物理服务器进行的集群构建,采用AMBARI+HDP的方式进行日常管理,包括操作,监控,告警等,每次安装第三方服务时也是非常麻烦,还有重启amb server,数据量较低,长期费用运行的情况下还是使用云端服务较为方便;

在引用一段官方描述:

Amazon EMR 是一个托管集群平台,可简化在 AWS 上运行大数据框架 (如 Apache HadoopApache 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->网络与安全->秘钥对,点击‘创建秘钥对’

成功创建秘钥对后,会下载一个emr-scr-ssh.pem.text的秘钥文件,要保存好,后续再AWS CLI登录的时候会携带使用作为认证依据;

通过HIVE服务对该样本数据进行处理,然后将结果数据通过EMRFS写入AWS的S3对象存储单元进行保存;

集群构建的配置工作

目标

通过使用EMR配置模板规划出我们预使用的集群服务所具备的资源与数据处理流;服务人口参考如下,里面有之前使用的临时集群;

集群配置 - 步骤模式配置

基础设置

  1. 设置S3日志的输出目录,方便后续观察日志,这里选择目录可以直接选择S3上面已经创建的s3://region-emr-test/log/
  2. 启动模式选择步骤执行,可以定制数据处理步骤;
  3. 步骤类型选择-> Hive程序,表示为该集群添加HIVE处理步骤,这里也是数据的处理流程;
    通过以上设置后如图所示:

HIVE详细配置
HIVE的详细配置主要涉及输入,输出,逻辑脚本文件

  1. 脚本S3位置 -> s3://region-emr-test/script/region-hive.sh
  2. 输入S3位置 -> s3://region-emr-test/datainput/
  3. 输出S3位置 -> s3://region-emr-test/dataoutput/
    自变量,主要是针对HIVE逻辑执行过程中相关变量的设置,如打开分区模型,修改锁机制,调整相关限制等等;
    出现故障时这里选择继续 - 具体问题可以通过日志进行查看;

软硬件配置

  1. 软硬件配置直接使用最新发行版本即可,每个EMR发行版本对应的hadoop套装组件版本各不相同;
  2. 硬件配置使用也同样使用默认,m4.large在宁夏区域性价比很高,实例数量这里采用1个主管理节点,2个核心节点,共3个;

访问安全配置
这里目前采用默认配置即可,定制化配置需要结合实际使用才有意义;

通过以上配置,就完成了步骤模式的集群配置模板创建工作,点击‘创建集群’,EMR即可通过该配置实例进行集群的相关初始化操作;

待执行的步骤

集群配置 - 集群模式配置(停止保护)

可以查看官方文档

网络VPC配置

可以查看官方文档

结果观察

异常类日志查看
通过任务步骤的日志文件选项观察stderr/stdout相关日志

处理后的步骤状态会转换为已完成

(期间出现了脚本问题,集群会终止,这种情况下可以修正脚本问题并同步脚本至S3,并克隆一个新的集群进行数据处理)
处理结束后可以看到S3的输出目录上面出现了结果文件,点击文件,并在属性中点击‘选择范围’
可以预览结果文件

在这过程中,自己也遇到了不少坑:

1、在aws上把集群配置好之后,通过远程桌面连接,一定记得要自己提前配置好自己的aws的安全组策略,不然用ssh无法连接到集群。

2、自己创建的aws keypair秘钥一定记得下载下来,导入到远程连接工具,不然也是连接不上emr集群

3、本地使用aws cli连接emr时需要将自己安全账户的accessKey和accessSecret下载下来,通过aws configurem命令配置好

4、这里记得用完立马释放资源,不然使用aws免费套餐的时候会收取额外费用,因为自己第二天查看billing的时候,白白多了10多没到,用完忘了释放资源了,悲催

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章