什么是Hive(新手易懂版)
一、什么是Hive
1. 问题思考
我们已经把 alert_orcl.log 上传到了 HDFS 的 /input 目录。
- MapReduce(wordcount):需要写 Java 代码或者执行 jar 包,只能一次性运行。
- Hive:只写 SQL 语句,不用编写代码,直接读取 HDFS 上已有的文件,筛选出以字母a开头的单词并统计数量,这就是 Hive 把 MapReduce 封装成 SQL 的优势。
2. 实现步骤
步骤 1:打开 Hive 客户端
hive步骤 2:创建外部表,直接关联 HDFS 已有的数据文件
不用再次上传文件,直接映射 /input 目录:
-- 创建外部表,每行文本作为一整条记录 CREATE EXTERNAL TABLE log_words ( line STRING ) ROW FORMAT DELIMITED STORED AS TEXTFILE LOCATION '/input';步骤 3:拆分每行文本为独立单词
利用 Hive 内置函数把一行里所有单词拆开,变成多行单个单词:
SELECT explode(split(line, ' ')) AS word FROM log_words;步骤 4:筛选 a 开头的单词,并且统计总数
-- 统计所有以小写字母a开头的单词数量 SELECT COUNT(DISTINCT word) FROM ( SELECT explode(split(line, ' ')) AS word FROM log_words ) t WHERE word LIKE 'a%';3. 引出 Hive:Hadoop 世界的 "SQL 翻译官"
Hive 就是让你用写 SQL 的方式去分析 HDFS 上的大数据的工具。
这行SQL你敲进去回车,Hive 会自动帮你翻译成一堆 MapReduce 任务,扔到 Hadoop 集群上去跑,最后把结果返回给你。你不用懂 MapReduce 怎么写,会 SQL 就行 —— 这就是 Hive 的价值。
二、为什么要先装 MySQL?
Hive 本身不存数据
- 真实数据 → 存在 HDFS 上(以文件的形式分布式存储)
- "数据的说明书" → 存在 MySQL 上(专业名叫 Metastore元数据)
元数据包括什么?举例子:
- 有一张叫 XXX 的表
- 表里有几个字段
- 每个字段是什么类型(字符串 / 数字)
- 这张表的数据文件存在 HDFS 的哪个目录下
没有 MySQL 会怎样? Hive 就不知道自己有哪些表、数据存在哪。
三、Hive 简单验证
做验证之前先想三个问题:
- 我在 Hive 里 create table test,真实数据存哪了?
- MySQL 里会多出什么?为什么会多出东西?
- HDFS 上会有变化吗?变化的是什么?
HDFS /input/alert_orcl.log、Hive 映射外部表 log_words。
前置:我们创建的外部表语句
CREATE EXTERNAL TABLE log_words (line STRING) ROW FORMAT DELIMITED STORED AS TEXTFILE LOCATION '/input';LOCATION 直接绑定 HDFS 原文件路径,是核心关键点。
步骤 1:查看 Hive 默认仓库目录,找不到表数据文件
# 1. 查看Hive默认存储仓库路径
hdfs dfs -ls /user/hive/warehouse输出列表里没有 log_words 文件夹,没有任何和 alert_orcl.log 相关的数据文件。
步骤 2:查看真实数据仍然躺在原始 HDFS 路径
hdfs dfs -ls /input hdfs dfs -cat /input/alert_orcl.log一张图总结三者关系
一句话总结:
Hive 不生产数据,它只是数据的 "翻译官" 和 "管理员"—— 说明书存在 MySQL,货物存在 HDFS,Hive 负责对接两头。
