数据采集及预处理——大数据的关键技术之一
文章目录
前言
数据采集与预处理是大数据学习的重要部分;
本篇笔记是对《数据采集与预处理》这个标题的解析 ,
我将它分为三个词语进行了详细的理解;
因为是初学这门课程,
所以大部分理解是借鉴其他人的文章与理解。
一、 数据
在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。
数据是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等。
数据和信息是不可分离的,数据是信息的表达,信息是数据的内涵。
数据本身没有意义,数据只有对实体行为产生影响时才成为信息。
数据可以是连续的值,比如声音、图像,称为模拟数据。
也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0、1的形式表示。
二、 采集
数据采集目前常用的有三种方式,分别为:
1. 系统日志采集方法;
2. 网络数据采集方法(网络爬虫);
3. ETL(ETL工具:kettle);
1.系统日志采集
目前为止,运用较为广泛的有:
- Flume: 分布式日志收集系统,最初由Cloudera 开发,现是Apache的一个开源项目; Flume是一个高可靠的分布式采集、聚合和传输系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据,同时对数据进行简单处理,并写到诸如文本、HDFS这些接受方中。Flume的核心其实就是把数据从数据源收集过来,再将收集到的数据送到指定的目的地……
- Chukwa:开源分布式数据收集系统,是Hadoop 的组成部分,构建在HDFS 和 map/reduce 框架之上;
- Scrible:Scribe是facebook开源的 日志收集系统 ,在facebook内部已经得到大量的应用;
- Kafka:最早是LinkedIn的开发的消息系统,现是Apache的一个开源项目; ———————————————— 链接:参考来源
2.网络数据采集
a.概念
- 网络数据采集指通过网络爬虫或网站公开API的方式,从而获取大数据信息,该方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地文件,并以结构化的方式存储。它支持图片、音频、视频等文件或附件的采集。 (将非结构化的数据转换成结构化数据)
- 网络爬虫工具: ① python爬虫; ② 分布式网络爬虫工具(Nutch); ③ Java网络爬虫工具(Crawler4j、WebMagic、WebCollector); ④ 非Java网络爬虫工具(Scrapy);
b.爬虫的原理及工作流程
原理
所谓的网络爬虫,其实就是一种按照一定规则,自动的抓取web信息的程序或脚本。
网络爬虫可以自动采集所有其能够访问到的页面内容,为搜索引擎和大数据分析提供数据来源,一般有数据采集、数据处理、数据存储三部分功能。
网络爬虫是如何爬取数据的?
网页中除了用户浏览的文字信息外,还包含一些超链接信息,通过获取这些超链接URL,再辅以一定的算法,爬虫就能够得到数据了。
(URL:统一资源定位符,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎末处理它。)
工作流程
基本情况下,爬虫会首先获取一部分种子URL,将这些URL放入待抓取URL队列,从队列中取出待抓取URL,解析DNS(域名系统)得到主机ip,并将URL对应网页下载储存。最后将这些URL放入已抓取队列中,如此循环。
链接:参考来源
3.ETL
a. 概念
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。
ETL一词较常用在数据仓库,但其对象并不限于数据仓库。
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,
目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据, ETL是BI(商业智能)项目重要的一个环节。
ETL与ELT
ETL所描述的过程,一般常见的作法包含ETL或是ELT(Extract-Load-Transform),并且混合使用。
通常越大量的数据、复杂的转换逻辑、目的端为较强运算能力的数据库,越偏向使用ELT,以便运用目的端数据库的平行处理能力。
工具
ETL(orELT)的流程可以用任何的编程语言去开发完成,由于ETL是极为复杂的过程,而手写程序不易管理,有越来越多的企业采用工具协助ETL的开发,并运用其内置的metadata功能来存储来源与目的的对应(mapping)以及转换规则。
工具可以提供较强大的连接功能(connectivity)来连接来源端及目的端,开发人员不用去熟悉各种相异的平台及数据的结构,亦能进行开发。
数据仓库(DW)
决策支持系统(DSS)
在线分析处理(OLAP)
数据挖掘(DM)
商业智能(BI)
b.ETL实现的过程
① 数据的抽取(Extract)
这一部分需要在调研阶段做大量的工作,
首先要搞清楚数据是从几个业务系统中来?
各个业务系统的数据库服务器运行什么DBMS?
是否存在手工数据,手工数据量有多大?
是否存在非结构化的数据等等;
当收集完这些信息之后才可以进行数据抽取的设计。
- 对于与存放DW(数据仓库)的数据库系统相同的数据源处理方法
这一类数据源在设计上比较容易。
一般情况下,DBMS(SQLServer、Oracle)都会提供数据库链接功能,在DW数据库服务器和原业务系统之间建立直接的链接关系就可以写Select 语句直接访问。
- 对于与DW数据库系统不同的数据源的处理方法
对于这一类数据源,一般情况下也可以通过ODBC的方式建立数据库链接——如SQL Server和Oracle之间。
如果不能建立数据库链接,可以有两种方式完成,
一种是通过工具将源数据导出成.txt或者是.xls文件,然后再将这些源系统文件导入到ODS中。
另外一种方法是通过程序接口来完成。
(ODBS : 开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,
它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
)
- 对于文件类型数据源(.txt,.xls), 可以培训业务人员利用数据库工具将这些数据导入到指定的数据库,然后从指定的数据库中抽取。或者还可以借助工具实现。
- 增量更新的问题 对于数据量大的系统,必须考虑增量抽取。 一般情况下,业务系统会记录业务发生的时间,我们可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。 利用业务系统的时间戳,一般情况下,业务系统没有或者部分有时间戳。
② 数据的清洗转换(Cleaning、Transform)
一般情况下,数据仓库分为ODS、DW两部分。
通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行一些业务规则的计算和聚合。
(1)、 数据清洗
数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。
不符合要求的数据主要是有三大类:
- 不完整的数据、
- 错误的数据、
- 重复的数据
I. 不完整的数据:
这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。
II. 错误的数据:
这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,eg:数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。
这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。
III. 重复的数据:
对于这一类数据——特别是维表中会出现这种情况——将重复数据记录的所有字段导出来,让客户确认并整理。
数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。
对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。
数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。
(2)、 数据转换
数据转换的任务主要进行
- 不一致的数据转换、
- 数据粒度的转换,
- 以及一些商务规则的计算。
I. 不一致数据转换:
这个过程是一个整合的过程,将不同业务系统的相同类型的数据统一,
eg:同一个供应商在结算系统的编码是XX0001,而在CRM中编码是YY0001,这样在抽取过来之后统一转换成一个编码。
II. 数据粒度的转换:
业务系统一般存储非常明细的数据,而数据仓库中数据是用来分析的,不需要非常明细的数据。
一般情况下,会将业务系统数据按照数据仓库粒度进行聚合。
III. 商务规则的计算:
不同的企业有不同的业务规则、不同的数据指标,这些指标有的时候不是简单的加加减减就能完成,这个时候需要在ETL中将这些数据指标计算好了之后存储在数据仓库中,以供分析使用。
链接:参考来源
C. 数据采集方法
I. 触发器方式
触发器方式是普遍采取的一种增量抽取机制。
该方式是根据抽取要求,在要被抽取的源表上建立插入、修改、删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个增量日志表,
ETL的增量抽取则是从增量日志表中而不是直接在源表中抽取数据,同时增量日志表中抽取过的数据要及时被标记或删除。
为了简单起见,增量日志表一般不存储增量数据的所有字段信息,而只是存储源表名称、更新的关键字值和更新操作类型(KNSEN、UPDATE或DELETE),ETL增量抽取进程首先根据源表名称和更新的关键字值,从源表中提取对应的完整记录,再根据更新操作类型,对目标表进行相应的处理。
II. 时间戳方式
时间戳方式是指增量抽取时,抽取进程通过比较系统时间与抽取源表的时间戳字段的值来决定抽取哪些数据。
这种方式需要在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。
有的数据库(例如SQL SERVER)的时间戳支持自动更新,即表的其它字段的数据发生改变时,时间戳字段的值会被自动更新为记录改变的时刻。
在这种情况下,进行ETL实施时就只需要在源表加上时间戳字段就可以了。
对于不支持时间戳自动更新的数据库,这就要求业务系统在更新业务数据时,通过编程的方式手工更新时间戳字段。
使用时间戳方式可以正常捕获源表的插入和更新操作,但对于delete操作则无能为力,需要结合其它机制才能完成。
III. 全表删除插入方式
全表删除插入方式是指每次抽取前先删除目标表数据,抽取时全新加载数据。
该方式实际上将增量抽取等同于全量抽取。
对于数据量不大,全量抽取的时间代价小于执行增量抽取的算法和条件代价时,可以采用该方式。
IV. 全表比对方式
全表比对即在增量抽取时,ETL进程逐条比较源表和目标表的记录,将新增和修改的记录读取出来。
优化之后的全部比对方式是采用MD5校验码,需要事先为要抽取的表建立一个结构类似的MD5临时表,该临时表记录源表的主键值以及根据源表所有字段的数据计算出来的MD5校验码,每次进行数据抽取时,对源表和MD5临时表进行MD5校验码的比对,如有不同,进行UPDATE操作:如目标表没有存在该主键值,表示该记录还没有,则进行INSERT操作。然后,还需要对在源表中已不存在而目标表仍保留的主键值,执行DELETE操作。
V. 日志表方式
对于建立了业务系统的生产数据库,可以在数据库中创建业务日志表,当特定需要监控的业务数据发生变化时,由相应的业务系统程序模块来更新维护日志表内容。
增量抽取时,通过读日志表数据决定加载哪些数据及如何加载。日志表的维护需要由业务系统程序用代码来完成。
VI.系统日志分析方式
该方式通过分析数据库自身的日志来判断变化的数据。关系犁数据库系统都会将所有的DML操作存储在日志文件中,以实现数据库的备份和还原功能。ETL增晕抽取进程通过对数据库的日志进行分析,提取对相关源表在特定时间后发生的DML操作信息,就可以得知自上次抽取时刻以来该表的数据变化情况,从而指导增量抽取动作。有些数据库系统提供了访问日志的专用的程序包(例如ORACLE的LOGMINDER),使数据库日志的分析工作得到大大简化。
VII. Oracle数据库方式
1)ORACLE改变数据捕获(CHANGED DATA CAPTURE,CDC)方式:ORACLE CDC特性是在ORAELE 9I数据库中引入的。CDC能够帮助识别从上次抽取之后发生变化的数据。利用CDC,在对源表进行INSERT、UPCLATE或DELETE等操作的同时就可以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发生变化的数据,然后利用数据库视图以一种可控的方式提供给ETL抽取进程,作为增量抽取的依据。CDC方式对源表数据变化情况的捕获有两种方式:同步CDC和异步CDC。同步CDC使用源数据库触发器来捕获变更的数据,这种方式是实时的,没有任何延迟,当DML操作提交后,变更表中就产生了变更数据。异步CDC使用数据库重做日志(REDO LOG)文件,在源数据库发生变更以后,才进行数据捕获。
2)ORACLE闪回查询方式:ORACLE 9I以上版本的数据库系统提供了闪回查询机制,允许用户查询过去某个时刻的数据库状态。这样,抽取进程可以将源数据库的当前状态和上次抽取时刻的状态进行对比,快速得出源表数据记录的变化情况。
VIII. 由业务系统提供增量数据
有些应用场景,比如涉及政府相关行业的数据采集,可能某些数据库不允许外部主动采集,这时可能解决办法是由业务系统方直接提供增量数据。
VIIII. 可以通过flume等相关工具自动采集
某些数据源比较适合使用flume进行采集,比如业务系统访问日志。
相关资源:数据采集系统ETL工具_etl数据,数据采集etl-C#工具类资源-CSDN文库
链接:参考来源
三. 预处理
1.概念
通过数据预处理工作, 可以使残缺的数据完整 ,并将错误的数据纠正 、多余的数据去除,进而将所需的数据挑选出来,并且进行数据集成 。
数据预处理的常见方法:数据清洗、数据集成与数据变换。
2.常见方法
① . 数据清洗
数据清洗可以视为一个过程,包括检测偏差和纠正偏差两个步骤。
- 检查偏差:可以使用已有的关于数据性质的知识发现噪声、离群点和需要考察的不寻常的值。这种知识或“关于数据的数据”称为元数据。
- 纠正偏差:即一旦发现偏差,通常需要定义并使用一系列的变换来纠正它们。但这些工具只支持有限的变换,因此,常常可能需要为数据清洗过程的这一步编写定制的程序;
② . 数据挖掘
③ . 数据变换
链接:参考来源
总结
我们老师上这门课让我们用kettle这个工具进行数据的采集分析处理,这是一个我认为比excle处理表格数据要容易得多;
虽然刚开始学习这门课程,不过刚开始这门课程就让我感到了学习大数据的快乐、有趣。
版权归原作者 Lhyyy. 所有, 如有侵权,请联系我们删除。