集群管理
- 一、格式化
- 一旦集群搭建成功,不能直接二次格式化,会出现一个问题: 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%