1.Hive是什么

1.1 Hive概念

Hive是由FaceBook开源,主要用于解决海量结构化日志的数据统计。它是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能,本质上是将HSQL转化成MR程序

1.2 Hive与数据库区别

hive的常用知识 hive知识点总结_hive的常用知识

  • 对于数据操作来说,Hive不支持数据更新删除主要原因是Hive在HDFS中存储,进行删除是物理删除,代价比较高,所以只支持覆盖和追加
  • Hive扩展性好是可以在多个集群的服务器上做应用开发
  • Hive的读时模式快,这点指Hive加载数据到表中时不会做数据的校验,在读取数据时才校验,它的查询延迟主要浪费在资源调度上,进行任务划分然后进行计算任务的申请。

1.3 Hive的优点和缺点

  • 优点:
  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
  • 避免了去写MapReduce,减少开发人员的学习成本。
  • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  • 缺点:
  • Hive 不支持记录级别的增删改操作
  • Hive 的查询延时很严重(MR程序需要资源调度,任务计算)
  • Hive 不支持事务

1.4 Hive架构原理

hive的常用知识 hive知识点总结_Hive_02

  • 1、用户接口:Client
  • CLI(提供交互shell方式接入hive)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
  • 2、元数据:Meta
  • 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
  • 默认存储在自带的derby数据库中,有安装MySQL就可存储在Mysql中
  • 3、Hadoop集群
  • 使用HDFS进行存储,使用MapReduce进行计算。
  • 4、Driver:驱动器
  • 解析器(SQL Parser) 对SQL进行语法分析和语义分析。
  • 将SQL字符串转换成抽象语法树AST
  • 对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
  • 编译器(Physical Plan):将AST编译生成逻辑执行计划。
  • 优化器(Query Optimizer):对逻辑执行计划进行优化。
  • 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说默认就是mapreduce任务

Hive的工作原理(参考上面的架构图)

Hive首先是一个客户端工具,它提供了一些用户可操作的接口,可以通过交互shell,JDBC和web UI方式连接Hive,在Hive的内部有个Driver驱动器,驱动器里面实现了解析器,编译器,优化器和执行器的功能,在用Hsql查询表时,sql语句在驱动器中会先做语法和语义解析,解析之后再进行相应的语法编译,然后在通过优化器时产生逻辑计划和物理计划,并进行优化,最后在执行器中转换成对应的mr jar包,打包给hadoop集群运行获得结果。

Hive将表和存放在hdfs的数据建立映射关系,在用SQL分析语句查询表时,sql语句会被解析成对应的mr程序,mr程序调用jar包并从元数据获取数据存储的地址进行相关计算,最后由MapReduce得出结果。元数据是存放在hive指定的数据库,比如mysql中。

hive的常用知识 hive知识点总结_大数据_03

2.Hive的交互方式

前提是先启动Hadoop集群和mysql服务

交互方式有三种:Hive交互Shell,Hive JDBC服务和Hive的命令

  • Hive交互shell
    通过输入在hive中的/bin目录下的hive命令,进入hive,直接输出sql查询
cd /opt/bigdata/hive
bin/hive