Hive 安装(基于 Ubuntu 系统)
为了学习 Hive 的相关操作,我们需要先安装 Hive,以下是基于 Ubuntu 系统安装 Hive 的步骤:
- 下载 Hive
我们将使用 hive-0.13.1-cdh5.3.2 版本,当然你可以根据需要下载最新的 Hive 版本。
下载链接:Cloudera Hive 0.13.1
下载后得到一个压缩包:hive-0.13.1-cdh5.3.2.tar.gz。
- 解压 Hive 文件
解压下载的压缩包:
bash
tar zxvf hive-0.13.1-cdh5.3.2.tar.gz
- 设置 Hive 环境变量
打开 ~/.bashrc 文件,并在文件末尾添加以下环境变量设置:
bash
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 的实际安装路径。
- 保存并退出文件。
使修改的环境变量生效:
bash
source ~/.bashrc
- 执行 Hive
在终端中输入 hive 进入 Hive 命令模式:
bash
$ hive
- 退出 Hive
如果想退出 Hive 命令行,可以使用以下命令:
bash
hive> exit;
Hive 常用命令
以下是一些 Hive 中常用的基本命令:
- show databases 命令
列出当前 Hive 中的所有数据库。如果是新安装的 Hive,会默认有一个名为 "default" 的数据库。
sql
show databases;
- create database 命令
创建一个新的数据库。
sql
create database test;
- use 命令
切换到指定的数据库。
sql
use test;
- 显示当前数据库
查看当前所处的数据库,可以使用以下命令:
bash
set hive.cli.print.current.db=true;
默认情况下,hive.cli.print.current.db 为 false,设置为 true 后,会显示当前所在的数据库名。
- drop 命令
删除数据库或表。
sql
drop database test;
drop table employee;
- create table 命令
创建新表。以下是创建表的示例,字段包括姓名、ID、手机号和薪水:
sql
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;
- 查看当前库的所有表
查看当前数据库中的所有表:
sql
show tables;
- alter table 命令
用于修改表的属性,如修改表名、添加列、删除列等。
sql
ALTER TABLE employee RENAME TO demo1;
- 加载数据到 Hive 表
将本地文件中的数据加载到 Hive 表中:
sql
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 的数据处理流程主要包括以下步骤:
-
UI 调用 Driver: 用户通过 Web 界面或 CLI 输入 HiveQL 查询,Hive 会调用 Driver 的 execute 接口来执行查询。
-
Driver 创建会话: Driver 为每个查询创建会话句柄,并将查询发送给 Compiler 进行解析。
-
Compiler 生成执行计划 : Compiler 会根据 HiveQL
查询生成执行计划。执行计划包含一个有向无环图(DAG),每个阶段可能是一个 MapReduce 作业、元数据操作或 HDFS 操作。
在生成执行计划时,Compiler 会向 Metastore 请求元数据信息,用于查询表达式的类型检查。
-
优化执行计划: Optimizer 对生成的执行计划进行优化,确保查询的执行更加高效。
-
执行计划提交给 Execution Engine: 执行引擎将优化后的执行计划提交给适当的组件进行执行,包括 MapReduce 阶段。每个任务(mapper 或 reducer)会处理 HDFS 上的数据,执行特定的操作。
-
数据处理和中间结果存储 :
每个 Map 或 Reduce 任务会从 HDFS 读取数据并执行操作。
在没有 Reduce 阶段的情况下,Map 任务的输出会临时保存在 HDFS 上,等待后续阶段的处理。
对于 DML(数据操作语言)操作,临时文件会被移动到目标表的位置,确保不会出现脏数据读取(HDFS 的文件重命名操作是原子的)。
-
查询结果返回给客户端: 执行引擎会从 HDFS 读取最终的查询结果,并通过 Driver 的 Fetch API 返回给客户端。
总结
Hive 的架构通过多个组件分工合作,完成数据查询和分析任务。Hive 通过 CLI 或 Web 界面接收用户查询,并通过复杂的查询解析和优化流程,最终将查询转化为 MapReduce 作业执行。Metastore 提供了查询所需的元数据信息,Thrift 服务则允许外部程序通过不同语言与 Hive 交互。通过这一架构,Hive 提供了一个强大且易于使用的大数据查询工具,简化了 Hadoop 的使用。