一.几种常见的hdfs命令
1.dfsadmin run a DFS admin client
其中最常用的一个参数是safemode 安全模式
hdfs dfsadmin -safemode <enter | leave | get | wait> 安全模式 这个命令当中,我们常用的是enter和leave。首先什么是安全模式,就是只读模式。所以我们一般在生产中什么场景下使用呢?
如果我们是手工进入到这个安全模式的话,其他用户只能读取里面的数据,而不能添加写入或者修改。这个时候我们一般是生产维护的过程,比如进行数据迁移,备份等。等完事后再解除安全模式
如果是系统自动进入到安全模式的话就说明我们的hdfs可能出现问题了,这个时候我们也分为两种操作:a,手动的输入命令hdfs dfsadmin -safemode leave这个命令,如果能正常退回普通模式的话就没有问题了。b,如果手工输入命令后还是不能返回普通模式的话,说明NN节点受损了,这个时候我们要仔细第阅读NN节点的log日志来排查可能的问题。
当进入到safemode模式后,系统提示Safe mode is ON这个提示,然后我就不能put文件上去了,当我退出以后就可以了。另外在safe模式下是可以从hadoop上面get文件下来的,但不能moveToLocal这个中命令,你只能copy下来本地。
所以一般情况下安全模式是关闭的 Safe mode is off
2.fsck run a DFS filesystem checking utility
fsck命令,用于检查HDFS上文件和目录的健康状态、获取文件的block信息和位置信息等。
3.dfs run a filesystem command on the file system
常见的dfs命令见笔记三
4.namenode run the DFS namenode
hdfs namenode -format 格式化namenode
二.设置回收站功能
在/home/wolf/app/hadoop/etc/hadoop/core-site.xml 文件最后增加
<property>
<name>fs.trash.interval</name> --这句话意识添加文件清除间隔
<value>10080</value> --这里设置间隔时间 单位是分钟(10080就是7天)
</property>
接着我们试验一下
首先在hdfs上创建两个文件夹test1 test2
bin/hdfs dfs -mkdir -p delete/test1
bin/hdfs dfs -mkdir -p delete/test2
我们可以看到hdfs上已经有了
然后删除test1
[wolf@wolf hadoop]$ bin/hdfs dfs -rm -r delete/test1
2022-03-20 16:29:26,026 INFO fs.TrashPolicyDefault: Moved: 'hdfs://wolf:9000/user/wolf/delete/test1' to trash at: hdfs://wolf:9000/user/wolf/.Trash/Current/user/wolf/delete/test1
弹出info 信息 它提示我test1文件被移动到了.Trash 文件夹下
然后我们看一下是否移动到了.Trash 文件夹下
[wolf@wolf hadoop]$ bin/hdfs dfs -ls /user/wolf/.Trash/Current/user/wolf/delete
Found 1 items
drwxr-xr-x - wolf supergroup 0 2022-03-20 16:22 /user/wolf/.Trash/Current/user/wolf/delete/test1
确实已经是移动到了.Trash 文件夹
所以回收站功能就是把一个文件移动到另一个.Trash文件里,然后每隔一段时间自动删除
当然,hdfs也提供了另一种删除方式,即跳过回收站直接删除,我们以test2文件夹为例
[wolf@wolf hadoop]$ bin/hdfs dfs -rm -r -skipTrash delete/test2
Deleted delete/test2
然后我们再去.Trash 文件夹下看看
[wolf@wolf hadoop]$ bin/hdfs dfs -ls /user/wolf/.Trash/Current/user/wolf/delete
Found 1 items
drwxr-xr-x - wolf supergroup 0 2022-03-20 16:22 /user/wolf/.Trash/Current/user/wolf/delete/test1
仍然只有test1,所以加上-skipTrash 就会直接删除,严禁在生产上使用!!!
三.hdfs参数学习路径
打开Hadoop官网
https://hadoop.apache.org/docs/stable/
左边一栏 Configuration 下都是参数文件,里面有很多详细的介绍
四.hdfs主从架构
1.hdfs进程介绍
(1)NameNode 名称节点 (主)
(2)DataNode 数据节点 (从)
(3) SecondaryNameNode第二名称节点
1.NameNode
主要存储的内容是:
1、文件名称
2、文件目录结构
3、文件属性 (权限, 副本数,创建时间)
4、文件对应数据块,数据块对应分布在哪些DN节点上列表
管理文件系统的命名空间,其实就是维护文件系统树的文件和文件夹
我们进入到/home/wolf/tmp/dfs/name/current 下 会看到两种文件
fsimage:镜像文件
edits:编辑日志文件
他们的作用方式如下图
2.SecondaryNameNode
1.存储:命名空间镜像fsimage + 编辑日志editlog
2.作用:定期合并fsimage+editlog 为新的fsimage推送给NN
我们进入到/home/wolf/tmp/dfs/namesecondary/current 也会看到两种文件
他们的作用方式如下图
例如:edits_0000000000000000355-0000000000000000356和fsimage_0000000000000000356
通过检查节点(checkpoint)合并fsimage_0000000000000000368 并推给NN
正在记录的edits_inprogress_0000000000000000357
写满或者到一定时间会放入edits_0000000000000000355-0000000000000000356
再新建edits_0000000000000000357-0000000000000000368
循环往复
写满或者一定时间会放入
dfs.namenode.checkpoint.period 3600 秒 1小时
dfs.namenode.checkpoint.txns 1000000 100万
正因为secondarynamenode 是每隔一小时才备份一下 所以一旦NN发生故障,其实是有一部分数据是没法恢复的(比如9点 NN和SN是一样的 但是9点30发生故障 SN也只有9点的数据)所以SN有一定局限性,为此我们采用
HA方案
HA是Highly Available缩写,是双机集群系统简称,提高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。即一个是active NN 一个是backup NN。同时往两个NN节点写,但是只用一个。
3.DataNode
1、读写文件的数据块,存储数据块和数据块的元数据 一个块默认128M
2、与NameNode通信
每隔一段时间会发送blockreport(块报告)给到NN
dfs.blockreport.intervalMsec 21600=6h
在给NN发送blockreport(块报告)要检查自己
dfs.datanode.directoryscan.interval 21600=6h
这两个参数一般设置为一样的
五.HDFS优缺点
1、HDFS 优点:
(1) 高容错性
- 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
- 某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。
(2) 适合批处理
- 它是通过移动计算而不是移动数据。
- 它会把数据位置暴露给计算框架。
(3) 适合大数据处理
- 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。
- 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
- 节点规模:能够处理10K节点的规模。
(4) 流式数据访问
- 一次写入,多次读取,不能修改,只能追加。
- 它能保证数据的一致性。
(5) 可构建在廉价机器上
- 它通过多副本机制,提高可靠性。
- 它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。
2、 HDFS 缺点:
(1) 不适合低延时数据访问;
- 比如毫秒级的来存储数据,这是不行的,它做不到。
- 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是它在低延时的情况 下是不行的,比如毫秒级以内读取数据,这样它是很难做到的。
改进策略
(2) 无法高效的对大量小文件进行存储
- 存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
- 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。 改进策略
(3) 并发写入、文件随机修改
- 一个文件只能有一个写,不允许多个线程同时写。
- 仅支持数据 append(追加),不支持文件的随机修改。