在Hadoop的存储处理方面提供了两种不同的机制,一种是之前介绍过的Hbase,另外一种就是Hive,有关于Hbase,它是一种nosql数据库的一种,是一种数据库,基于分布式的列式存储,适合海量数据的操作,,底层依赖HDFS,与rdbms的区别和其他的nosql基本类似,例如不支持sql语句对于数据进行操作,具体的关于Hbase的细节可以去参考我的上一篇博客,今天我们会通过hive和Hbase的区别对于hive进行相应的讲解。
Hive 在其官方网站上的定义说hive是一个数据仓库(数据仓库中存储数量级大且数据结构复杂的数据,是多个其他数据库的集合)的软件,通过sql的方式帮助用户读写管理分布式存储中的数据,展开来说:Apache Hive是一个建立在Hadoop上的数据仓库基础架构,它可以使用类似于sql语句的Hql对于存储在HDFS上的数据进行相应的操作,可以转化为MapReduce作业,但是,虽然相比于Hbase,hive提供了大家所熟悉的sql的功能,但是,对于一般sql的交互式查询还是没有被支持,Hive实际上就是只在Hadoop上运行批处理,而HBase操作的是数据库而不是在mapreduce上实时运行
Hive可以做什么:
- ETL(把多个关系型数据库存储到数据仓库中的数据迁移过程就是ETL(flume/sqoop),包括数据的抽取,转化,落地,加载等操作)、reporting、数据分析
- 可以把多种数据进行格式化或者结构化管理的工具
- 可以更加简洁的访问HDFS或者Hbase
- 可以直接通过sql直接使用访问Mapreduce等框架
Hive的组件
- 服务端组件:
Driver组件:包括编译器、优化器、执行器,将我们写的HQL进行解析,便宜又话,生成执行计划,然后调用底层的计算框架
Metastore组件:元数据服务组件,负责存储hive的元数据,存储在关系型数据库中
Thrift服务:用来进行可扩展且跨语言的开发服务
Hive集成服务:能让不同的开发语言调用hive接口
- 客户端组件:
CLI:命令行接口,可以使用命令操作查看
Thrift客户端:hive的许多客户端接口是建立在thrift客户端的基础之上的,包括JDBC等
WEB UI :可以在浏览器中访问hive提供的服务接口
优点及使用场景
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
避免了去写MapReduce,减少开发人员的学习成本,可以直接写sql进行操作;
统一的元数据管理,可与impala/spark等共享元数据;
易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
数据的离线处理;比如:日志分析,海量结构化数据离线分析…
Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求 不高的场合;
Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执 行延迟比较高。
而对于Hive的执行流程,我借用某大神的一句神总结:将用户提交的SQL语句转换成Hadoop上的MR任务执行,并向用户返回结果。(Sql传入之后会提交到编译器中,编译器分析sql,然后去元数据中查数据的位置以及查看sql要进行什么操作,然后转化成mapreduce程序(执行计划),吧执行计划交给执行器,然后执行器开始执行并将结果进行返回到客户端,而优化器的作用就是对整个计算过程进行优化,比如在数据量特别小的时候就直接在内存中申请处理)
如需更多的交流可以添加qq群859121793
或添加微信群: