集群管理

  • 一、格式化
  • 一旦集群搭建成功,不能直接二次格式化,会出现一个问题: NameNode的集群ID与DataNode的集群ID不一致
  • 怎么解决
  • 二、dfsadmin
  • [-report -live [-decommissioning]]:`打印集群当前的状态`
  • [-safemode


一、格式化

hdfs  namenode -format
  • 功能
  • 初始化集群,生成唯一的集群ID
  • 为NameNode构建初始的元数据

一旦集群搭建成功,不能直接二次格式化,会出现一个问题: NameNode的集群ID与DataNode的集群ID不一致

  • 原因
  • 第一次格式化
  • NameNode产生一个集群ID:abcd
  • DataNode第一次连接向NameNode 注册成功,也获取这个集群ID
  • 所有的DataNode的集群ID也是abcd
  • 当前整个集群的ID都是一致的
  • 下次DataNode启动必须校验集群ID是否相等,如果与NameNode 的集群ID不一致,注册不成功
  • 第二次格式化
  • NameNode产生一个新的集群ID:efgh
  • 启动DataNode向NameNode进行注册 ,所有DataNode全部注册失败
  • 集群ID不一致

怎么解决

  • 方案一:手动的将所有DataNode的集群id修改与NameNode的ID一致
  • 方案二:先清除hadoopDatas中所有的数据【集群id就保存在这个目录下】,重新再格式化一遍即可

二、dfsadmin

集群管理员才能执行的管理操作

[-report -live [-decommissioning]]:打印集群当前的状态

[-safemode <enter | leave | get | wait>]:HDFS的安全模式

hdfs  dfsadmin -safemode leave

强制退出安全模式

  • 作用:每次集群启动,都会先进入安全模式,类似于电脑启动自检,检查是否有数据丢失
  • 如果有数据丢失,超过一定比例99.9%,数据丢失比例大于0.1%,自动进入安全模式
  • 进行数据恢复,直到数据恢复大于99.9%
  • 特点
  • 安全模式下,不允许写入
  • 只能读取

[-refreshNodes]:重新加载所有的节点信息

  • 添加一台DataNode,或者下线一台DataNode
  • 及时更新集群的状态

[-setQuota]:限制某个 目录下最多存储的文件个数,设置为N,最多存N-1

  • 举例
hdfs dfs -setQuota 3  /wordcount

wordcount这个目录下最多存储2个文件
这个个数是包含自己的

[-clrQuota]:清除个数限制

[-setSpaceQuota]:限制某个目录下最多存储的数据的大小

  • 这个设置的值最小为:块的大小128M*副本个数3,最少设置384M
  • 如果你要存储一个200M的文件,应该设置多少
  • 200M两个块,256M *3 = 768M
  • 至少设置768M,才能存储这个200M的文件
    按照块的大小来划分空间,但是存储按照实际大小存储

[-clrSpaceQuota]:清除空间限制

三、haadmin:

用于手动实现ha高可用 集群的管理

  • 高可用:两个NameNode,一个是active,一个是standby备份状态

[-getServiceState ]: 获取当前两个namenode彼此的状态

[-transitionToActive [–forceactive]]:将standby切换为active

[-transitionToStandby ]:将active切换为standby

四、fsck:用于检查文件系统是否正常,是否有数据块丢失

五、balancer:实现DataNode负载均衡

datanode01:10TB
datanode02:2TB
datanode03:4TB

这样的存储分布不均衡,大部分的读写请求大概率的情况下都会读写node01 sbin/start-balancer.sh:运行这个脚本,让每台DataNode之间的存储相对均衡

datanode01:6TB
datanode02:5TB
datanode03:5TB
彼此之间的差值,不超过10%