一、什么是Hive?

  Hive是基于Hadoop的一个数据仓库管理工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL(HQL)查询功能。本质是将SQL转换为MapReduce程序(默认)。

  直接使用Hadoop MapReduce处理数据所面临的问题: 学习成本高,MapReduce实现复杂查询功能开发难度大,使用Hive接口采用类SQL语法,提供快速开发的能力避免了去写MapReduce,减少开发人员的学习成本功能。

二、Hive架构及组件

用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为Shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。

元数据存储:通常是存储在关系数据库如 mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。

解释器、编译器、优化器、执行器:完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。

三、Hive三种部署模式:

内嵌模式

1、元数据存储在内置的derby数据库中;

2、不需要单独配置metastore 也不需要单独启动metastore服务;

  适合测试体验,适合单机单人使用。不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。

本地模式

1、元数据使用外置的RDBMS,常见的是MySQL数据库;

2、不需要单独配置metastore 也不需要单独启动metastore服务

  每启动一次hive服务,都内置启动了一个metastore。如果使用多个客户端进行访问,就需要有多个Hiveserver服务,此时会启动多个Metastore可能出现资源竞争现象。

远程模式

1、元数据使用外置的RDBMS,常见的是MySQL数据库;

2、metastore服务单独配置,单独启动,全局唯一。

  这样各个客户端只能通过这一个metastore服务访问Hive.

四、Hive客户端

Hive的第一代客户端

  • bin/hive
  • 直接访问metastore服务
  • 第一代客户端属于shell脚本客户端,性能友好安全,方面存在不足,Hive已经不推荐使用,官方建议使用第二代客户端beeline

Hive的第二代客户端

  • bin/beeline

    • 此时还无法访问metastore服务,只能够访问Hiveserver2服务
    • beeline客户端,需要先连接metastore服务,再使用
  • # 在安装hive的服务器上(主机1),首先启动metastore服务,再启动hiveserver2服务nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &# 在任意机器(如机器2)上使用beeline客户端访问/export/server/apache-hive-3.1.2-bin/bin/beeline # 启动beeline后进入如下界面beeline> ! connect jdbc:hive2://node1:10000#jdbc访问HS2服务Connecting to jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: root#用户名 要求具备HDFS读写权限Enter password for jdbc:hive2://node1:10000: 

  hiveserver2服务启动后无法立即使用, 类似于HDFS的安全模式,大概要半分钟到一分钟才能开始使用