企业级的大数据平台,Hadoop至今仍然占据重要的地位,而基于Hadoop去进行数据平台的架构设计,是非常关键且重要的一步,在实际工作当中,往往需要有经验的开发工程师或者架构师去完成。今天的大数据开发分享,我们就来讲讲,基于Hadoop的数仓设计。
数据仓库,是数据存储管理的重要一环,基于Hadoop的数据仓库工具Hive,提供类SQL语言,HiveQL去实现基本的查询。但是Hive并非唯一的选择,从实际业务出发,需要综合考量。
大数据背景下的数据仓库
在企业应用场景下,大数据规模是越来越大的,而且一旦涉及到需要启用Hadoop,那么所面临的数据是传统数仓无法稳固支撑的。
首先,传统数据仓库基于关系型数据库,横向扩展性较差,纵向扩展有限,无法满足快速增长的海量数据存储需求;
其次,传统数据仓库只能存储结构化数据,无法处理不同类型的数据,企业业务发展,数据源的格式越来越丰富。
并且,传统数据仓库建立在关系型数据仓库之上,计算和处理能力不足,当数据量达到TB级后基本无法获得好的性能。
大数据数仓体系结构
数据仓库体系结构通常分为四个层次:数据源、数据存储和管理、数据服务、数据应用。
数据源:是数据仓库的数据来源,含外部数据、现有业务系统和文档资料等;
数据集成:完成数据的抽取、清洗、转换和加载任务,数据源中的数据采用ETL(Extract-Transform-Load)工具以固定的周期加载到数据仓库中。
数据存储和管理:此层次主要涉及对数据的存储和管理,含数据仓库、数据集市、数据仓库检测、运行与维护工具和元数据管理等。
数据服务:为前端和应用提供数据服务,可直接从数据仓库中获取数据供前端应用使用,也可通过OLAP(OnLine Analytical Processing,联机分析处理)服务器为前端应用提供负责的数据服务。
数据应用:此层次直接面向用户,含数据查询工具、自由报表工具、数据分析工具、数据挖掘工具和各类应用系统。
基于Hadoop的数仓设计
①Hive
基于Hadoop的数据仓库,首先考虑的肯定是Hive,因为Hive本身就是建立在Hadoop之上的数据仓库
Hive在某种程度上可以看成是用户编程接口,本身并不存储和处理数据,依赖于HDFS存储数据,依赖MR处理数据。有类SQL语言HiveQL,不完全支持SQL标准,如不支持更新操作、索引和事务,其子查询和连接操作也存在很多限制。
Hive把HQL语句转换成MR任务后,采用批处理的方式对海量数据进行处理。数据仓库存储的是静态数据,很适合采用MR进行批处理。Hive还提供了一系列对数据进行提取、转换、加载的工具,可以存储、查询和分析存储在HDFS上的数据。
②Pig
Pig可作为Hive的替代工具,是一种数据流语言和运行环境,适合用于在Hadoop平台上查询半结构化数据集,用于与ETL过程的一部分,即将外部数据装载到Hadoop集群中,转换为用户需要的数据格式。
③Impala
Impala作为新一代开源大数据分析引擎,最初参照Dremel(由Google开发的交互式数据分析系统),支持实时计算,提供与Hive类似的功能,在性能上高出Hive3~30倍。
Impala采用与商用并行关系数据库类似的分布式查询引擎,可直接从HDFS、HBase中用SQL语句查询数据,不需把SQL语句转换成MR任务,降低延迟,可很好地满足实时查询需求。
但是Impala不能替换Hive,可提供一个统一的平台用于实时查询。Impala的运行依赖于Hive的元数据(Metastore)。Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口,可统一部署Hive和Impala等分析工具,同时支持批处理和实时查询。