在数据仓库中肯定是要实施数据生命周期管理的,因为我们在实际使用中发现对于数据仓库中的数据访问存在典型的二八原则,即通常80%的访问集中在20%的数据上,这个结论是我们抽查了几个省的数据仓库后确认的,甚至有的省由于数据仓库设计的不一样(比如日表、月表)等显现得更加明显。基于这样的情况,为了让数据仓库运行得更加高效,同时能低成本的存储长期的数据,约一半以上的省公司数据仓库实现了按照数据生命周期的分库。
但是当我们将目光转向Hadoop的时候,发现同样的问题依然存在。我们希望让Hadoop来承载海量结构化数据和非结构化数据的存储,以及部分的数据加工,也许以后还会通过HIVE或者PIG的方式承载一些高端的即席查询任务。这种混合而不是单一的任务注定了也需要实施生命周期管理,因为数据加工通常是对近段时间的数据进行,而数据存储和数据查询则需要对历史数据进行。
根据访问频次和响应时间以及吞吐率的需求不同,我们可以通过几种方式来进行数据生命周期管理。
一、在一个Hadoop系统中,通过不同的压缩率、块大小和副本数量来控制。对于归档的数据,可以使用较高的压缩率,较大的块和较少的副本来保存。因为较高的压缩率需要较长的解压时间、较大的块可以节约NameNode的空间,较少的副本(但仍需要保证数据安全)虽然会减少Map任务的本地调度几率,但是由于频率较少所以影响不大。
二、组成两个HDFS系统。一个是专门为高性能计算设计的,有较多的高性能磁盘(SAS盘)、CPU和内存,系统存储容量不用太大。另外一个专门为历史数据存储和查询设计,用较多的高容量磁盘(SATA盘)、较少比例的CPU和内存。两个系统中的数据对象通过一个第三方组件来进行透明的管理,两个系统中的数据通过Hadoop中一个专门用来在两个HDFS中导数据的组件,通过MapReduce来进行高效的数据同步。在数据处理方面,两个系统可以配置在一套JobTrack上,也可以仅让第二套系统承担HDFS的任务,所有的MapReduce任务都放在第一套高性能系统上去实现,让它再去访问第二套系统的HDFS。
个人感觉两个也许可以混合起来用,当然这加大了系统的复杂度,需要同步加强管控。