Hadoop基础知识

HDFS

HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件(小文件反而会加重hadoop的负担)

  • 基本概念

    • 块,所有文件存储后,都块拆分成相同大小的块

      1
      2
      3
      4
      **使用数据块的好处是:**
      1. 一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块不需要存储在同一个磁盘上,因此它们可以利用集群上的任意一个磁盘进行存储。
      2. 简化了存储子系统的设计,将存储子系统控制单元设置为块,可简化存储管理,同时元数据就不需要和块一同存储,用一个单独的系统就可以管理这些块的元数据。
      3. 数据块适合用于数据备份进而提供数据容错能力和提高可用性
    • HDFS的三个节点:Namenode,Datanode,Secondary Namenode

    • Namenode:HDFS的守护进程,用来管理文件系统的命名空间,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理。

    • Datanode:文件系统的工作节点,根据需要存储和检索数据块,并且定期向namenode发送他们所存储的块的列表(心跳检测)

    • Secondary Namenode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。

  • 特点

    1. 数据冗余,硬件容错

    2. 流式的数据访问

      1
      2
      * 一次写入,措辞读取
      * 一旦写入后,不会被修改(只能删掉以前的块,再写入新的块)
    3. 适合存储大文件

    4. 不适合交互式应用,低延迟很难满足

  • hdfs的基本操作

    • hadoop fs -ls / 打印出hdfs的文件夹给打印出来
    • hadoop fs -mkdir name 创建文件
    • hadoop fs -put /user input/ 将本地文件提交到hdfs
    • hadoop fs -cat 文件名 可以进行一个查看
    • hadoop fs -get 路径 从hdfs下载文件到本地
    • hadoop dfsadmin -report
    • … (和linux的操作命令大致相同)

MapReduce

并行计算框架,利用了分而治之的思想,一个大任务分成多个小任务(map),并行执行后,合并结果(reduce)

  • 基本概念

    • Job & Task

      • 一个Job会拆为几个Task,Task又分为MapTask和ReduceTask
    • JobTracker

      1
      2
      3
      4
      作用
      1. 作业调度
      2. 分配任务, 监控任务执行进度
      3. 监控TaskTracker的状态
    • TaskTracter

      1
      2
      1. 执行任务
      2. 任务状态汇报
  • Mpareduce的容错机制

    • 重新执行(默认4次,始终不行-》放弃)
    • 推测执行(若发现某taskTracker很慢,就会再建立一个TaskTraker执行该task,取较早结束的结果)