hadoop基础知识分享(一)

Hadoop 概述

Hadoop 是一个适合海量数据的分布式存储和分布式计算的平台。Hadoop 的处理思想是“分而治之”。Hadoop 主要包含三个核心组件:

  1. HDFS:分布式存储框架,适合海量数据存储
  2. MapReduce:分布式计算框架,适合海量数据计算
  3. YARN:资源调度平台,负责给计算框架分配计算资源

Hadoop 组件介绍

  • HDFS(Hadoop Distributed File System):分布式文件存储系统,采用主从架构,主节点为 NameNode,负责管理文件系统的名称空间和文件的访问;从节点为 DataNode,负责实际数据的存储。
  • MapReduce:一种依赖磁盘 I/O 的批处理计算模型,通过主从结构进行分布式计算。主节点为 MRAppMaster,负责接收任务并调度;从节点执行具体的计算任务。
  • YARN(Yet Another Resource Negotiator):负责资源调度和管理,主节点为 ResourceManager,从节点为 NodeManager。

Hadoop 分布式搭建步骤

  1. 关闭防火墙并设置所有节点名称和相关映射。
  2. 设置免密钥。
  3. 上传 Hadoop 安装包并解压。
  4. 配置环境变量。
  5. 修改配置文件。
  6. 同步文件。
  7. 格式化并启动(仅第一次需要格式化)。

HDFS(Hadoop Distributed File System)

架构与原理

  • 主从结构:HDFS 具有主从架构,主节点(NameNode)负责管理文件系统的元数据,从节点(DataNode)负责存储实际数据。
  • 块(Block):数据以块的形式存储,每个块大小默认 128MB(Hadoop 2.0 以后),块的大小可以通过 hdfs-site.xml 配置。
  • 副本(Replication):为了提高数据的可靠性,HDFS 会将数据块备份到多个 DataNode 上。

元数据管理

  • fsimage:元数据镜像文件,存储某一时段 NameNode 内存元数据信息。
  • edits:操作日志文件,记录新增元信息日志。
  • fstime:保存最近一次 checkpoint 的时间。

SecondaryNameNode 的作用

  • 帮助 NameNode 完成元数据信息的合并。
  • 工作流程:
    1. SecondaryNameNode 向 NameNode 发起 Checkpoint 请求。
    2. 从 NameNode 获取 fsimage 和 edits。
    3. 合并 edits。
    4. 将新的 fsimage 发回给 NameNode。
    5. NameNode 用新的 fsimage 替换旧的 fsimage。

HDFS 读写流程

  • 写流程:客户端将数据写入 HDFS,数据被分成多个块,存储到多个 DataNode 上。
  • 读流程:客户端通过 NameNode 获取块的位置,从对应的 DataNode 读取数据。

YARN(Yet Another Resource Negotiator)

架构

  • 主节点:ResourceManager,负责资源分配和调度。
  • 从节点:NodeManager,负责单节点资源的管理(CPU 和内存)。

Container

  • 定义:Container 是 YARN 中资源的抽象,封装了某个节点上一定量的资源(CPU 和内存)。
  • 作用:Container 由 ApplicationMaster 向 ResourceManager 申请,并在 NodeManager 上运行。

MapReduce

架构

  • 主节点:MRAppMaster,负责接收和调度任务。
  • 从节点:任务执行节点(具体的 Task)。

提交任务步骤

  1. 编写 MapReduce 程序,定义 Mapper 和 Reducer 类。
  2. 编译程序生成 .jar 文件。
  3. 上传数据到 HDFS。
  4. 提交任务:
    hadoop jar your-program.jar YourMainClass -D mapreduce.job.reduces=2 -input /hdfs/input/path -output /hdfs/output/path
    
  5. 查看任务状态:
    yarn application -status <applicationId>
    

Hadoop 命令

集群管理

  • 启动所有进程:
    start-all.sh
    
  • 停止所有进程:
    stop-all.sh
    
  • 启动 HDFS 和 YARN 相关进程:
    start-dfs.sh
    start-yarn.sh
    
  • 停止 HDFS 和 YARN 相关进程:
    stop-dfs.sh
    stop-yarn.sh
    

文件操作

  • 上传文件:
    hdfs dfs -put 本地路径 HDFS路径
    hdfs dfs -copyFromLocal 本地路径 HDFS路径
    
  • 下载文件:
    hdfs dfs -get HDFS路径 本地路径
    hdfs dfs -copyToLocal HDFS路径 本地路径
    
  • 创建目录:
    hdfs dfs -mkdir HDFS路径
    
  • 查看文件内容:
    hdfs dfs -cat HDFS路径
    hdfs dfs -tail HDFS路径
    hdfs dfs -text HDFS路径
    

文件管理

  • 追加内容:
    hdfs dfs -appendToFile 本地路径 HDFS路径
    
  • 删除文件:
    hdfs dfs -rm -r -f HDFS路径
    
  • 复制文件:
    hdfs dfs -cp 源路径 目标路径
    
  • 重命名文件:
    hdfs dfs -mv 源路径 目标路径
    
  • 修改文件权限:
    hdfs dfs -chmod 735 目标路径
    hdfs dfs -chmod -R 735 目标路径
    
  • 查看存储空间:
    hdfs dfs -df
    hdfs dfs -du -h /
    

RPC 协议

  • RPC(Remote Procedure Call)是远程过程调用协议,用于通过网络从远程计算机程序上请求服务,而无需了解底层网络技术。RPC 采用客户端/服务器模式,客户端发送请求,服务器处理请求并返回结果。