Hive入门(一)

224 阅读3分钟
 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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的运行机制

  1. 用户通过用户接口连接Hive,发布Hive SQL
  2. Hive解析查询并制定查询计划
  3. Hive将查询转换成MapReduce作业
  4. Hive在Hadoop上执行MapReduce作业

Hive应用场景

适用场景

  • 海量数据的存储处理
  • 数据挖掘
  • 海量数据的离线分析

不适用场景

  • 复杂的机器学习算法

  • 复杂的科学计算

  • 联机交互式实时查询

  • END -