赞
踩
ETL(Extract-Transform-Load)是将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程,ETL较常用的数据仓库,从数据源抽取出来所需要的原始数据,经过数据清洗,最终将清洗后的数据加载到数据仓库中去。
数据抽取是从数据源抽取需要的原始数据,抽取的方式多种多样,要根据数据源的特点来确定,通常有如下几种数据抽取的方式:
1、从关系数据抽取数据
通过OLTP系统采用关系数据库存储业务操作数据,从关系数据库抽取操作型数据是最多一种数据抽取方式。
数据从关系数据库抽取后通常会先以文件存储到分布式文件系统中(例如HDFS),方便ETL程序读取原始数据。也有的是将抽取后的数据直接存储到数据仓库中,采用第二种方法需要提前在数据仓库创建与原始数据相同结构的数据仓库模型。
2、从日志文件抽取
OLTP系统通过日志系统将日志的操作日志、系统日志等存储在OLTP服务器上,由专门的采集程序从服务器上采集日志文件信息。
3、从数据流接口抽取
OLTP系统提供对外输出数据的接口(比如telnet),采用系统与该接口对接,从数据流接口抽取需要的数据。
数据转换也叫数据清洗转换,是将采集过来的原始数据(通过原始数据存在一定的脏数据)请洗(过滤)掉不符合要求的脏数据,根据数据仓库的要求进行转换,经过数据清洗转换后是符合数据仓库要求的数据。
要清洗的脏数据的形式有:
1、错误的数据
存在数据内容错误的信息,比如学生选课信息中课程标识错误或选课日志非法等。
2、不完整的数据
是指信息不完整,比如学生选课信息中缺少学生或者缺少课程的信息,这类信息是不符合学生选课数据模型的要求的。
3、重复数据
第三类数据是要根据具体的业务进行单独去重新操作,比如:同一个课程学习会话中只允许有一条学生学生记录,这里就要根据会话ID对数据进行去重操作。
数据转换的形式有:
1、数据格式转换
对数据的格式进行转换,通常转换后数据内容是不变的,比如:数据仓库要求的日期格式是yyyymmdd,而采集过来的数据格式是yyyy-mm-dd,这里需要将yyyy-mm-dd的格式转换为yyyymmdd。
2、数据内容转换
对数据内容进行转换,通常数据内容转换后是不会改变原始数据内容的意义的,比如:数据仓库要求存储用户所在区域,这里就需要根据采集过来的用户IP地址从ip库中查找出用户的ip地址所对应的区域信息,这里根据IP地址换换为区域就是数据内容并的转换。
数据加载就是清洗转换后的数据存储到数据仓库中,数据加载的方式包括:全量加载、增量加载。
全量加载:
全量架子啊相当于覆盖架子啊的方式,每个架子都会覆盖原始数据将数据全部加载到数据仓库,此类加载方式通常用于维度数据。
增量加载:
增量加载按照一定的计划(通常是时间计划)逐步的一批一批的将数据加载到数据仓库,此类加载方式通常用于OLAP的业务操作数据。
我们常用的ETL工具有Sqoop、Kettle、Nifi。
1.5.1.1 Kettle
kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取与传输高效稳定,纯java编写,无需安装。
官网地址:https://community.hitachivantara.com/docs/DOC-1009855
优点:
a、最大的优点是开源免费。
b、部署简单
c、转换过程比较灵活,可以是手工编写的SQL语句、Java代码、正则表达式等。
d、kettle支持广泛的数据库、数据文件等,同时支持扩展。
缺点
a、由于是基于JVM的,所以当处理大数据量的时候瓶颈问题比较突出。
b、客户端和服务端在一起,耦合性太强导致其跨平台能力较差。
c、监控日志粒度比较粗、问题比较难追踪。
Apache NiFi是一个易于使用,功能强大且可靠的系统,用于处理和分发数据。可以自动化管理系统间的数据流。它使用高度可配置的指示图来管理数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。NiFi原来是NSA的一个项目,目前已经代码开源,是Apache基金会的顶级项目之一。
NiFi是基于Java的,使用Maven支持包的构建管理。NiFi基于web方式工作,后台在服务器上进行调度。用户可以将数据处理定义为一个流程,然后进行处理,Nifi后台具有数据处理引擎、任务调度等组件。
简单的说,Nifi就是为了解决不同系统间数据自动流通问题而建立的。
优点
A、可视化的UI界面,各个模块组件之间高度可配置,且每个流程都有监控,可以通过界面直观的看到各个数据处理模块之间的数据流转情况,分析出程序性能瓶颈。
B、数据流可以在UI界面自由拖拽和扩展,各模块之间相互独立,互不影响。
C、可以在处理耗时时的地方创建多个处理模块并行执行,提升处理速度。类似于代码中加入了多线程,但是对于修改代码,界面配置操作十分简单。
D、修改方便,任意模块都可以在处理流转过程中随时启停,处理任务模块都可以实现热插拔。数据流向随时可变。
E、Nifi的对处理模块有对应的retry机制和错误分发机制,且可配置性强。
缺点
各个步骤中间结果落地导致磁盘io称为NIFI的瓶颈,这个缺点在数据冗余量越大的时候表现的越明显。
Sqoop是Apache下的顶级项目,用来将Hadoop和关系型数据库中的数据相互转移,可以将一个关系型数据库(例如:Mysql、Oracle、PostgreSQL等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中,目前在各个公司应用广泛,且发展前景比较乐观。其特点在于:
知行教育大数据平台,ETL的数据量较大,但是数据来源的类型简单(mysql),由此:
Sqoop详细资料见 《Home\讲义\第2章 数据仓库与工具\sqoop\sqoop教程.docx》。
2.1进入HDFS管理界面
create database if not exists 'test'
with dbproperties('creator'='itcast','create_date'='2020-05-05')
create table test.test.table(
id int,
name string comment '姓名'
)
comment '测试表'
row format delimited fields terminated by '\t';
insert into test.test_table values (1, '张三');
select * from test.test_table;
大数据常用的调度工具有:Oozie和Azkaban。
基于以上对比,本采用ClouderaManager和Hue所支持的Oozie来进行调度。
org.apache.oozie.action.ActionExecutorException: JA009: Invalid resource request! Cannot allocate containers as requested resource is greater than maximum allowed allocation. Requested resource type=[memory-mb], Requested resource=<memory:2048, vCores:1>, maximum allowed allocation=<memory:1024, vCores:4>, please note that maximum allowed allocation is calculated by scheduler based on maximum resource of registered NodeManagers, which might be less than configured maximum allocation=<memory:1024, vCores:4>
这是内存分配过小导致的错误,需要设置内存并重启Yarn
<property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>526</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4086</value> </property> <property> <name>yarn.scheduler.minimum-allocation-vcores</name> <value>1</value> </property> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>2</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>4.1</value> </property>
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。