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  
      <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服务地址

    <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. 启动服务

    • 同步 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常用的运维操作记录下来,方便今后的维护工作

阅读 526

大数据之路
2017年-2018年:北京滴滴出行科技有限公司2018年-2019年:广州多益网络股份有限公司2020年:华为

2017年-2018年:北京滴滴出行科技有限公司

12 声望
0 粉丝
0 条评论

2017年-2018年:北京滴滴出行科技有限公司

12 声望
0 粉丝
宣传栏