Hive 安装与架构详解

发布于:2024-11-29 ⋅ 阅读:(13) ⋅ 点赞:(0)

Hive 安装(基于 Ubuntu 系统)

为了学习 Hive 的相关操作,我们需要先安装 Hive,以下是基于 Ubuntu 系统安装 Hive 的步骤:

  1. 下载 Hive

我们将使用 hive-0.13.1-cdh5.3.2 版本,当然你可以根据需要下载最新的 Hive 版本。
下载链接:Cloudera Hive 0.13.1
下载后得到一个压缩包:hive-0.13.1-cdh5.3.2.tar.gz。

  1. 解压 Hive 文件

解压下载的压缩包:

tar zxvf hive-0.13.1-cdh5.3.2.tar.gz

  1. 设置 Hive 环境变量

打开 ~/.bashrc 文件,并在文件末尾添加以下环境变量设置:

export HADOOP_USER_CLASSPATH_FIRST=true
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/home/yourusername/hadoop-2.6.0-cdh5.5.1
export HIVE_HOME=/home/yourusername/hive-0.13.1-cdh5.3.2

注意:

  • 修改 HADOOP_HOME 和 HIVE_HOME 为你自己 Hive 和 Hadoop 的实际安装路径。
  • 保存并退出文件。
    使修改的环境变量生效:
source ~/.bashrc

  1. 执行 Hive

在终端中输入 hive 进入 Hive 命令模式:

$ hive

  1. 退出 Hive

如果想退出 Hive 命令行,可以使用以下命令:

hive> exit;

Hive 常用命令
以下是一些 Hive 中常用的基本命令:

  1. show databases 命令
    列出当前 Hive 中的所有数据库。如果是新安装的 Hive,会默认有一个名为 “default” 的数据库。
show databases;

  1. create database 命令
    创建一个新的数据库。
create database test;

  1. use 命令
    切换到指定的数据库。
use test;

  1. 显示当前数据库
    查看当前所处的数据库,可以使用以下命令:
set hive.cli.print.current.db=true;

默认情况下,hive.cli.print.current.db 为 false,设置为 true 后,会显示当前所在的数据库名。
5. drop 命令
删除数据库或表。

drop database test;
drop table employee;

  1. create table 命令
    创建新表。以下是创建表的示例,字段包括姓名、ID、手机号和薪水:
create table employee (
  Name String comment 'Employee Name',
  Id int,
  MobileNumber String,
  Salary Float
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;

  1. 查看当前库的所有表
    查看当前数据库中的所有表:
show tables;

  1. alter table 命令
    用于修改表的属性,如修改表名、添加列、删除列等。
ALTER TABLE employee RENAME TO demo1;

  1. 加载数据到 Hive 表
    将本地文件中的数据加载到 Hive 表中:
LOAD DATA LOCAL INPATH '/home/dataflair/Desktop/details.txt' OVERWRITE INTO TABLE employee;

Hive 架构概述

Hive 架构建立在 Hadoop 和 MapReduce 的基础之上,主要用于简化大数据的查询和分析过程。它的架构由多个关键组件组成,可以分为服务端组件和客户端组件

服务端组件

Driver 组件: Driver 是 Hive 中的核心组件,包括三个子组件:
(1)Compiler:负责将 HiveQL 语句解析为执行计划。
(2)Optimizer:对生成的执行计划进行优化。
(3)Executor:执行优化后的计划,并将其转换成底层的 MapReduce 作业。

Metastore 组件: Metastore 是 Hive 用来存储元数据的服务,元数据包括表结构、列类型、分区信息等。Metastore 通常存储在关系数据库中(如 Derby 或 MySQL)。它的作用非常重要,因此 Hive 允许将 Metastore 服务独立出来,运行在单独的服务器集群上,以提高系统的健壮性和可扩展性。

Thrift 服务: Thrift 是 Facebook 开发的跨语言服务框架,Hive 使用 Thrift 来允许不同编程语言与 Hive 交互。通过 Thrift,Hive 可以暴露其接口,使得不同语言的客户端能够与 Hive 进行通信。

客户端组件

  • CLI(命令行接口): Hive 提供了一个类似于 SQL 的命令行接口,用户可以通过命令行执行 HiveQL 查询。
  • Thrift 客户端: Hive 的客户端接口大多数是通过 Thrift 客户端实现的,包括 JDBC 和 ODBC接口,允许其他编程语言与 Hive 进行交互。
  • Web GUI: Hive 提供了基于 Web 的图形用户界面(HWI,Hive Web Interface),用户可以通过 Web
    浏览器访问 Hive。HWI 需要在服务器上启动后才能使用。

Hive 数据处理流程

Hive 的数据处理流程主要包括以下步骤:

  1. UI 调用 Driver: 用户通过 Web 界面或 CLI 输入 HiveQL 查询,Hive 会调用 Driver 的 execute 接口来执行查询。

  2. Driver 创建会话: Driver 为每个查询创建会话句柄,并将查询发送给 Compiler 进行解析。

  3. Compiler 生成执行计划: Compiler 会根据 HiveQL
    查询生成执行计划。执行计划包含一个有向无环图(DAG),每个阶段可能是一个 MapReduce 作业、元数据操作或 HDFS 操作。
    在生成执行计划时,Compiler 会向 Metastore 请求元数据信息,用于查询表达式的类型检查。

  4. 优化执行计划: Optimizer 对生成的执行计划进行优化,确保查询的执行更加高效。

  5. 执行计划提交给 Execution Engine: 执行引擎将优化后的执行计划提交给适当的组件进行执行,包括 MapReduce 阶段。每个任务(mapper 或 reducer)会处理 HDFS 上的数据,执行特定的操作。

  6. 数据处理和中间结果存储
    每个 Map 或 Reduce 任务会从 HDFS 读取数据并执行操作。
    在没有 Reduce 阶段的情况下,Map 任务的输出会临时保存在 HDFS 上,等待后续阶段的处理。
    对于 DML(数据操作语言)操作,临时文件会被移动到目标表的位置,确保不会出现脏数据读取(HDFS 的文件重命名操作是原子的)。

  7. 查询结果返回给客户端: 执行引擎会从 HDFS 读取最终的查询结果,并通过 Driver 的 Fetch API 返回给客户端。

总结

Hive 的架构通过多个组件分工合作,完成数据查询和分析任务。Hive 通过 CLI 或 Web 界面接收用户查询,并通过复杂的查询解析和优化流程,最终将查询转化为 MapReduce 作业执行。Metastore 提供了查询所需的元数据信息,Thrift 服务则允许外部程序通过不同语言与 Hive 交互。通过这一架构,Hive 提供了一个强大且易于使用的大数据查询工具,简化了 Hadoop 的使用。