第一部分:选择题与理论题高频考点 (对应资料一、二)

这部分主要考察对基本概念、组件功能和命令的记忆与理解。

  1. Hadoop 核心组件

    • 集群资源管理调度:YARN (Yet Another Resource Negotiator)。

    • HDFS 架构

      • NameNode:管理文件系统的命名空间(目录树)、元数据(文件与数据块映射),处理客户端的读写请求。

      • DataNode:负责存储实际的数据块(Block),执行数据的读写操作,定期向NameNode汇报块信息。

    • 可靠性保障副本机制。默认副本数为3,合理配置需考虑机架感知,保证高可用。

  2. HDFS 操作

    • 常用命令hadoop fs -ls <path>(查看), -cat, -put(上传), -get(下载), -mkdir, -rm

    • Web UI 端口:NameNode Web UI 默认端口 9870(旧版为 50070),用于查看集群状态、文件系统浏览等。YARN ResourceManager Web UI 默认端口 8088,用于查看应用程序运行状态。

  3. Hive 核心概念

    • 数据存储格式TEXTFILE(文本,通用)、SEQUENCEFILE(二进制键值对)、ORC/ PARQUET(列式存储,压缩率高,查询快)。需了解各自适用场景。

    • 内部表 vs 外部表

      • 内部表 (Managed Table):由Hive管理数据生命周期。DROP表时,元数据和实际数据都会被删除。

      • 外部表 (External Table):数据位于Hive之外(如指定LOCATION)。DROP表时,只删除元数据,保留实际数据。

    • 分区表:按“省份”、“城市”等字段分区,提高查询效率。注意:分区字段不能与表内已有字段重名。

  4. MapReduce 核心机制

    • Shuffle (洗牌):连接Map阶段和Reduce阶段的桥梁。作用是将Map的输出按照Key进行分组、排序,并将同一Key的所有Value传输给同一个Reducer进行处理。

    • 输入输出:Map阶段的输出是 <Key, Value>对,这个也是Reducer阶段的输入。Reducer的输入类型与Map的输出一致。

  5. 其他

    • 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文件为例)

    1. 客户端请求:客户端向NameNode发起写文件请求。

    2. 元数据检查:NameNode检查文件是否存在、权限等,通过后返回可写入的DataNode列表。

    3. 文件切分:客户端将500MB文件切分成数据块 (Block)。默认128MB/块,所以会被切成4个完整的块 (128M*4=512M,最后一个块大小为116M)。

    4. Pipeline (流水线) 复制

      • 客户端将第一个Block发送给第一个DataNode。

      • 第一个DataNode接收一部分后,立即转发给第二个DataNode。

      • 第二个DataNode接收后,转发给第三个DataNode。

      • 数据以Packet包为单位在Pipeline中流动。

    5. 确认机制

      • 每个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)。

  • 关键步骤

    1. 配置各文件。

    2. 格式化NameNodehdfs namenode -format(仅首次执行)。

    3. 启动集群start-dfs.sh(启动HDFS), start-yarn.sh(启动YARN)。

    4. 验证:使用 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


总结建议

  1. 理论与实践结合:不仅要记住概念,更要动手练习HQL、Java API和Shell命令。

  2. 重点突破:MapReduce的Shuffle机制、HDFS读写流程、Hive内外部分区表、集群搭建步骤是重中之重。

更多推荐