HDFS 简介二

建议初学者先看简介一。

集群的安全模式

NameNode启动时,首先将映像文件(fsimage载入内存,并执行编辑日志(edits中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时NameNode开始监听DataNode请求。但是此刻,NameNode运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。
系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息NameNode了解到足够多的块位置信息之后,即可高效运行文件系统。
如果满足最小副本条件NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。

集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
bin/hdfsdfsadminsafemodeget 查看安全模式状态
bin/hdfsdfsadminsafemodeenter 进入安全模式状态
bin/hdfsdfsadminsafemodeleave 离开安全模式状态
bin/hdfsdfsadminsafemodewait 等待安全模式状态

DataNode的工作机制

在这里插入图片描述

掉线时限参数设置

DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信,NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:
timeout=2dfs.namenode.heartbeat.recheck-interval+10dfs.heartbeat.interval。
而默认的dfs.namenode.heartbeat.recheck-interval大小为5分钟,dfs.heartbeat.interval默认为3秒。
需要注意的是hdfs-site.xml配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。
<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value> 
</property> 
<property>
   <name> dfs.heartbeat.interval </name>
   <value>3</value> 
</property>

Datanode多目录配置

datanode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本。
hdfs-site.xml
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

服役新数据节点

随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。
服务新节点具体步骤:
  1. 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件。
    vim /opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts
    hadoop122 #主节点
    hadoop123
    hadoop124
    hadoop125
  2. 在NameNode的hdfs-site.xml配置文件中增加hdfs.hosts路径
    vim hdfs-site.xml
   <property>
      <name>dfs.hosts</name>
      <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
   </property>
  1. 刷新NameNode
    hdfs dfsadmin -refreshNodes
    返回值:Refresh nodes successful

  2. 更新ResourceManager节点
    yarn rmadmin -refreshNodes
    返回值:17/06/24 14:17:11 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033

  3. 在NameNode的slaves文件中增加新主机名称

    hadoop122  #主节点
    hadoop123
    hadoop124
    hadoop125
  1. 复制分发两个配置文件,slaves文件和hdfs-site.xml配置文件(所有节点)
  2. 单独命令启动新的数据节点和节点管理器
    sbin/hadoop-daemon.sh start datanode
    sbin/yarn-daemon.sh start nodemanager
  3. 检查

退役旧数据节点

服务新节点具体步骤:
  1. 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts.exclude文件.
    vim /opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude
	hadoop125
  1. 在NameNode的hdfs-site.xml配置文件中增加hdfs.hosts路径
    vim hdfs-site.xml
	<property>
	  <name>dfs.hosts</name>
	  <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
	</property>
  1. 刷新NameNode
    hdfs dfsadmin -refreshNodes
  2. 更新ResourceManager节点
    yarn rmadmin -refreshNodes
  3. 检查web浏览器,退役节点的状态为decommission in progress(退役中)说明数据节点正在复制块到其他节点。
    在这里插入图片描述
  4. 等待退役节点状态为decommissioned所有块已经复制完成),停止该节点及节点资源管理器。
    注意:如果副本数是3服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。
    在这里插入图片描述
    在退役的旧节点上执行
    sbin/yarn-daemon.sh stop nodemanager
    sbin/hadoop-daemon.sh stop datanode
  5. 如果该节点是新增过的节点,则需要删除dfs.hosts中的要退役节点
    vim dfs.hosts
    hadoop122
    hadoop123
    hadoop124
    刷新namenode 刷新resourcemanager
    hdfs dfsadmin -refreshNodes
    yarn rmadmin -refreshNodes.
  6. 从NameNode的slave文件中删除退役节点hadoop125
    vim hdfs-site.sh
    hadoop122
    hadoop123
    hadoop124
    1. 同步slave和hdfs-site.sh文件
    2. 如果数据不均衡,可以用命令实现集群的再平衡
      sbin/start-balancer.sh

Hadoop存档

概述:
每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此Hadoop存储小文件会非常低效。因为大量的小文件会耗尽NameNode中的大部分内存。
Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少NameNode内存使用的同时,允许对文件进行透明的访问。
操作步骤:
  1. 保持yarn进程的启动
  2. 归档成一个叫xxx.har的文件夹,因为使用的 har协议。
    bin/hadoop archive -archivename myhar.har -p /user/lichao /
  3. 接归档文件
    hadoop fs -cp har:/// /user
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值