Contents

HIVE概述和HIVE基本原理

Hive是基于Hadoop的一个数据仓库工具,它可以将结构化的数据文件(TEXT,ORC,PARQUET等)映射为一张数据库表,并提供简单的类SQL(HQL)查询功能,可以将HQL语句转换MapReduce任务进行运行。

Hive的特点:

  • 简单易用。基于SQL表达式语法,兼容大部分SQL-92语义和部分SQL-2003扩展语义。
  • 可扩展。Hive基于Hadoop实现,可以自由的扩展集群的规模,一般情况下不需要重启服务。
  • 延展性。Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  • 容错性。Hadoop良好的容错性,节点出现问题SQL仍可完成执行。

Hive 命令

/uploads/hive-command.png

hive -f /home/my/hive-script.sql

Hive 基本原理

Hive系统架构

/uploads/hive-archetec.png

  • 接口
    • 用户接口主要有是三个:CLI,HWI和ThriftServer
    • 最常用的CLI,CLI启动的时候,会同时启动一个Hive Driver。
    • ThriftServer是以Thrift协议封装的Hive服务化接口,可以提供跨语言的访问如Python、C++等,并实现了JDBC/ODBC协议。
    • HWI提供了一个基于浏览器访问Hive的途径
  • 元数据存储(Metastore)
    • Hive 将元数据存储在数据库中,如MySQL,Oracle,Derby。
    • Hive 中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。
  • 驱动器(Driver)
    • 编译器:完成词法分析,语法分析,将HQL查询解析成AST;AST生成逻辑执行计划;逻辑执行计划生成物理MR执行计划。
    • 优化器:对逻辑执行计划进行优化;对物理执行计划进行优化。
    • 执行器:生成的物理执行计划转变成MR Job;提交到Hadoop上面执行。
  • Hadoop
    • MapReduce计算
    • HDFS数据存储

部署方式

内嵌模式:CLI Shell/Driver/MetaStoreCLI均在JVM内部

/uploads/hive-deploy-embed.png

HiveServer2:

  • Driver/MetaStoreCLI均在ThriftServer端
  • 提供JDBC/ODBC协议
  • 做Session隔离,每个Session内部共享一个Driver

/uploads/hive-deploy-hiveserver2.png

Remote MetaStoreServer

  • MetaStore作为一个独立的Thrift服务,而不是每个Driver自己维护一个瘦MetaStore访问DB

/uploads/hive-deploy-remotemetastore.png