zourui4271

博客园 首页 新随笔 联系 订阅 管理

装载数据仓库过程中,不管作业是实时执行还是批处理方式执行,其调度时间,执行顺序和执行环境都是关键点。

本章描述创建一个ETL操作策略,来保证数据仓库的数据即时可用。

ETL执行策略分为两种:1 调度  2 支持(为了确保etl过程运行完成,数据仓库必须能够被监控活动情况,并且必须有人专门支持)

调度工具:任何企业数据仓库都必须拥有一个健壮的企业级ETL调度机制。主流的ETL供应商都提供其核心的ETL引擎提供打包的调度器

ETL调度器必须的功能:1 令牌识别(ETL如何知道外部源的数据文件已经达到并开始其处理过程?ETL系统必须能够识别文件已经在文件系统中存在,并自动开始执行,这个过程叫做令牌识别)令牌是一些由文件系统创建的文件,用来触发ETL事件,具有令牌识别功能的应用系统可以轮训一个目录(或数据库表),用来识别令牌文件(或记录行)的到达,当处理文本文件,WEB日志,或者外部数据源的时候,必须防止重复处理同一文件,还要确保当文件迟到的时候不会错失ETL过程执行,令牌文件被认为是一个令牌因为他不是必须要被处理的实际文件,他可以是一个索引文件,仅仅通过其到达来告诉处理过程开始执行。              

2 日内执行,etl必须拥有在一天中多次执行的能力,甚至随时执行,能跨午夜

3实时能力

4命令行执行

5通知和呼叫(开发完之后,其执行方法就变为自动操作,如果执行出现问题,那么必须以电子邮件的方式通知)

6嵌套批处理:etl作业一般都是以嵌套批处理方式执行,几乎很少会在生产环境中运行单独的ETL作业。数据集市通常需要每一个维表和事实表至少有一个作业,在装载数据仓库过程中,多层嵌套非常普遍。

7 参数管理,ETL系统在开发周期过程中在不同的环境间迁移,因此不能在环境迁移间修改代码。常用的参数项列表包括:服务器名字,数据库名字,结构描述文件名,数据库连接,元数据连接管理等。全局参数支持多个ETL作业,局部参数只在一个ETL做业内有效。

 

ETL调度器方案选择  1 集成的ETL工具 2 第三方调度器 3 操作系统 4实时执行 5客户化应用

 

装载依赖:依赖关系是ETL作业最重要的内容,如果一个子维表装载作业失败,可以继续装载这个维表,但是不能继续装载事实表。作业间依赖关系数据元数据。手工干预是纠正失败ETL装载成本的最高的方式,在ETL作业间强制依赖关系可以节约大部分这种成本。

元数据:调度器必须能够捕获元数据,包括内容和批处理,嵌套批处理的时间表,元数据必须像对数据仓库团队一样对业务用户可用。批处理元数据就像是数据仓库的火车运行表,它应该事先告知何时数据将到达,何时对用户可用。调度系统还应该在数据延迟时告诉用户。数据可用性元数据是交互的关键,同时也是影响用户期望的关键机制,用来通知用户数据到达的元数据属于过程元数据的类型。过程元数据捕获ETL过程中的操作统计,典型的数据包括装载成功的行数,拒绝行数,消耗时间,每妙处理行数,以及完成每行所用的时间。所有由批处理管理器控制的元数据都必须能够被捕获,存储和发布。元数据应该存储在开放的资料库中,从而可以与其他应用共享。元数据至少得有生成报告能力,因此用户可开发者可以深入了解细节。

 

数据集市发布文档包含下列内容:环境,服务器名字,ETL程序,数据库名字,文档文件名字,最后修改日期,修改类型,发布号,修改请求号,过程,项目代码,表/视图,安全,sql包,配置修改,etl作业,shell脚本,sql脚本,文本文件,编辑参数文件,附加注释,执行步骤

 

获得最优的ETL性能:随着数据仓库的扩展,etl方案一起成长,一个扩展的ETL方案意味着设计的过程能够在不需要重新设计的情况下处理更大量的数据。

估计装载时间:估计一个很长的初始化加载,就有必要将其ETL系统分成三个独立的过程,1 从源系统抽取数据,2 把数据转换成纬度模型,3 把数据装载到数据仓库。

估计抽取过程时间:从源系统抽取数据是ETL过程最耗时间的部分。OLTP系统并未设计成可以返回如此大的数据集。ETL抽取过程通常需要其他的方法,例如视图,光标,存储过程,和相关子查询,在抽取之前估计一下执行多久是很有必要的。但有很多不利因素:1  测试环境的硬件通常比生产环境要差很多 2 由于抽取历史数据的ETL作业可能持续几天,因此在完整数据集上执行测试是不可行的。 为了克服处理海量数据的困难,应该把抽取过程分成几个小的部分:1 执行响应时间(从查询开始执行到开始返回数据为止的时间)2 数据集获取时间(第一条返回的记录到最后一条返回的记录之间的时间),由于初始化收取装载数据量都是很大的,因此建议取一部分数据进行估计。大多情况下,装载中的事实表被分区,我们建议把整个事实表的一个样本分区获得足够的数据来生成它。一旦知道了抽取一个分区的时间,则乘以事实表分区数目就可以估算整个的时间。3 计算查询响应时间:可以用查询监控工具来吧两个过程分隔开,如果使用ETL工具,记住涉及的数据表应该在主抽取过程开始前将其装载到内存中。4 计算数据获取时间,一旦抽取查询开始返回数据,则开始记录。

估计转换时间:转换一般在内存中以惊人的速度完成,最好是利用ETL工具而不是数据库存储过程来完成转换过程。大多数ETL是在IO上耗时,总时间减去抽取和装载的时间就是转换所用的时间。

估计装载过程时间:为了估计正确,最好是把转换的数据放到文本文件。一次装载一个样本集数据,然后乘以样本集总数。

 长时间运行ETL过程的不足

水平ETL系统流和垂直ETL系统流:水平方式组织中,特定的抽取,清洗,规范话,提交作业从头开始运行直到完成,与其他的主要的数据流没有依赖或者很少的关系。这央一个ETL作业可以完成运行,另一个可能失败。在垂直ETL系统组织中,多个ETL作业关联到一起,每个作业中的并行步骤各自完成运行,但要等待其他作业以达到同一执行点。如上面例子,客户订单和库存系统跟踪都需要完成之后才能清洗,规范化和提交。

垂直和水平依赖因素:需要多个ETL作业并行处理的详细的数据依赖关系(库存作业失败也许是因为客户订单作业没有定义好产品编码);最终用户修改部分数据的必要性(订单已经修改但是运输却要延迟)。

 

分析失败类型:网络失败(减少这一风险的预防措施是把ETL引擎和目标数据仓库数据库放在一个服务器,但是会导致查询之间的资源争夺家具),数据库失败(宕机或者是ELT过程的某个表被锁住了,或者临时表空间不足了),磁盘失败(三个磁盘组失败,源系统磁盘,集结区,数据仓库存储----失败),内存失败,数据空间(数据应该和索引分开存储),索引空间(当装载历史数据的时候,装载之前一定把目标表的索引删除掉,并在装载完成之后重建索引,通过删除和重建索引,不近能够提高性能,还可以将索引空间不足的情况与装载失败隔离开来,一旦完成表的装载,总是可以为索引分配更多的空间,并在不影响数据表的情况下重建索引),数据质量失败,末公告的系统升级。恢复问题:过程中间失败了,最好的办法是清除数据并从头开始处理,可以把处理过程分为若干个子过程来使得恢复工作变得简单有效,这样就可以不用重头开始处理整个历史数据装载,而只是处理数据的某个子集就可以了。最小化装载失败风险:分隔过程,利用恢复点(为了安全,每个主要的中间处理之后 将数据写入文),并行装载,维护元数据 。清除历史数据; 监控ETL系统;度量ETL特定性能指标:耗时(秒),每秒处理记录,每秒读取的记录数,每秒写入的记录数,吞吐量(吞吐量指每秒处理的记录数目乘以每条记录的字节数)

在一个处理流程中,当一个处理部件的吞吐量不能处理前一个部件的输出时,就会产生瓶颈。例如,一个批装载可以按每秒1000 条记录的速度向磁盘写数据,而磁盘只能写入每秒800 条记录,因此在磁盘这个部件上就发生了吞吐量瓶颈。结果是,整个处理过程只能以最慢的部件的速度来处理。

度量基础性能指标:CPU利用率,内存分析(为了实现好的效率,每一个ETL过程必须分析适当的内存,ETL内存设置包括:共享内存,缓存块大小),服务冲突

当程序需要比物理可用内存更多的内存时,操作系统(或应用系统)把不能放到内存的数据写到磁盘。由于需要处理大量的数据,程序必须能够读写磁盘而不是使用RAM。虚拟内存通常是指页面交换,因为内存是按页面存储的,当需要更多的页面时,就会在磁盘和RAM 间交换。页面交换是性能杀手,应该在ETL 过程中尽量避免。如果检测到连续不断的页面交换,就应该为ETL 服务器和ETL 过程添加更多的RAM 了。

 

并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。

服务器争夺:当ETL过程并发而不是并行运行的时候,ETL系统最容易发生服务争夺。

 

度量数据仓库利用率来帮助管理ETL过程

ETL团队应该充分利用数据仓库使用报告,从中寻找重新安排装载调度,修改装载频率,清除装载睡眠表的维护作业等机会。1 表利用率:数据列表,第一次和最近访问数据表的时间,和该数据表相关的查询数,以及查询该表的不同的用户数  2 索引利用率:很多索引列没有约束关系,索引也从未被使用。索引利用率报告能发现那些睡眠索引。   3  聚合表利用率:删除那些不怎么用的。 4 睡眠数据

 

ETL过程调优:

比如:很多设计决策是基于开发的进程所迁移的数据量。例如,如果有一个非常小且数据稳定的维表,则使用update 语句增量更新维表现有数据是可行的。但是如果维表有2000 万行记录之大,且数据变化频繁,则删除并批量装载该表也许更有效一些。

插入更新删除,日志的作用,索引的作用,约束关系和外建

posted on 2016-01-22 16:46  zourui4271  阅读(767)  评论(0编辑  收藏  举报