⼤数据时代的技术hive:hive介绍
我最近研究了hive的相关技术,有点⼼得,这⾥和⼤家分享下。
⾸先我们要知道hive到底是做什么的。下⾯这⼏段⽂字很好的描述了hive的特性:
1.hive是基于Hadoop的⼀个数据仓库⼯具,可以将结构化的数据⽂件映射为⼀张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进⾏运⾏。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应⽤,⼗分适合数据仓库的统计分析。
2.Hive是建⽴在 Hadoop 上的数据仓库基础构架。它提供了⼀系列的⼯具,可以⽤来进⾏数据提取转化加载(ETL),这是⼀种可以存储、查询和分析存储在 Hadoop 中的⼤规模数据的机制。Hive 定义了简单的类 SQL 查询语⾔,称为 HQL,它允许熟悉 SQL 的⽤户查询数据。同时,这个语⾔也允许熟悉 MapReduce 开发者的开发⾃定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer ⽆法完成的复杂的分析⼯作。
要理解hive,必须先理解hadoop和mapreduce,如果有不熟悉的童鞋,可以百度⼀下。
使⽤hive的命令⾏接⼝,感觉很像操作关系数据库,但是hive和关系数据库还是有很⼤的不同,下⾯我
就⽐较下hive与关系数据库的区别,具体如下:
1. hive和关系数据库存储⽂件的系统不同,hive使⽤的是hadoop的HDFS(hadoop的分布式⽂件系统),关系数据库则是服务器本地的⽂件系统;
2. hive使⽤的计算模型是mapreduce,⽽关系数据库则是⾃⼰设计的计算模型;
3. 关系数据库都是为实时查询的业务进⾏设计的,⽽hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致hive的应⽤场景和关系数据库
有很⼤的不同;
4. Hive很容易扩展⾃⼰的存储能⼒和计算能⼒,这个是继承hadoop的,⽽关系数据库在这个⽅⾯要⽐数据库差很多。
以上都是从宏观的⾓度⽐较hive和关系数据库的区别,hive和关系数据库的异同还有很多,我在⽂章的后⾯会⼀⼀描述。
下⾯我来讲讲hive的技术架构,⼤家先看下⾯的架构图:
由上图可知,hadoop和mapreduce是hive架构的根基。Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor),这些组件我可以分为两⼤类:服务端组件和客户端组件。 ⾸先讲讲服务端组件:
Driver组件:该组件包括Complier、Optimizer和Executor,它的作⽤是将我们写的HiveQL(类SQL)语句进⾏解析、编译优化,⽣成执⾏计划,然后调⽤底层的mapreduce计算框架。
Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库⾥,hive⽀持的关系数据库有derby、mysql。元数据对于hive⼗分重要,因此hive⽀持把metastore服务独⽴出来,安装到远程的服务器集⾥,从⽽解耦hive服务和metastore服务,保证hive运⾏的健壮性,这个⽅⾯的知识,我会在后⾯的metastore⼩节⾥做详细的讲解。
Thrift服务:thrift是facebook开发的⼀个软件框架,它⽤来进⾏可扩展且跨语⾔的服务的开发,hive集成了该服务,能让不同的编程语⾔调⽤hive的接⼝。
客户端组件:
CLI:command line interface,命令⾏接⼝。
Thrift客户端:上⾯的架构图⾥没有写上Thrift客户端,但是hive架构的许多客户端接⼝是建⽴在thrift
客户端之上,包括JDBC和ODBC接⼝。
WEBGUI:hive客户端提供了⼀种通过⽹页的⽅式访问hive所提供的服务。这个接⼝对应hive的hwi组件(hive web interface),使⽤前要启动hwi服务。
下⾯我着重讲讲metastore组件,具体如下:
Hive 的metastore 组件是hive 元数据集中存放地。Metastore 组件包括两个部分:metastore 服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive 默认的嵌⼊式磁盘数据库derby ,还有mysql 数据库。Metastore 服务是建⽴在后台数据存储介质之上,并且可以和hive 服务进⾏交互的服务组件,默认情况下,metastore 服务和hive 服务是安装在⼀起的,运⾏在同⼀个进程当中。我也可以把metastore 服务从hive 服务⾥剥离出来,metastore 独⽴安装在⼀个集⾥,hive 远程调⽤metastore 服务,这样我们可以把元数据这⼀层放到防⽕墙之后,客户端访问hive 服务,就可以连接到元数据这⼀层,从⽽提供了更好的管理性和安全保障。使⽤远程的metastore 服务,可以让metastore 服务和hive 服务运⾏在不同的进程⾥,这样也保证了hive 的稳定性,提升了hive 服务的效率。
Hive
的执⾏流程如下图所⽰:
图描述的很清晰了,我这⾥就不在累述了。
下⾯我给⼤家展⽰⼀个简单的例⼦,看看hive 是怎么操作的。
⾸先我们创建⼀个普通的⽂本⽂件,⾥⾯只有⼀⾏数据,该⾏也只存储⼀个字符串,命令如下:
然后我们建⼀张hive 的表:
接下来加载数据:
最后我们查询下表:
⼤家看到了吧,hive ⼗分简单,很好⼊门,操作和sql 很像,下⾯我就要深⼊分析下hive 与关系数据库的区别,这部分可能有些⼈看的不是很明⽩,但是很有必要提前提出,以后我的⽂章⾥将进⼀步讲述hive ,那时不太明⽩的童鞋在看看这部分,很多问题就会清晰很多,具体如下:
1. 关系数据库⾥,表的加载模式是在数据加载时候强制确定的(表的加载模式是指数据库存储数据的⽂件格式),如果加载数据时候发现加载的数据不符合模式,关系数据库则会拒绝加载数据,这个就叫“写时模式”,写时模式会在数据加载时候对数据模式进⾏检查校验的操作。Hive 在加载数据时候和关系数据库不同,hive 在加载数据时候不会对数据进⾏检查,也不会更改被加载的数据⽂件,⽽检查数据格式的操作是在查询操作时候执⾏,这种模式叫“读时模式”。在实际应⽤中,写时模式在加载数据时候会对列进⾏索引,对数据进⾏压缩,因此加载数据的速度很慢,但是当数据加载好了,我们去查询数据的时候,速度很快。但是当我们的数据是⾮结构化,存储模式也是未知时候,关系数据操作这种场景就⿇烦多了,这时候hive 就会发挥它的优势。
2. 关系数据库⼀个重要的特点是可以对某⼀⾏或某些⾏的数据进⾏更新、删除操作,hive 不⽀持对某个具体⾏的操作,hive 对数据的操作只⽀持覆盖原数据和追加数据。Hive 也不⽀持事务和索引。更新、事务和索引都是关系数据库的特征,这些hive 都不⽀持,也不打算⽀持,原因是hive 的设计是海
量数据进⾏处理,全数据的扫描时常态,针对某些具体数据进⾏操作的效率是很差的,对于更新操作,hive 是通过查询将原表的数据进⾏转化最后存储在新表⾥,这和传统数据库的更新操作有很⼤不同。
大数据etl工具有哪些3. Hive 也可以在hadoop 做实时查询上做⼀份⾃⼰的贡献,那就是和hbase 集成,hbase 可以进⾏快速查询,但是hbase 不⽀持类SQL 的语句,那么此时hive 可以给hbase 提供sql 语法解析的外壳,可以⽤类sql 语句操作hbase 数据库。echo ‘sharpxiajun’ > /home/
hive –e “create table test (value string );
Load data local inpath ‘home/’ overwrite into table test
hive –e ‘ select * from test’;
今天的hive就写到这⾥,关于hive我打算⼀共写三篇⽂章,这是第⼀篇,下⼀篇主要讲hive⽀持的数据模型,例如:数据库(database)、表(table)、分区(partition)和桶(bucket),还有hive⽂件存储的格式,还有hive⽀持的数据类型。第三篇⽂章就会讲到hiveQL的使⽤、以及结合mapreduce查询优化的技术和⾃定义函数,以及我们现在在公司项⽬⾥运⽤hive的实例。
马云在退休的时候说互联⽹现在进⼊了⼤数据时代,⼤数据是现在互联⽹的趋势,⽽hadoop就是⼤
数据时代⾥的核⼼技术,但是hadoop和mapreduce操作专业型太强,所以facebook在这些的基础上开发了hive框架,毕竟世界上会sql的⼈⽐会java的⼈多的多,hive是可以说是学习hadoop相关技术的⼀个突破⼝,哪些⾃⽴于投⾝hadoop技术开发的童鞋们,可以先从hive开始哦。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论