HDFS—>运维篇

1、增长节点

  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 (副本数可大于节点数,不要对根目录进行该操做)

2、节点下线

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

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

  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

3、Federation

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

分配
避免相互干扰bootstrap

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

配置步骤服务器

  1. core-site.xml网络

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

      添加配置指向cmt.xml  
      <configuration  xmlns:xi="http://www.w3.org/2001/XInclude">
        <xi:include  href="cmt.xml"/>
        <property>
          <name>fs.defaultFS</name>
          <value>viewfs://nsX</value>
        </property>
      
        <property>
          <name>hadoop.tmp.dir</name>
          <value>$HADOOP_HOME/tmp</value>
        </property>
      
        <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>$HADOOP_HOME/journalnode/data</value>
        </property>
      
        <property>
          <name>ha.zookeeper.quorum</name>
          <value>slave1:2181,slave2:2181,hadoop04:2181</value>
        </property>
      </configuration>
  2. cmt.xml
    配置虚拟路径和物理路径的映射关系运维

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

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

    • 同步 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/

4、特色

  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

5、小结

将hadoop经常使用的运维操做记录下来,方便从此的维护工做

相关文章
相关标签/搜索