大数据处理技术之Hive 概览

tech2022-07-10  142

大数据处理技术之Hive 概览

1. 大数据架构

如我另一篇博客了所述,大数据处理技术架构和业务应用,大数据业务和技术架构简图如下: 整个大数据技术可以分为3大块,数据存储、数据处理和分析、数据展示。三大板块都可以独立和业务系统对接,但一般这三者都会形成一个技术体系对外部的技术体系提供服务。例如一家公司内部的大数据部门负责存储从业务体系中获取到的海量数据如日志、业务数据等等,然后通过mapreduce、hive、spark、flink等技术进行分析处理,之后再通过OLAP对外进行数据展示或者提供对外API给公司内部或者外部客户进行调用。

2. Hive是什么

hive就是用于分析处理海量结构化日志的一种技术。由facebook开源出来。本质是将sql语句转化为mapreduce程序进行数据分析处理。hive不是一个数据库,是一个数据仓库工具,可以把结构化数据映射为一张表,同时对外提供类似sql的查询注意SQL只是一种规范,很多数据库或者框架都会尽可能遵循SQL规范,也就是确保主要的SQL语句功能是通用的,但细微部分肯定会有差异。这样带来的好处是只要会使用SQL,就能使用大部分框架提供的能力,所以Hive、Clickhosue等数据处理框架都会提供SQL支持,但并不能保证所有SQL语法都完美支持。hive简单架构如下 hive因为本身是将sql转换为mapreduce程序,本身不存储数据。数据一般放在hdfs中,当然也支持处理本地数据hive分析数据本质是mapreduce程序,可以使用hadoop的mapreduce,也可以使用spark技术。(spark当初只是为了解决mapreduce的弊端,本质思想类似,可以称之为类mapreduce技术)执行程序是运行在yarn上。这是由yarn平台优势带来的,可以很好承载mapreduce或者spark程序分布式运行。

3. Hive优缺点

3.1 hive优点

操作接口类SQL语法,或者说大致遵循了SQL规范,这样就可以让具备SQL能力的人快速上手并使用大部分功能来支持业务快速开发和应用。有时候也称之为HQL–hive sql本质是将sql转换为mapreduce程序,所以降低了分布式数据处理的使用门槛。因为是基于mapreduce和hdfs,所以hive对于处理小的数据集合对比传统技术并没有优势。屠龙刀只适合屠龙用来削水果就不是很合适了。hdfs本身也不建议存储小文件,mapreduce分布式存储,如果数据量小,本身程序启动和调度的时间可能比处理数据时间还长,不划算,无法发挥出分布式处理技术的优势。hive可以自定义函数,根据自己需要实现函数来进行功能扩展。

3.2 hive缺点

hive sql只是支持了主要的SQL规范,但并不完整,所以表达能力对比传统数据库弱一些。hive 处理小数据时,无法体现出优势,甚至落后于传统技术。hive因为是将sql转化为mapreduce程序进行分布式处理,所以无法进行实时数据处理。所以一般都是处理历史数据等对实时性要求不高的数据。hive因为是将sql转化为mapreduce程序,mapreduce无法支持迭代式数据处理,也就是常说的递归处理。需要递归数据处理,可以使用spark或者flinkhive在数据挖掘上并不擅长,有需要可以转到sparkl或者flink等框架上。hive本身是通过模板将sql转换为mapreduce程序,通常情况下不够智能化,也就是无法做到像直接写mapreduce程序一样灵活hive使用的sql转mapreduce模板,导致调优会比较苦难,粒度比较粗大,因为会受到hive框架本身限制。

4. hive架构概览

hive可以将结构化数据文件映射为一张数据库表,而结构化数据库文件主要是2部分,一个是数据本身,一个是数据结构也就是schema参考mysql安装到windows本地后,一个数据库文件的组成 可以看到结构化数据存储在hdfs中,表结构数据存储在数据库中。默认是存储在hive自带的derby数据库中,可以配置为存储到mysql中可以看到主要的转化工作是在client上完成的用户接口,也就是hive访问方式,可以通过shell、jdbc、web页面元数据,也就是数据库的schema等信息,一般包括表名、表所属数据库(默认是default数据库)、表所有者、列/分区子u段、表类型(是否外部表)、表数据所在目录等数据本身存储在hdfs中,sql转化为mapreduce程序,使用yarn进行程序运行资源调度。所以整套hive基于hadoop实现的Driver,驱动器,负责将sql转化为mapreduce程序。主要分为几个组成部分。(sql转化为mapreduce程序整个过程和代码编译类似) sql parser,sql解析器。把sql解析为抽象语法树AST,这一步一般都是用的开源第三方库如antlr,对AST进行语法分析,表是否存在,字段是否存在,sql语法是否错误编译器,将AST编译生成逻辑执行计划优化器,对逻辑执行计划进行优化执行器,把逻辑执行计划转化为可以运行的物理计划,对于hive来说就是mapreduce或者spark程序

5. Hive和数据库比较

hive不是数据库,只是能够将结构化数据文件映射为一张表,并提供查询和分析。hive提供的类似SQL的查询语言,hive query language,但不代表hive是一个数据库。使用类似sql语法只是为了降低hive的使用门槛。hive是无法支持在线应用的,也就是说数据处理和分析耗时较高,相反mysql、hbase都可以提供在线服务因为可以较快提供数据。hive本身不能存储数据,数据实际存储在hdfs中,而数据库软件一般是将数据放在块设备或者本地文件系统中。hive的数据是读多写少,这一点和hbase也很类似。hive的业务场景一般不建议对数据的改写,所有数据最好在加载时就确定好,然后对外提供查询服务。数据库中数据则一般都需要相对频繁的进行改写或者更新,所以insert、update等操作会比较多。索引,hive在加载数据过程中不会对数据做任何处理,甚至不会扫描,所以也没有对数据建立索引。hive需要访问数据中满足条件的特定值时,采取暴力扫描整个数据方式,所以访问延迟较高。不过由于本身是mapreduce分布式执行,所以针对大数据量查询还是会有优势。而数据库中,一般都会针对常用的查询字段建立索引,这样查询这些字段对应数据时可以有很好的查询性能。hive本身并没有自己的执行引擎,实际是一个mapreduce程序在运行,数据库则一般都有自己的执行引擎如mysql的innaodb引擎。执行耗时,hive的执行耗时依赖于mapreduce的执行效率,并不高。同时hive并没有针对数据建立索引,所以整体来说延迟是很高的,无法做在线业务处理。传统数据库则由于数据都是在本地,可以建立索引,所以有较高的处理性能。不过各有适用范围,hive适合处理海量数据,传统数据库适合处理相对少量的数据而无法处理海量数据。hive的扩展性依赖于hadoop集群,所以扩展性是很强的,实际可以达到上千台,而传统数据库集群一般都在百台以下 10.hive适合处理海量数据,传统数据库则适合小而美的数据量,海量数据就无法处理,如传统mysql到了500万行数据就要考虑分库分表,而百万行数据有些勉强达到大数据处理技术的门槛。
最新回复(0)