Hadoop(5)-Hive

Hadoop的存储处理方面提供了两种不同的机制,一种是之前介绍过的Hbase,另外一种就是Hive,有关于Hbase,它是一种nosql数据库的一种,是一种数据库,基于分布式的列式存储,适合海量数据的操作,,底层依赖HDFS,与rdbms的区别和其他的nosql基本类似,例如不支持sql语句对于数据进行操作,具体的关于Hbase的细节可以去参考我的上一篇博客,今天我们会通过hiveHbase的区别对于hive进行相应的讲解。

Hive 在其官方网站上的定义说hive是一个数据仓库(数据仓库中存储数量级大且数据结构复杂的数据,是多个其他数据库的集合)的软件,通过sql的方式帮助用户读写管理分布式存储中的数据,展开来说:Apache Hive是一个建立在Hadoop上的数据仓库基础架构,它可以使用类似于sql语句的Hql对于存储在HDFS上的数据进行相应的操作,可以转化为MapReduce作业,但是,虽然相比于Hbasehive提供了大家所熟悉的sql的功能,但是,对于一般sql的交互式查询还是没有被支持,Hive实际上就是只在Hadoop上运行批处理,而HBase操作的是数据库而不是在mapreduce上实时运行

Hive可以做什么:

1、ETL(把多个关系型数据库存储到数据仓库中的数据迁移过程就是ETLflume/sqoop),包括数据的抽取,转化,落地,加载等操作)、reporting、数据分析

2、可以把多种数据进行格式化或者结构化管理的工具

3、可以更加简洁的访问HDFS或者Hbase

4、可以直接通过sql直接使用访问Mapreduce等框架

Hive的组件

1、服务端组件:

Driver组件:包括编译器、优化器、执行器,将我们写的HQL进行解析,便宜又话,生成执行计划,然后调用底层的计算框架

Metastore组件:元数据服务组件,负责存储hive的元数据,存储在关系型数据库中

Thrift服务:用来进行可扩展且跨语言的开发服务

Hive集成服务:能让不同的开发语言调用hive接口

2、客户端组件:

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
或添加微信群

猜你喜欢

转载自www.cnblogs.com/dsjxb/p/9473552.html