HDFS—>运维篇

一、增加节点

  1. 操作系统配置:① 主机名、网络、防火墙、ssh配置
    ssh-keygen -t rsa
    同时可以把集群中任意一台节点的ssh的auth*-keys文件分发到最新的这个节点
  2. 在所有节点的/etc/hosts 文件中添加该节点的域名映射
  3. 把namenode的相关配置文件复制到该节点
    通过 tar cf 将jdk打包并跟hadoop目录一起通过scp传输过去
    将环境变量文件也scp过来,比如JAVA_HOME、HADOOP_HOME的路径
  4. 修改所有master节点的slaves文件,增加该节点。不需要刷新slaves文件
  5. 单独启动该节点上的datanode和nodemanager
    hadoop-daemon.sh start datanode
    yarn-daemon.sh start nodemanager
    启动完后通过hdfs dfsadmin -repor检查集群的状态
    yarm rmadmin
  6. 进行数据负载均衡(避免都往这个节点写数据导致数据热点)
    ① 这个操作尽量在datanode节点执行
    ② 执行前最好限制balance的带宽且指定几台服务器
    运行 start-balancer.sh -threshold 5(单个节点的使用率跟平均节点使用率的差值)
  7. 调整节点的副本数(可选)
    调整hdfs-site.xml文件里面的dfs.replication的值进行调整
    通过hdfs fsck / 来扫描确认文件是否正常
    进行调整后的副本数仅对后来添加的文件产生作用
    也可通过hdfs dfs -setrep -w 3 -R /lin (副本数可大于节点数,不要对根目录进行该操作)

二、节点下线

节点硬件故障或者任务运行在该节点比较吃力

下线前要先确保没有任务在运行,否则会下线得特别慢

  1. 修改Master节点的hdfs-site.xml配置,增加dfs.hosts.exclude参数
  2. 修改Master节点的yarn-site.xml配置,增加
    yarn.resourcemanager.nodes.exclude-path参数
  3. 修改Master节点的mapred-site.xml配置,增加
    mapreduce.jobtracker.hosts.exclude.filename参数
  4. 新建excludes文件,添加需要删除的主机名(前面三个参数都指向这个地址)
  5. 执行refreshNodes让配置生效
    hdfs dfsadmin -refreshNodes
    yarn rmadmin -refreshNodes

三、Federation

背景:存在单个Namenode负载过大的问题

分配
避免相互干扰

  • 单独分配一个Namenode去管理HBase的目录
  • 单独分配一个Namenode去管理数据仓库Hive的目录
  • 其他的按照业务或者部门进行分配管理多个Namenode

配置步骤

  1. core-site.xml

    • 使用viewfs协议配置Federation集群堆外提供服务的NS逻辑名称
    • 修改core-site.xml配置

        添加配置指向cmt.xml  
      
        
        
          fs.defaultFS
          viewfs://nsX
        
      
        
          hadoop.tmp.dir
          $HADOOP_HOME/tmp
        
      
        
          dfs.journalnode.edits.dir
          $HADOOP_HOME/journalnode/data
        
      
        
          ha.zookeeper.quorum
          slave1:2181,slave2:2181,hadoop04:2181
        
      
  2. cmt.xml
    配置虚拟路径和物理路径的映射关系

    //将集群中的/view_ns1目录挂载到namenode1中的根目录
    //也就是说之后/view_ns1下文件的操作都仅跟namenode1有关
    
      fs.viewfs.mounttable.nsX.link./view_ns1
      hdfs://ns1/    // 按照规划master就是namenode1
    
    
    
      fs.viewfs.mounttable.nsX.link./view_ns2
      hdfs://ns2/     // 按照规划master就是namenode2
    
  3. hdfs-site.xml
    配置两个命名服务以及rpc、http服务地址

    
      dfs.nameservices
      ns1,ns2
    
    
    ## 配置nameservice1的ha
    
      dfs.ha.namenodes.ns1
      nn1,nn2
    
    
    ## 配置nameservice2的ha
    
      dfs.ha.namenodes.ns2
      nn3,nn4
    
    
    ## 配置这四个namenode的RPC通信端口
    
      dfs.namenode.rpc-address.ns1.nn1
      master:9000
    
    
      dfs.namenode.rpc-address.ns2.nn3
      slave1:9000
    
    
      dfs.namenode.rpc-address.ns1.nn2
      hadoop04:9000
    
    
      dfs.namenode.rpc-address.ns2.nn4
      slave2:9000
    
    
    ## 配置这四个namenode的HTTP通信端口
    
      dfs.namenode.http-address.ns1.nn1
      master:50070
    
    
      dfs.namenode.http-address.ns2.nn3
      slave1:50070
    
    
      dfs.namenode.http-address.ns1.nn2
      hadoop04:50070
    
    
      dfs.namenode.http-address.ns2.nn4
      slave2:50070
    
    
    ## 配置四个namenode的编辑日志存放地址
    
      dfs.namenode.shared.edits.dir
      ## ns1的nn1和nn2用这个值
      qjournal://hadoop04:8485;slave1:8485;slave2:8485/ns1
      ## ns2的nn3和nn4用这个值
      qjournal://hadoop04:8485;slave1:8485;slave2:8485/ns2
        
    
    ## 配置错误恢复
    
      dfs.client.failover.proxy.provider.ns1
     org.apache.hadoop.hdfs.server.namenode.ha.ConfigureFailoverProxyProvider
    
    
      dfs.client.failover.proxy.provider.ns2
     org.apache.hadoop.hdfs.server.namenode.ha.ConfigureFailoverProxyProvider
    
    
    ## 配置ha的fence
     
      dfs.ha.fencing.methods
      sshfence
    
     
      dfs.ha.fencing.ssh.private-key-files
      /home/hadoop/.ssh/id_rsa
    
     
      dfs.ha.fencing.ssh.connect-timeout
      30000
    
     
      dfs.ha.automatic-failover.enabled
      true
    
  4. 创建相应的物理路径
  5. 启动服务

    • 同步 etc/hadoop下所有的配置文件到所有的Namenode上
    • 每个Namenode都需要单独格式化并且格式化的时候需要指定同一个集群id
      hdfs namenode -format -clusterid hd260
    • 格式化zookeeper
      在所有namenode的节点执行这个指令
      hdfs zkfc -formatZK
    • 格式化journalnode节点
      hdfs namenode -initializeSharedEdits
    • 指定从服务器
      现在多个master主服务器单独启动namenode,然后在所有从服务器执行指令
      hdfs namenode -bootstrapStandby
  6. 访问hdfs

    • 直接通过 hfds dfs -ls /
    • 指定namenode访问: hdfs dfs -ls hdfs://slave1:9000/

四、特点

  1. which java/which hadoop 查看这些安装目录
  2. du -ms * du -h0 free
  3. yarn rmadmin -refreshNodes 来刷新节点???
  4. hdfs dfs -ls -R /lin 可以递归列举出该目录下所有文件
  5. 通过 hdfs dfsadmin -repor 检查集群节点状态

        hdfs  fsck /  检查文件是否都正常  
  6. 指定停止哪几台hdfs服务
    顺序执行
    hadoop-daemons.sh --hostnames 'slave1 slave2' stop datanode
    hadoop-daemons.sh --hostnames 'master hdoop04' stop namenode
    hadoop-daemons.sh --hostnames 'slave1 slave2 hdoop04' stop journalnode
    hadoop-daemon.sh stop zkfc

    启动
    hadoop-daemons.sh --hostnames 'slave1 slave2' start namenode
    hadoop-daemons.sh start datanode //默认是启动所有的

    hadoop-daemons.sh --hostnames 'slave1 slave2 slave*' start zkfc

五、小结

将hadoop常用的运维操作记录下来,方便今后的维护工作

你可能感兴趣的:(hadoop,hdfs,大数据)