HDFS概念及集群搭建

441 阅读6分钟

概念


  • 存储模型

    1. 按字节切割为block块存储
      • 文件与文件的block块可以不一样
      • 默认128m,设置大小以硬件的I/O特性调整
      • 分散放在集群中,有location
    • 拥有可以定义的备份replication,没有主从概念,备份不能出现在同一节点
    • 上传可指定block大小和数量,上传后不能修改,可以追加
    • 有偏移量offset-->进行并行计算
  • 架构

    1. 被设计为主从架构
      • 主为namenode
        • 完全基于内存存储和管理metadata,具体为文件元数据、目录结构、block块的映射
        • 维护一个层次型的文件目录树
        • HA架构下为namenode为主备,即active与standby,active与standby的自动维护由zk+ +jn来实现。
        • 联邦机制进行数据分片,数据隔离
        • 持久化方案
          1. fsimage+editlog,分别为时间间隔内生成fsimage、追加日志。整合两者,滚动增量,editlog满64mb或间隔时间内(默认一小时)
          2. 在非HA模式下有secondarynode完成,在HA模式下由standbynode完成
        • 提供副本放置策略
      • 从为datanode,非HA架构还有secondaryNode
        • datanode负责存储block块并校验文件完整性md5,提供读写
        • datanode与namenode维持心跳,并汇报自己持有的block信息(在HA模式下还会向standby的namenode汇报)
      • client和namenode交互文件元数据,与datanode交换文件block数据
    • 安全模式
      • 即保证namenode持久化的安全模式
      • nomenode启东时,从硬盘中读取fsimage和editlog
      • 将所有的editlog事务作用到内存的fsimage中
      • 保存新的fsimage
      • 删除旧的editlog
      • 处于安全模式中的namenode不会进行数据更改的操作
      • 接收所有的datanode汇报,每当Namenode检测确认某个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全(safely replicated)的,在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他Datanode上。
  • 读写流程

    • write
      • client与namenode链接创建元数据,NN判定元数据是否有效
      • NN触发放置策略,返回一个有序的DN列表
      • client与DN建立pipeline连接,讲数据以64kb的packet发送到dataqueue中,并向NN返回的列表第一个DN发送。
      • DN接收到之后以链表中的顺序往下个DN发送 流式也是变种的并行计算
      • 副本数对于client是透明的(DN列表)
      • 当block传输完成,DN们各自向NN汇报,同时client继续传输下一个block,所以,client的传输和block的汇报也是并行的
    • read
      • client与ND交互原文件数据获得fileBlockLocation,NN返回按照距离策略返回block,client尝试下载并校验数据完整性
        • 同一机架-->距离最近的数据中心
      • 偏移量offset存在,所以可以获取NN子集,正因如此,可以进行并行计算

服务的搭建


  • 基础设施

  • 部署配置

  • 初始化运行

  • 命令行使用

    基础设施

    1. 网络环境
      • 网络策略
        • 内网互通,外网要能访问各个节点,外网访问生产可能代理。包含防火墙,linuxse等
      • 内网hosts映射
        • 便于开发和维护节点
      • 时间同步
        • 集群环境时间要同步
        • yum install ntp -y 安装ntp时间同步服务
        • vi /etc/ntp.conf,修改ntp服务器 ntp1.aliyun.com,service ntpd start,chkconfig ntpd on使服务生效
    2. 必备软件
      • jdk 最好使用rpm安装,环境变量/etc/profile
      • ssh免密
        • ssh localhost生成秘钥,将公钥放入其他服务器即可免密登录
        • scp /root/.ssh/id_dsa.pub node02:/root/.ssh/node01.pub
        • cat node01.pub >> authorized_keys

    部属配置 规划路径即hadoop服务存放位置,各节点数据存放位置, hadoop环境变量也许配置/etc/profile

    1. 伪分布式
      • hadoop-env.sh
        • export JAVA_HOME=/usr/java/default,使hadoop可以找到java
      • core-site.xml
        • NN角色启动位置,官网可查阅 <property><name>fs.defaultFS</name> <value>hdfs://node01:9000</value> </property>
      • hdfs-site.xml
        • hdfs副本数
          • <property> <name>dfs.replication</name> <value>1</value> </property>
        • 文件元数据存放位置
          • <property> <name>dfs.namenode.name.dir</name> <value>/var/bigdata/hadoop/local/dfs/name</value> </property>
        • data存放位置
          • <property> <name>dfs.datanode.data.dir</name> <value>/var/bigdata/hadoop/local/dfs/data</value> </property>
        • secondary暴露地址
          • <property> <name>dfs.namenode.secondary.http-address</name> <value>node01:50090</value> </property>
        • secondary 存放fsimage和editlog位置
      • slaves
        • vi slaves 配置DN角色的启动 单点配置为node01
    • 分布式(四节点起)

      • hadoop-env.sh
        • 同伪分布式
      • core-site.xml
        • NN的配置,放在主节点,同伪分布式
      • hdfs-site.xml
        • 备份数量改多 dfs.replication
        • name数据位置 dfs.namenode.name.dir,/var/bigdata/hadoop/full/dfs/name
        • data位置<name>dfs.datanode.data.dir</name> <value>/var/bigdata/hadoop/full/dfs/data</value>
        • secondary放到第二个节点dfs.namenode.secondary.http-address,node02:50090
        • secondary数据位置<property> <name>dfs.namenode.checkpoint.dir</name> <value>/var/bigdata/hadoop/full/dfs/secondary</value> </property>
      • slaves
        • vi slaves 添加节点
      • 分发配置
        • 使用scp命令
        • cd /opt
        • scp -r ./bigdata/ node02:pwd``
    • HA解决方案

      NN的active与NN的Standby通信,使用JN集群,自动选主集群,过半判定数据生效,具有持久化功能 使用ZKFC方案解决HA方案的自动化

      • 基础设施

        • ssh免密
          1. 启动start-dfs.sh脚本的机器需要将公钥分发给别的节点
          2. 在HA模式下,NN同节点需要启动ZKFC,ZKFC需要用免密的方式控制自己和其他NN节点的NN状态
        • 网络
      • 应用搭建

        • zookeeper,HA自动化依赖ZK

          1. 解压,tar
          2. 放到指定文件下 mv /opt/bigdata
          3. 修改配置文件名称 cp zoo_sample.cfg zoo.cfg
          4. 修改配置文件,将数据目录修改为可靠目录,追加server权重和端口
          5. 分发至其他节点 scp -r 目录 node3: pwd
          6. 创建数据目录,设置权重
        • 集群同步hadoop配置文件

        • JounalNode

        • 格式化NN

        • 格式化ZK

      • 启动集群

        1. 先启动JournalNode hadoop-daemon.sh start journalnode
        • 选择一个NN做active,格式化 hdfs namenode -format
        • 启动格式化的NN,以being另一台同步 hadoop-daemon.sh start namenode (启动zkfc命令为hadoop-daemon.sh start zkfc)
        • 在另一台机器中,hdfs namenode standby bootstarpStandby
        • 格式化zK, hdfs zkfc -format
        • start-dfs.sh
    • 格式化运行

      • 格式化
        • hdfs namenode -format
        • 创建目录,并初始化新的fsimage 查看version
      • 启动角色进程
        • start-dfs.sh 第一次启动namenode和secondarynode角色会初始化创建自己的数据目录