Hive 数据仓库

Hive 数据仓库

一、关系型数据库

1.什么是关系型数据库?

就像Excel 表格一样,数据存在行(记录)列(字段)组成的表里,表与表之间还能 “拉关系”(主键、外键)。

  • 常见选手:MySQL、Oracle、SQL Server …
  • 核心元素:数据库 → 表 → 行/列 → 主键(身份证号)

适合小数据、高一致性

2.关系型数据库的 “瓶颈”

  • 读写太猛:网站每秒上万次请求,硬盘 I/O 扛不住
  • 海量数据查询慢:一张表上亿条,查询像大海捞针
  • 扩展困难:加机器很难,升级要停机,像给飞机换引擎
  • 不需要那么严格:发朋友圈晚几秒看到也无所谓,不用实时

大数据时代,传统数据库力不从心

理解:关系型数据库像学校图书馆的卡片柜,找书快,但书太多了就翻不动。而互联网每天产生海量数据(微博、抖音),需要新工具 —— 这就是Hive出场的原因!

二、Hive —— 大象上的数据仓库

1.Hive 是什么?

Hive是搭建在Hadoop(大象)之上的数据仓库工具。它把SQL 语句翻译成MapReduce 任务在集群上跑。

  • 简单易上手:写 SQL 就能分析大数据,不用学 Java
  • 扩展性强:数据可以存在 HDFS 上,不怕大
  • 容错好:某个节点挂了,任务还能继续
  • 支持自定义函数:可以自己造轮子

2.Hive 怎么工作?

用户接口(命令行/Web)→Hive 引擎(解析 SQL)→ 生成MapReduce 作业→ 在Hadoop 集群执行

Hive SQL ➜ 翻译官 ➜ MapReduce ➜ 结果返回

优势: 上百行 MR 代码,一行 HQL 搞定!
缺点: 不适合低延迟(秒级响应),擅长批处理(日志分析、离线报表)

比喻:Hive 就像一个“翻译官”,你说英语(SQL),它翻译成 Hadoop 能懂的 MapReduce 方言去干活。你只管写查询,不用管底层怎么跑。

三、 Hive 的数据模型 · 四兄弟

1.内部表 & 外部表

  • 内部表:数据存在 Hive 仓库目录,删表时数据和元数据一起删
  • 外部表:数据存在自己指定的 HDFS 路径,删表时只删元数据,数据还在。

创建内部表

CREATE TABLE person (...);

创建外部表

CREATE EXTERNAL TABLE person (...) LOCATION '/hivedb';

2.分区表 & 桶表

  • 分区表:按文件夹划分(如按日期 city=‘北京’),查询时只扫描对应文件夹,快!
  • 桶表:按哈希分成多个文件(如按 age 分 5 个桶),适合抽样、连接加速。

分区表示例

PARTITIONED BY (city STRING)

桶表示例

CLUSTERED BY (age) INTO 5 BUCKETS

记住:分区 = 按文件夹整理(像课本按单元分),桶 = 把数据打散到几个文件(像把同学按学号分到5个小组)。

四、Hive 部署 & 常用命令

1.部署要点

  • 环境:CentOS + Hadoop + MySQL(存元数据)
  • 安装:下载 Hive,配置 hive-site.xml(连 MySQL)
  • 初始化schematool -dbType mysql -initSchema
  • 启动:命令行输入hive就进入啦

元数据存在 MySQL,可以多人同时用

2.基本命令

  • show databases;看所有库
  • use mydb;切换库
  • show tables;看所有表
  • desc formatted table_name;看表结构
  • load data local inpath '/path' into table t;加载本地数据
  • select * from t limit 10;查前10条

实际操作:创建一个内部表 person_inside,加载一个逗号分隔的 txt 文件,然后查询 — 像在教室里用 SQL 玩数据!

五、HWI 网页界面 & HiveServer2

1.HWI (Web 界面)

  • 通过浏览器访问 Hive,不用装客户端
  • 查看表结构、执行查询、查看任务状态
  • 适合不想敲命令的同学

配置后访问 http://ip:9999/hwi

2.HiveServer2

  • 提供JDBC/ODBC接口,让程序(如 Java、Python)连接 Hive
  • 支持多用户并发,比 HiveServer1 强大
  • 自带Web UI(端口 10002),能看到会话、查询日志

Beeline 连接:!connect jdbc:hive2://...

总结: HWI 是 “浏览器版 Hive”,HiveServer2 是 “服务版 Hive”,让其他程序也能调用它。

六、常用查询 & 多表连接

1.连接(JOIN)

  • 内连接:只返回两边都匹配的数据
  • 左外连接:左边全保留,右边没匹配就 NULL
  • 全外连接:左右全部保留
  • 左半连接:相当于 IN 子查询
SELECT * FROM employee JOIN job ON employee.id = job.emp_id;

2.导出 & 排序

  • 导出到本地INSERT OVERWRITE LOCAL DIRECTORY '/tmp' SELECT ...
  • 导出到HDFSINSERT OVERWRITE DIRECTORY '/hivedb' SELECT ...
  • 排序SELECT * FROM t SORT BY age DESC LIMIT 5;取年龄最大的5个
  • 模糊查询SELECT * FROM t WHERE name LIKE '张%';

注意:Hive 的 SQL 和 MySQL 很像,但 Hive 更偏向分析,不支持行级更新、事务,它主打 “一次写入,多次分析”。