1.     基本概念

Hive是由Facebook在2007年8月开始开发,并于2008年8月开源(https://issues.apache.org/jira/browse/HADOOP-3601)。它是建立在Hadoop上的数据仓库工具,它可以对存储在HDFS、HBase、PG等存储系统中的文件进行结构化分析等操作。

Hive提供了以下功能:

1)       提供类SQL语言(HQL),可以很方便的做ETL操作

2)       数据可以存储在多个不同的存储系统,可以使用多种存储类型

3)       查询执行是通过MapReduce实现

4)       提供丰富的函数,普通函数(split等)、分析函数(sum等)、表级函数(row_number等)

2.     产生背景

在Hadoop出现以前,是关系型数据库的天下,SQL语言成为很多人的必备技能。但是,随着数据量的日益增长,单机存储计算已然满足不了海量数据的分析需求。并行计算框架MapReduce随之产生,并得到了迅猛的发展,它可以对数据并行分析处理,使得海量数据的快速分析成为可能。但是,编写MR程序却不是一件很容易的事情,Hive随之而来,它可以将SQL语言自动转换成MR程序去执行,可以让使用者只关注自己的业务逻辑,如此方便的神器自然得到了很多人的青睐,尤其是原来习惯编写SQL的人,hive得到的迅猛发展。

3.     TDW之Hive历史

了解我们公司的Hive,不得不说TDW(Tencent distributed Data Warehouse)的历史。我们是在2009年7月,成立TDW项目组,并启动技术架构预言。同年12月,确定TDW技术架构方案,并开始投入开发。2010年6月TDW 0.1版本发布,具备数据仓库基础功能。随后,不断完善功能、调优。2011年7月,TDW IDE发布,提高了TDW的易用性的同时,大大促进了TDW在公司的普及。

TDW是公司级数据平台,基于share-nothing架构,具有高可用性和高可伸缩性。业务涉及公司各个BG,目前拥有8800台集群规模,主要包括查询引擎,计算引擎和存储引擎。这其中的查询引擎就是指的Hive(这里指离线计算,实时计算使用的EasyCount系统),Hive在TDW中所处的位置如下图所示。


(老架构)

我们的Hive是在社区版本的基础上,做了大量的优化,根据业务特点做了大量的个性化定制,如元数据库的重新设计、各类函数的实现、List/Range分区的优化设计等,使得平台的稳定性、性能和易用性都有显著提高。

4.     执行流程

下面将说下hive的工作原理。

工作流程:

Hive提供3种用户接口:CLI(命令行模式),Client(交互模式),WebUI(网页访问)。TDW的使用方式是后台启动hiveserver,然后,使用PLC去连接HiveServer,执行相应的SQL,并返回结果。PLC是TDW自己用python实现的连接hiveServer的脚本。

如图所示,IDE/Lhotse通过PLC连接到HiveServer(通过Thrift实现),HiveServer会去解析sql,通过MR计算相应结果,然后返回。下面将详细介绍Hive是怎样解析SQL语句,并执行任务的。

详细流程:

HQL语句主要分为四种:DDL(数据定义语言)、DCL(数据控制语言)、DML(数据操作语言)、DQL(数据查询语言)。

DDL:创建/删除表,创建/删除分区,显示函数等操作。

DCL:创建/删除用户,授予/撤销权限等操作。

DML:insert/update等操作。

DQL:select操作。

DDL和DCL语句执行流程很简单,无须执行MR作业,只需要对元数据(metaDB)、HDFS、tPG库进行相应的操作即可完成。DML和DQL是一般都需要执行MR作业,除非一些特殊的语句进行优化后,无须执行MR(如select * from limit语句等)。

DML和DQL都比较复杂,它会将HQL语句转换成一个或者多个MR作业执行,得到最终结果。

HQL语句的执行过程总的概括为:HQL->AST->OpT->TaskT->执行->返回结果。下面我们以“SELECT a, sum(b), count(distinct c) FROM test::a_roncen1 GROUP BY a”为例,对Hive执行流程进行说明。(表a_roncen1的定义为CREATE TABLE a_roncen1(a BIGINT,bBIGINT,c STRING))

(1)     HQL->AST

AST是指抽象语法树,Hive使用开源的语法分析器Antlr对HQL进行解析。可以在Hive.g文件中定义新的语法。上述语句,则会转为以下AST树。

(2)     AST->OpT

OpT是指算子树,这个过程比较负责,也是hive的核心内容之一。大概分为3步:

①   对AST树进行深度优先遍历,遇到相应的标签,将其存储到相应的数据结构,供后续操作。

②   根据第一步所得的数据结构,查找元数据和操作HDFS,得到对应的相关信息,并存储。

③   根据上两部所得的信息,生成最后的OpT。

如上图,

①   进行深度优先遍历:

遇到TOK_FROM:将其子树作为HQL的数据源;

遇到TOK_DESTINATION:将其作为结果文件的存放位置;

遇到TOK_SELECT:保存选择列的信息;

遇到TOK_GROUPBY:保存group by列的信息。

②   读取元数据信息:

将数据源信息(表a_roncen1信息),结果文件信息(存放HDFS临时目录)等存放到相应的数据结构。

③   根据上述信息生成对应的OpT:

数据源表(TOK_FROM)会生成“表扫描算子(TableScanOperator)”;

选择列会生成“选择算子(SelectOperator)”;

Group by列比较复杂,会用到reduce功能,生成“选择算子”、“输出算子(ReduceSinkOperator)”和“分组算子(GroupByOperator)”三个算子。

(3)     OpT->TaskT

TaskT是指任务树,每个任务是hive执行的逻辑单元,任务树在这里可以简单理解为一个MR的job。

Hive会根据算子树,生成对应的任务树,上述例子比较简单,将此算子树生成对应的MRjob。

举个复杂的例子:SELECT a,sum(b) FROM (SELECT a, sum(b) AS b, count(distinct c) AS c FROM test::a_roncen1 GROUP BY a) sub WHERE sub.a=0 GROUP BY a ;

这条HQL生成的TaskT如下所示,是两个MRjob,两个作业之间使用HDFS作为中间数据存储。

(4)     TaskT执行

生成完TaskT后,就开始执行任务了。有依赖关系的job,必须要等其所有的父job执行完后,当前job才会开始执行。

Hive会将当前job的OpT序列化到HDFS上,然后,将job提交到MR,当执行Map和Reduce时,会将序列化的OpT反序列化,对每一行数据,依次执行每个算子。数据就像流水一样,沿着算子树往下流。

(5)     返回结果

如果是DQL语句,则会将结果存放在HDFS的临时目录下,然后,Hiveserver会去读取临时目录下的文件,并返回给客户端。

5.     总结

TDW的Hive经历很多年的打磨,已经日趋成熟稳定。但是,随着时间的推移,我们的Hive也暴露出很多问题,如与社区的Hive相差太大,社区的很多好的功能(向量查询引擎、基于代价查询优化等)都没有引进;Hive的多个job之间使用HDFS作为中间结果存储媒介,严重影响效率等问题。

针对第一个问题,我们在评估将社区Hive的适用我们公司业务的功能整合到TDW的Hive上。

针对第二个问题,我们基于社区的SparkSQL上,做了很多的性能优化和个性化定制,和Hive的HQL语句已经实现了很好的兼容,可以显著提高SQL执行效率和系统稳定性。

TDW平台会不断对平台进行优化和革新,一心致力于为用户提供稳定、优质、可靠的数据服务。

TDW(Tencent Data Warehouse)之hive简介相关推荐

  1. hive简介以及安装配置

    Hive简介 1.1在hadoop生态圈中属于数据仓库的角色.他能够管理hadoop中的数据,同时可以查询hadoop中的数据. 本质上讲,hive是一个SQL解析引擎.Hive可以把SQL查询转换为 ...

  2. hadoop离线阶段(第十三节)数据仓库、hive简介、hive安装和hive的三种交互模式

    目录 数据仓库 数据仓库的基本概念 数据仓库的主要特征 数据仓库与数据库区别 数据仓库分层架构 数据仓库元数据管理 Hive简介 什么是Hive Hive的特点 Hive架构 Hive与Hadoop的 ...

  3. Failed to initialize Data Warehouse host process

    Failed to initialize Data Warehouse host process 在VS启动Profile时出现这个错误,要用管理员打开VS才行. 如果设置为管理员无效,那么可以看下官 ...

  4. Azure SQL 数据库仓库Data Warehouse (3) DWU

    <Windows Azure Platform 系列文章目录> 在笔者的上一篇文章中:Azure SQL 数据库仓库Data Warehouse (2) 架构 介绍了SQL DW的工作节点 ...

  5. 大数据-数据仓库(Data Warehouse):概述【面向主题的、集成的、相对稳定的、反映历史变化的数据集合;是一个数据处理过程(清洗、转义、分类、重组、合并、拆分、统计等)】

    一.数据仓库介绍 1.数据仓库概念 数据仓库概念创始人在<建立数据仓库>一书中对数据仓库的定义是:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented ...

  6. SQL Server Parallel Data Warehouse (PDW) 介绍

    最近大数据概念非常火热,各个厂家都讲大数据视为未来IT的一个重要方向,因此各个厂家都想在这个领域有所作为.前几天参加了IBM大数据研讨会,会上IBM推出了他们针对于大数据的解决方案,三种一体机(Pur ...

  7. Firebolt whitepaper - 2. Firebolt cloud data warehouse

    官方文档的技术白皮书 官方文档 https://www.firebolt.io/resources/firebolt-cloud-data-warehouse-whitepaper 目录 Firebo ...

  8. 参加DW(Data warehouse) 11g R2 讲师培训结束

    虽然还是不能完全安心的全部听完, 但还是知道不少的新东西,11gR2 新功能还真不少 [@more@] Introduction to data warehousing • Introduction ...

  9. 一文搞懂什么是数据仓库(Data Warehouse)数据仓库与数据库区别有哪些?什么是元数据?

    大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 前期回顾 ...

最新文章

  1. java 与 |与||的区别
  2. string to byte[]
  3. 运行android模拟器,emulator: ERROR: x86 emulation currently requires hardware acceleration!
  4. Dynamic programming solving ULS
  5. 摄像头大数据分析跟踪均值漂移算法-spark和python
  6. pytorch从ubuntu16.04到win7的迁移(解决)
  7. ·通过wifi_scan学习esp32wifi程序编写
  8. 一.Nginx的特性和一些知识点
  9. AppCan 携手腾讯微博开放平台共推跨平台开发工具
  10. TypeScript中interface和type的区别
  11. 不可不知的CPU风扇清理技巧
  12. 【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器
  13. vb.net学习日记3.29
  14. 化妆品护肤DiY的广告界面 简单的jquery 图片无缝滚动
  15. EZSP-UART 入门
  16. macOS SwiftUI 教程之 06 绘图实现正弦波,通过调整频率和步进值来更新正弦波视图 (教程含源码)
  17. SpringBoot开源文档型知识库系统,源代码分享
  18. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)
  19. 无法进入BIOS解决
  20. 一文玩转NGINX(对于NGINX,你真的了解吗?)

热门文章

  1. 阿里云的ET除了能学人的声音唱歌,它还打开了通往智能化之路的大门
  2. 程序崩溃的原因及处理方法
  3. 使用ROS MoveIt!控制真实五自由度机械臂
  4. 2.3 IIS日志分析:手动清除IIS日志
  5. Android 实现通知栏和进度条效果(适用于Android8.0以上)
  6. 基于LinuxCNC下的estun从站控制
  7. 使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
  8. Android 基础知识
  9. 【FRR 】【BGP协议分析】 1 - BGP 初始化
  10. 实用的工具,有趣的人