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年存储量 ,避免后期加磁盘维护的工作量