基于TDH+Hiveす菇ù笫据离线计算平台的方法和实现

2021-09-16 03:36王敏
科技风 2021年20期

王敏

摘 要:当前,传统的数据库技术及单纯基于Hadoop的分布式计算方法已无法满足离线数据和业务量的快速增长需求,运行成本大、工作效率低、用户体验差。文章提出基于TDH+Hive的离线计算平台,采用TDH作为离线数据存储平台,并通过Azkaban任务调度工具在Hive中对数据进行相应的ETL转换,根据不同作业对实时性要求的差异,将运行时间分散到不同时间段,实现系统性能的平衡,提升离线大数据的处理效率,同时能够精简数据、节省存储空间,降低后续的开发成本,提升开发效率。

关键词:离线数据;TDH;Hive;Azkaban

中图分类号:TP392

1 绪论

自20世纪90年代“大数据”的概念被提出以来,其重要性备受关注,“人类的大数据时代已经到来”更是在2012年麦肯锡咨询公司的研究报告中被强调。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产[1]。由此可见,运用新技术手段对大数据进行专业的“加工”和“处理”才能激发其内在价值,实现数据的“增值”。

本文基于TDH+Hive构建大数据的离线计算平台,采用TDH作为离线数据存储平台,并通过Azkaban任务调度工具在Hive中对数据进行相应的ETL转换。相对于传统的单纯基于Hadoop的分布式计算方法运行成本大、工作效率低、用户体验差等问题,本文构建的离线大数据计算平台,能够在兼容各类数据源的前提下,大大提高数据的处理能力,同时可以通过对数据的精简来达到节省存储空间的目的,进而降低后续的开发成本,提升开发效率。

2 TDH、Hive、Azkaban概述

2.1 TDH大数据平台

TDH是国内外较为领先的一款大数据基础软件,也是目前国内应用最为广泛的一站式Hadoop发行版,性能较开源Hadoop2有很大优势,已应用在各行各业。TDH整合高度容错、高效索引、内存计算、执行优化等技术来高效率、低成本的实现平台处理10GB至100PB的海量数据。同时,它引入不停机扩容机制来满足客户动态数据的变动需求,以此来解决MPP或混合架构数据迁移的问题。

TDH主要在HDFS和YARN之上对Hadoop进行了改进,它提供了高速的Erasure Code编码方式,适合nearline storage类应用,降低一半磁盘容量需求的同时提高了一倍的容错性能。它的这个功能主要为拥有PB级别的客户所应用,比如电信行业的话单数据、交通/电力行业的传感器数据、金融行业的历史交易数据等。在YARN上进行改进的目的主要是为了能更全面的管理CPU/内存等资源,并有效地支持Spark和Map/Reduce应用集群。它的技术优势主要表现在以下3个方面:极致的性能与可扩展性;简易的操作和管理;完整的SQL和ACID支持。

2.2 Hive数据仓库

Hive是建立在Hadoop上的数据仓库基础构架。在Hive中,定义了一种类似于SQL的查询语言HQL,用户只要熟悉SQL语句就可以进行查询数据操作,也可以不需要开发专门的MapReduce应用来进行不太复杂的MapReduce统计,这就可以非常便利的用于数据仓库的统计分析,因此它具有学习成本低的优势。除此之外,对于熟练应用MapReduce的用户可以在Hive中方便的开发出自定义的Mapper和Reducer来应对复杂的操作。同时,它为数据抽取、转换、加载(ETL)提供了一系列的工具,实现了存储、查询和分析存储在Hadoop中海量数据的功能。

在Hive中,Hadoop、Mapreduce是架构的基础,它主要由服务端组件以及客户端组件两个类构成,涉及的组件有:CLI、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver。下面就对两大类组件进行简单介绍。服务端组件中的Metastore作为元数据服务组件提供存储Hive元数据的服务;为了使不同类型的编程语言能够进行Hive接口的调用,在服务端组件中使用Thrift服务来实现可扩展而且跨语言的开发;Complier、Optimizer和Executor组成了服务端组件中的Driver组件,目的是能够对HQL语句进行解析、編译优化以后生成相应的执行计划,再通过调用底层的mapreduce来计算框架。在另一类的客户端组件中:CLI为命令行接口;诸如JDBC、ODBC等许多客户端接口在Hive的架构中是被设计在thrift客户端之上的;在Hive客户端中,启动Hive Web Interface(HWI)组件后,用户便可以使用网页方式来进行访问服务。

2.3 Azkaban任务调度工具

Azkaban是一套简单的任务调度服务,其功能是在某一个工作流内按照规定好的流程或顺序来执行一组工作,它是由Linkedin开源的一个批量工作流任务调度器,整体包括三部分Webserver、Dbserver、Executorserver,是Linkin的开源项目,开发语言为Java。它定义了一种KV文件格式来设立了各个任务之间的耦合、依存关系,同时,它还提供了一种便于web用户界面维护和跟踪的工作流服务功能。

Azkaban是一个相似于Oozie的工作流控制引擎,在这种架构中,它可以用来应对多个Hadoop离线计算任务之间的耦合、依存关系问题,用它来替代Crontab对周期性的任务进行调度也具有易操作性,拥有美观的可视化管理界面的同时更加直观,可靠性更强。

3 基于TDH+Hive的离线计算平台的设计与实现