Hive

type
status
date
slug
summary
tags
category
icon
password

概念

Apache Hive是一款分布式SQL计算的工具, 其主要功能是:将SQL语句翻译成MapReduce程序运行。
hadoop学习笔记中,提到了通过MapReduce实现分布式计算,它是通过编程去完成具体的计算任务,而编程学习成本高、难度较大。目前,使用SQL(结构化查询语句)对数据进行统计分析(计算),是最为方便的方式。而MapReduce只能支持编程,所以就有了Hive。它会将SQL翻译成MapReduce程序,让后交给yarn运行。

Hive架构

hive原理简介

hive主要有两大组件,分别是元数据存储和SQL解析器。
notion image
💡
为什么会有元数据存储?它是干什么的?
针对SQL:SELECT gender, COUNT(*) FROM t_user GROUP BY gender; 以及存入HDFS的文件/user.txt
Hive要如何翻译这个SQL为MapReduce程序?有如下问题:
  • t_user对应hdfs中的哪个文件(路径)
  • 使用什么符号作为列的分隔符?
  • 哪些列可以作为gender使用?
  • gender列是什么类型的数据?
而解决上面问题最简单的方法就是,hive将上面需要的信息存储起来建立和hdfs中文件的映射,这些信息被称为元数据,实现这个功能的组件,就是元数据管理服务(Metastore 服务进程)。
💡
SQL解析器
解决了元数据管理后,我们还有一个至关重要的步骤, 即完成SQL到MapReduce转换的功能,即SQL解析器(Driver驱动程序)。它能实现:
  • SQL分析
  • SQL到MapReduce程序的转换
  • 提交MapReduce程序运行并收集执行结果

hive基础架构

notion image
  • 元数据存储 通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。Hive提供了 Metastore 服务进程提供元数据管理功能
  • Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器 完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar文件即Java代码中。
  • 用户接口 包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。Hive提供了 Hive Shell、 ThriftServer等服务进程向用户提供操作接口

Hive部署

hive的运行依赖于Hdaoop(HDFS、MapReduce和YARN),在部署hive前,请参考hadoop学习笔记完成Hadoop部署。
Hive是单机工具,只需要部署在一台服务器即可,但是它可以提交分布式运行的MapReduce程序运行。
具体部署方案,见下图:
notion image
MySQL部署
mysql部署教程请自行搜索(可使用docker快速部署)。
Hive部署
由于hive依赖hadoop且涉及到对HDFS文件系统的访问,所以需要配置Hadoop的代理用户,即设置xxx(启动hadoop的用户)用户允许代理(模拟)其它用户。(经测试,hadoop3.3.6可不配)
下载安装包
由于上面使用了mysql作为hive的元数据存储库,所以需要下载mysql的驱动jar包。
选择一个合适的版本(部署的mysql是什么版本,就选择什么版本)。
将下载好的驱动jar包,放入:Hive安装文件夹的lib目录内
在Hive的conf目录内,新建hive-env.sh文件,填入以下环境变量内容:
在Hive的conf目录内,新建hive-site.xml文件,填入以下内容:
现在,hive的相关配置已经完成,需要初始化hive元数据管理所需要的数据库。
在MySQL中新建数据库:hive(navicat连接mysql创建即可)
CREATE DATABASE hive CHARSET UTF8;
执行元数据库初始化命令
启动hive
客户端连接
Hive Shell方式(可以直接写SQL): bin/hive
更多客户端连接方式,见后面

Hive使用

客户端连接

常用命令

  • GitTalk

© aya 2024-2025