第一部分:Hadoop 基础与 HDFS (分布式文件系统)

1. HDFS 核心架构
  • NameNode (NN):管理文件系统的命名空间(Metadata,元数据),维护着整个集群的文件目录树。

  • DataNode (DN):负责实际存储数据块(Block),执行数据块的读写操作。

  • Secondary NameNode (2NN)(易错点)​ 它不是 NameNode 的热备,主要用于辅助 NameNode 合并编辑日志(FsImage),减轻 NN 的压力。

2. HDFS 读写流程
  • 写数据流程:客户端请求上传 -> NN 校验权限并分配块ID及 DataNode 列表 -> 客户端切分数据 -> 建立 Pipeline 管道 -> 逐级返回确认 -> 完成写入。

  • 读数据流程:客户端请求读取 -> NN 返回文件所在的 DataNode 列表(按距离排序) -> 客户端就近读取 Block -> 拼接成完整文件。

3. HDFS 常用 Shell 命令
  • 创建多级目录hadoop fs -mkdir -p /path/to/dir

  • 上传/下载

    • 本地 -> HDFS:hadoop fs -put localfile /hdfs/path

    • HDFS -> 本地:hadoop fs -get /hdfs/path localfile

  • 查看/复制/删除

    • 查看:hadoop fs -cat /hdfs/path

    • 本地复制到 HDFS:hadoop fs -cp localfile /hdfs/path

    • 删除:hadoop fs -rm -r /hdfs/path


第二部分:MapReduce (分布式计算框架)

1. MapReduce 核心流程
  • Input (输入):切片 (Split),将大文件切分成若干个小块。

  • Map (映射):读取切片数据,转换成 <Key, Value>键值对。

  • Shuffle (洗牌)核心阶段。包括分区 (Partition)、排序 (Sort)、溢写 (Spill)、归并 (Merge)。

    • 考点:Shuffle 的作用是确保相同 Key 的数据被发送到同一个 Reduce 任务中。

  • Reduce (归约):对 Shuffle 过来的数据进行聚合计算。

  • Output (输出):将结果写入 HDFS。

2. 经典案例:WordCount
  • Map 阶段:输入 <行偏移量, 行内容>,输出 <单词, 1>

  • Reduce 阶段:输入 <单词, [1, 1, ...]>,输出 <单词, 总数>

3. MapReduce 编程规范
  • Mapper:继承 Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>,重写 map()方法。

  • Reducer:继承 Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>,重写 reduce()方法。

  • Driver (主程序):配置作业 (Job)、设置输入输出路径、指定 Mapper 和 Reducer 类等。


第三部分:Hive (数据仓库工具)

1. Hive 表的设计与分类
  • 内部表 (Managed Table)

    • 默认创建的表类型。

    • 删除表时,元数据和 HDFS 上的数据都会被删除

  • 外部表 (External Table)

    • 创建时通过 LOCATION指定数据存放路径。

    • 删除表时,只删除元数据,不删除 HDFS 上的数据。(适合共享数据)

2. Hive 分区表 (Partition)
  • 作用:减少全表扫描,提高查询效率。

  • 静态分区:在插入数据时手动指定分区值(如 dt='2023-09-15')。

  • 动态分区:让系统根据字段值自动创建分区(需设置 hive.exec.dynamic.partition=true)。

3. Hive SQL 高频语句
  • 建表语法:包含 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'(指定分隔符)。

  • 插入数据

    • 静态插入:INSERT INTO TABLE table_name PARTITION (dt='2023-09-15') SELECT ...

    • 动态插入:INSERT INTO TABLE table_name PARTITION (dt) SELECT ..., dt FROM source_table

  • 查询排序

    • ORDER BY:全局排序(只有一个 Reducer)。

    • SORT BY:区内排序(每个 Reducer 内部有序)。

4. Hive 调优与原理
  • Fetch Task:对于简单的 SELECT *LIMIT查询,Hive 可以直接从文件读取数据,不走 MapReduce 任务,提升速度。

  • 数据倾斜:通常发生在 Reduce 阶段,某些 Reducer 处理的数据量远大于其他 Reducer。

    • 解决方法:调整随机分区键、增加 Reducer 数量、使用 MapJoin 代替 ReduceJoin。


第四部分:Linux 环境与异常处理

1. Linux 基础命令
  • 查看进程jps(必须掌握:NameNode, DataNode, ResourceManager, NodeManager, Jps)。

  • 文本编辑器vi/vim的基本使用(插入模式、保存退出)。

  • 权限管理chmod修改文件权限。

2. Java API 异常处理
  • 核心思想:程序代码中调用的命令,与直接从控制台输入的命令几乎是一样的。

  • 常见异常FileNotFoundException, IOException

  • 捕获机制

    
      

    java

    try {
        // 可能出错的代码
    } catch (Exception e) {
        // 输出具体的错误信息
        e.printStackTrace();
    }

第五部分:高频填空题/简答题预测 (根据图片末尾整理)

  1. 检查 Hadoop 集群状态

    • 命令:jps

    • 查看 Web UI:ResourceManager (8088), NameNode (50070/9870)。

  2. HDFS 数据块大小:默认是 128MB​ (或 256MB,视版本而定)。

  3. Hadoop 配置文件

    • 核心配置:core-site.xml(指定 NameNode 地址), hdfs-site.xml(指定副本数等), mapred-site.xml(指定 MapReduce 框架), yarn-site.xml(指定资源管理器)。

  4. YARN 架构

    • ResourceManager (RM):全局资源管理。

    • NodeManager (NM):单个节点资源管理。

    • ApplicationMaster (AM):单个作业的资源协调和任务监控。

更多推荐