第一部分:选择题与理论题高频考点 (对应资料一、二)
这部分主要考察对基本概念、组件功能和命令的记忆与理解。
Hadoop 核心组件
-
集群资源管理调度:YARN (Yet Another Resource Negotiator)。
-
HDFS 架构:
-
NameNode:管理文件系统的命名空间(目录树)、元数据(文件与数据块映射),处理客户端的读写请求。
-
DataNode:负责存储实际的数据块(Block),执行数据的读写操作,定期向NameNode汇报块信息。
-
-
可靠性保障:副本机制。默认副本数为3,合理配置需考虑机架感知,保证高可用。
HDFS 操作
-
常用命令:hadoop fs -ls <path>(查看), -cat, -put(上传), -get(下载), -mkdir, -rm。
-
Web UI 端口:NameNode Web UI 默认端口 9870(旧版为 50070),用于查看集群状态、文件系统浏览等。YARN ResourceManager Web UI 默认端口 8088,用于查看应用程序运行状态。
Hive 核心概念
-
数据存储格式:TEXTFILE(文本,通用)、SEQUENCEFILE(二进制键值对)、ORC/ PARQUET(列式存储,压缩率高,查询快)。需了解各自适用场景。
-
内部表 vs 外部表:
-
内部表 (Managed Table):由Hive管理数据生命周期。DROP表时,元数据和实际数据都会被删除。
-
外部表 (External Table):数据位于Hive之外(如指定LOCATION)。DROP表时,只删除元数据,保留实际数据。
-
-
分区表:按“省份”、“城市”等字段分区,提高查询效率。注意:分区字段不能与表内已有字段重名。
MapReduce 核心机制
-
Shuffle (洗牌):连接Map阶段和Reduce阶段的桥梁。作用是将Map的输出按照Key进行分组、排序,并将同一Key的所有Value传输给同一个Reducer进行处理。
-
输入输出:Map阶段的输出是 <Key, Value>对,这个也是Reducer阶段的输入。Reducer的输入类型与Map的输出一致。
其他
-
Linux 权限:chmod命令,如 chmod 755 file(所有者rwx,组rx,其他人rx)。
-
SSH 免密登录:使用 ssh-keygen生成密钥对,将公钥 (id_rsa.pub) 追加到目标机器的 authorized_keys文件中。
-
查看节点状态:可通过 hdfs dfsadmin -report命令或Web UI查看NameNode和DataNode的健康状态。
第二部分:程序题与综合体核心考点 (对应资料三、四)
这部分侧重于流程理解和动手能力,需要能写出HQL、描述流程、完成简单的Java/Shell编程。
考点1:HiveQL (HQL) 编程 (对应例2)
-
建表:
sql
CREATE TABLE student (
stu_no INT,
stu_name STRING,
stu_dept STRING,
stu_age INT,
stu_date STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' — 指定分隔符
STORED AS TEXTFILE; — 指定存储格式 -
插入数据:
sql
INSERT INTO TABLE student VALUES
(2221001,'张三','信息工程系',18,'2022-9-12'),
(2321002,'李四','数科系',19,'2023-9-15'),
(2321002,'王五','信息工程系',20,'2023-9-17'); -
条件查询与排序:
sql
SELECT * FROM student
WHERE stu_date >= '2023-01-01'
ORDER BY stu_age DESC; — 降序 -
分组统计:
sql
SELECT
stu_dept,
COUNT(*) AS student_count,
AVG(stu_age) AS avg_age
FROM student
GROUP BY stu_dept;
考点2:HDFS 读写流程 (对应例3)
-
写入流程 (以500MB文件为例):
-
客户端请求:客户端向NameNode发起写文件请求。
-
元数据检查:NameNode检查文件是否存在、权限等,通过后返回可写入的DataNode列表。
-
文件切分:客户端将500MB文件切分成数据块 (Block)。默认128MB/块,所以会被切成4个完整的块 (128M*4=512M,最后一个块大小为116M)。
-
Pipeline (流水线) 复制:
-
客户端将第一个Block发送给第一个DataNode。
-
第一个DataNode接收一部分后,立即转发给第二个DataNode。
-
第二个DataNode接收后,转发给第三个DataNode。
-
数据以Packet包为单位在Pipeline中流动。
-
-
确认机制:
-
每个DataNode成功写入一个Block后,会向NameNode发送块报告 (Block Report)。
-
所有DataNode都确认写入成功后,客户端通知NameNode写入完成。
-
NameNode更新元数据,记录新文件的块与DataNode的映射关系。
-
-
读取流程:客户端向NameNode请求文件,NameNode返回文件所有块的位置信息(DataNode地址),客户端就近读取。
考点3:MapReduce 原理与 Shuffle (单词统计案例)
-
输入:student teacher student may can can may
-
Map 阶段输出:<"student", 1>, <"teacher", 1>, <"student", 1>, <"may", 1>, <"can", 1>, <"can", 1>, <"may", 1>
-
Shuffle 处理:对Map输出的键值对进行分区、排序、分组。结果为:<"can": [1, 1]>, <"may": [1, 1]>, <"student": [1, 1]>, <"teacher": [1]>
-
Reduce 阶段输出:<"can", 2>, <"may", 2>, <"student", 2>, <"teacher", 1>
考点4:Hadoop 集群规划与部署
-
场景:1台Master (NameNode + ResourceManager),2台Slave (DataNode + NodeManager)。
-
核心配置文件:core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml, workers(或 slaves)。
-
关键步骤:
-
配置各文件。
-
格式化NameNode:hdfs namenode -format(仅首次执行)。
-
启动集群:start-dfs.sh(启动HDFS), start-yarn.sh(启动YARN)。
-
验证:使用 jps命令查看进程;访问Web UI (master:9870, master:8088);运行一个简单的Hadoop示例程序(如WordCount)。
考点5:Java 调用 HDFS API
-
核心包:hadoop-common, hadoop-hdfs, hadoop-client。
-
核心类:org.apache.hadoop.fs.FileSystem。
-
核心代码片段 (下载文件):
java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.net.URI;public class HDFSDemo {
public static void main(String[] args) {
Configuration conf = new Configuration();
try {
// 1. 获取FileSystem实例
FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "your_user");// 2. 定义路径
Path hdfsPath = new Path("/user/hive/warehouse/sample.txt"); // HDFS源路径
Path localPath = new Path("/home/user/downloads/"); // 本地目标路径// 3. 下载文件
fs.copyToLocalFile(false, hdfsPath, localPath);System.out.println("File downloaded successfully!");
fs.close();
} catch (Exception ex) {
ex.printStackTrace(); // 获取具体错误信息
}
}
}-
上传:使用 fs.copyFromLocalFile(localPath, hdfsPath)。
-
考点6:Shell 批处理操作
-
创建目录:hdfs dfs -mkdir -p /user/test
-
判断并创建:hdfs dfs -test -d /user/test || hdfs dfs -mkdir -p /user/test
-
上传匹配的文件:hdfs dfs -put ./demo* /user/test/(将所有以demo开头的文件上传)
-
递归遍历:hdfs dfs -ls -R /user/test
-
统计文件数量:ls /aaa/bbb | wc -l
总结建议:
理论与实践结合:不仅要记住概念,更要动手练习HQL、Java API和Shell命令。
重点突破:MapReduce的Shuffle机制、HDFS读写流程、Hive内外部分区表、集群搭建步骤是重中之重。


