HDFS常用命令&安全模式&磁盘均衡

hdfs 常用命令

[wzj@hadoop001 ~]$ hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile … ]
[-cat [-ignoreCrc] …]
[-checksum …]
[-chgrp [-R] GROUP PATH…]
[-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…]
[-chown [-R] [OWNER][:[GROUP]] PATH…]
[-copyFromLocal [-f] [-p] [-l] … ]
[-copyToLocal [-p] [-ignoreCrc] [-crc] … ]
[-count [-q] [-h] [-v] [-x] …]
[-cp [-f] [-p | -p[topax]] … ]
[-createSnapshot []]
[-deleteSnapshot ]
[-df [-h] [ …]]
[-du [-s] [-h] [-x] …]
[-expunge]
[-find … …]
[-get [-p] [-ignoreCrc] [-crc] … ]
[-getfacl [-R] ]
[-getfattr [-R] {-n name | -d} [-e en] ]
[-getmerge [-nl] ]
[-help [cmd …]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [ …]]
[-mkdir [-p] …]

hadoop fs 等价于 hdfs dfs
命令基本都和linux类似

[wzj@hadoop001 ~]$ hadoop fs -ls /
19/12/18 17:35:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
Found 5 items
drwxr-xr-x - wzj supergroup 0 2019-12-02 14:04 /a
-rw-r–r-- 1 wzj supergroup 14 2019-12-09 16:13 /ce.log
drwx------ - wzj supergroup 0 2019-12-15 11:38 /tmp
drwxr-xr-x - wzj supergroup 0 2019-12-16 14:53 /user
drwxr-xr-x - wzj supergroup 0 2019-12-02 18:09 /wordcount

上传文件
[wzj@hadoop001 ~]$ hadoop fs -put /home/wzj/data/name.log /
19/12/18 17:38:09 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
[wzj@hadoop001 ~]$ hadoop fs -ls /
19/12/18 17:38:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
Found 6 items
drwxr-xr-x - wzj supergroup 0 2019-12-02 14:04 /a
-rw-r–r-- 1 wzj supergroup 14 2019-12-09 16:13 /ce.log
-rw-r–r-- 1 wzj supergroup 93 2019-12-18 17:38 /name.log
drwx------ - wzj supergroup 0 2019-12-15 11:38 /tmp
drwxr-xr-x - wzj supergroup 0 2019-12-16 14:53 /user
drwxr-xr-x - wzj supergroup 0 2019-12-02 18:09 /wordcount

用于检查HDFS上文件和目录的健康状态

[wzj@hadoop001 ~]$ hdfs fsck /
19/12/18 17:39:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connecting to namenode via http://hadoop001:50070/fsck?ugi=wzj&path=%2F
FSCK started by wzj (auth:SIMPLE) from /192.168.116.133 for path / at Wed Dec 18 17:39:44 CST 2019
.............Status: HEALTHY
 Total size:	476434 B
 Total dirs:	25
 Total files:	13
 Total symlinks:		0
 Total blocks (validated):	12 (avg. block size 39702 B)
 Minimally replicated blocks:	12 (100.0 %)
 Over-replicated blocks:	0 (0.0 %)
 Under-replicated blocks:	0 (0.0 %)
 Mis-replicated blocks:		0 (0.0 %)
 Default replication factor:	1
 Average block replication:	1.0
 Corrupt blocks:		0 #损坏的块
 Missing replicas:		0 (0.0 %) #丢失的副本
 Number of data-nodes:		1
 Number of racks:		1
FSCK ended at Wed Dec 18 17:39:44 CST 2019 in 27 milliseconds


The filesystem under path '/' is HEALTHY

回收站

[wzj@hadoop001 ~]$ hadoop fs -rm /name.log
19/12/18 17:44:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
Deleted /name.log
如上 删除文件并未放入回收站 回收站没有开启

通过官方core-default.xml文件了解到fs.trash.interval的参数控制是否开启回收站机制。


KEY	              VALUE	  DESC
fs.trash.interval	0	 检查点被删除的分钟数。如果为零,则禁用垃圾特性。单位秒

将下列配置参数添加到 core-site.xml

<property>
    <name>fs.trash.interval</name>
    <value>10080</value>###保存7天
</property>

切记检查生产环境是否开启回收站,CDH默认是开启的
开了回收站,慎用 -skipTrash 此命令即使开启回收站也会跳过回收站
hdfs dfs -put -skipTrash /rz.log

安全模式

安全模式是hadoop的一种保护机制,安全模式下不能进行修改文件的操作,但是可以浏览目录结构、查看文件内容的

如果NameNode log显示Name node is in safe mode,NN集群进入safe mode(安全模式),正常情况手动让其离开安全模式。

hdfs dfsadmin -safemode enter
安全模式:只对写有影响

离开安全模式的命令:hdfs dfsadmin -safemode leave
PS:安全模式不能写入数据,只能读取数据。

多节点磁盘均衡

由于各种原因导致服务器磁盘的使用不一定均衡

[wzj@hadoop001 hadoop]$ find -name “balancer
./sbin/start-balancer.sh
./sbin/stop-balancer.sh

参数threshold控制,默认threshold=10,即各个服务器保持所有服务器的磁盘占用空间的平均值上下浮动10%

例如:
90+60+80=230/3=76%
所有节点的磁盘used与集群的平均used之差要小于这个阈值
90-76=14
60-76=16
80-76=4

生产上一般设置为30m
hdfs-site.xml

<property>
    <name>dfs.datanode.balance.bandwidthPerSec</name>
    <value>30m</value>
</property>

为了避免这种不均衡,所以需要写个shell脚本,每天凌晨执行./start-balancer.sh调度一次,达到数据平衡,毛刺修正,调度执行完成自动关闭,不需要执行./stop-balancer.sh手段关闭,除非特殊情况

单节点数据均衡

默认情况下,群集上未启用磁盘平衡器,必须在hdfs-site.xml中将dfs.disk.balancer.enabled设置为true。

[wzj@hadoop001 hadoop]# vi hdfs-site.xml

<name>dfs.disk.balancer.enabled</name>
<value>true</value>

场景:
假如我们现在有三个数据盘
/data01 90%
/data02 60%
/data03 80%
现在磁盘用的差不多了,准备加入一个盘/data04 0%

需要进行单点服务器磁盘均衡

hdfs diskbalancer -plan hadoop001 生成hadoop001.plan.json
hdfs diskbalancer -execute hadoop001.plan.json 执行
hdfs diskbalancer -query hadoop001查询状态

什么时候手动或调度执行?
新盘加入
监控服务器的磁盘剩余空间小于阈值10%,发邮件预警 ,手动执行

怎么在DataNode中挂载磁盘?
由hdfs-default.xml文件的dfs.datanode.data.dir属性控制

KEY	                     VALUE	                            DESC
dfs.datanode.data.dir	file://${hadoop.tmp.dir}/dfs/data	确定DFS数据节点

应该将其块存储在本地文件系统的何处。多个目录使用逗号分隔。
假如我们现在有/data01,/data02,/data03,/data04四个目录需要挂载在该DataNode节点中

修改hdfs-site.xml文件

[wzj@hadoop001 hadoop]# vi hdfs-site.xml 
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/data01,/data02,/data03,/data04</value>
</property>

为什么DN的生产上要挂载多个物理的磁盘目录,而不是做一个raid(磁盘阵列)
为了高效率写 高效率读
注意: 提前规划好2-3年存储量 ,避免后期加磁盘维护的工作量

发布了45 篇原创文章 · 获赞 1 · 访问量 1764

猜你喜欢

转载自blog.csdn.net/wzj_wp/article/details/103601542
今日推荐