本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Hive入门(一)
Hive简介
Hive是什么?
Hive是构建在Hadoop之上的数据仓库平台;是一个SQL解析引擎,它将SQL语句转译成MapReduce作业并在Hadoop上执行。Hive表是HDFS的一个文件目录,一个表名对应一个目录名,如果有分区表的话,则分区值对应子目录名。
Hive的历史由来
Hive是Facebook开发的,构建于Hadoop集群之上的数据仓库应用。2008年Facebook将Hive项目贡献给Apache,成为开源项目。
Hadoop和Hive组建成为Facebook数据仓库的发展史
Hive体系结构
Hive在Hadoop中的位置
Hive设计特征
Hive做为Hadoop的数据仓库处理工具,它所有的数据都存储在Hadoop兼容的文件系统中。Hive在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive设定的目录下,因此Hive不支持对数据的修改和添加,所有的数据都是加载的时候确定的。
Hive的设计特点
- 支持索引,加快数据查询。
- 不同的存储类型,例如:纯文本文件、Hbase中的文件。
- 将元数据保存在关系数据库中,减少了在查询中执行语义检查的时间。
- 可以直接使用存储在Hadoop文件系统中的数据。
- 内置大量用户函数UDF来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF函数来完成内置函数无法实现的操作。
- 类SQL的查询方式,将SQL查询转换为MapReduce的Job在Hadoop集群上执行。
- 编码跟Hadoop同样使用UTF-8字符集。
Hive体系结构
用户接口
- CLi:CLi启动的时候,会同时启动一个Hive副本。
- JDBC客户端:封装了Thrift,Java应用程序,可以通过指定的主机和端口连接到另一个进程中运行的Hive服务器。
- ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。
- WUI接口:通过浏览器访问Hive。
Thrift服务器
- 基于Socket通讯,支持跨语言。Hive Thrift服务简化了在多线程编程语言中 运行Hive的命令,还可支持C++、Java、Python以及Ruby语言。
解析器
- 编译器:完成HQL语句从词法分析、语法分析、编译、优化、以及执行计划的生成。
- 优化器:一个演化组件,当前它的规则是列修剪以及谓词下压。
- 执行器:顺序执行所有的job;如果任务链不存在依赖关系,可以采用并发执行的方式执行job。
元数据库
- Hive的数据由两部分组成:数据文件和元数据。
- 元数据用于存放Hive库的基本信息,存储在关系数据库中,如MYSQL。
- 元数据包括:数据库信息、表名、表的列和分区及其属性、表的属性、表的所在目录等。
Hadoop
- Hive的数据文件存储在HDFS中,大部分的查询由MapReduce完成。但是对于包含*的查询,比如 select * from tableName 不会生成MapReduce作业。
Hive的运行机制
- 用户通过用户接口连接Hive,发布Hive SQL
- Hive解析查询并制定查询计划
- Hive将查询转换成MapReduce作业
- Hive在Hadoop上执行MapReduce作业
Hive应用场景
适用场景
- 海量数据的存储处理
- 数据挖掘
- 海量数据的离线分析
不适用场景
-
复杂的机器学习算法
-
复杂的科学计算
-
联机交互式实时查询
-
END -