当前位置: 首页 > news >正文

HDFS数据多目录、异构存储、回收站

1.NameNode元数据多目录

HDFS集群中可以在hdfs-site.xml中配置“dfs.namenode.name.dir”属性来指定NameNode存储数据的目录,默认NameNode数据存储在${hadoop.tmp.dir}/dfs/name目录,“hadoop.tmp.dir”配置项在core-site.xml中。

我们也可以将NameNode存储元数据的目录设置为多个, 每个目录中存储内容相同,两者相当于是备份,这样可以增加元数据安全可靠性。例如:元数据目录设置2个,一个目录设置在A磁盘上,一个目录设置到B磁盘上,这样当磁盘A坏掉后,NameNode存储元数据也不会丢失。

具体配置可以按照如下步骤进行。

配置hdfs-site.xml文件

这里在node1 NameNode节点上配置dfs.namenode.name.dir,指定两个目录。

<property><name>dfs.namenode.name.dir</name><value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value></property>

分发hdfs-site.xml

如果其他节点的NameNode节点磁盘目录和node1节点一样,可以将配置好的hdfs-site.xml分发到其他节点,否则不需要分发,那么就只有node1的NameNode节点按照此配置有2个元数据目录。

这里将hdfs-site.xml分发到其他NameNode节点上(node2、node3)。

[root@node1 ~]# cd /software/hadoop-3.3.6/etc/hadoop/
[root@node1 hadoop]# scp ./hdfs-site.xml node2:`pwd`
[root@node1 hadoop]# scp ./hdfs-site.xml node3:`pwd`

删除原有集群数据

配置NameNode多数据目录需要重新格式化集群才能生效,所以在开始搭建集群的时候就要进行规划。现在已经有了HDFS集群,那么需要停止原有集群,删除原有集群zookeeper中数据和各个节点HDFS角色数据目录。

删除zookeeper中数据:

[root@node5 ~]# zkCli.sh 
[zk: localhost:2181(CONNECTED) 2] deleteall /hadoop-ha

node1~node5各个节点删除角色数据目录:

#node1~node5 节点上删除NameNode和DataNode数据目录
rm -rf /opt/data/hadoop/#node3~node5 节点上删除JournalNode数据目录
rm -rf /opt/data/journal

重新格式化集群

#在node3,node4,node5节点上启动zookeeper
zkServer.sh start#在node1上格式化zookeeper
[root@node1 ~]# hdfs zkfc -formatZK#在每台journalnode中启动所有的journalnode,这里就是node3,node4,node5节点上启动
hdfs --daemon start journalnode#在node1中格式化namenode,只有第一次搭建做,以后不用做
[root@node1 ~]# hdfs namenode -format#在node1中启动namenode,以便同步其他namenode
[root@node1 ~]# hdfs --daemon start namenode#高可用模式配置namenode,使用下列命令来同步namenode(在需要同步的namenode中执行,这里就是在node2、node3上执行):
[root@node2 software]# hdfs namenode -bootstrapStandby
[root@node3 software]# hdfs namenode -bootstrapStandby

通过HDFS WebUI查看NameNode存储目录信息:

2. DataNode 数据多目录

DataNode负责存储HDFS数据,HDFS中数据默认存储在各个DataNode节点file://${hadoop.tmp.dir}/dfs/data 路径中,可以通过hdfs-site.xml文件中的参数hadoop.tmp.dir来配置,我们也可以给该参数配置多个路径,不同路径挂载到不同磁盘来解决datanode存储空间不足问题。

需要注意:hadoop.tmp.dir 设置多个路径后不需重新格式化HDFS集群,只需要重启即可生效。此外,DataNode多个路径中数据并不是副本关系,而是不同目录存储不同数据。

配置hdfs-site.xml文件

这里在node3 DataNode节点上配置dfs.datanode.data.dir,指定两个目录。

<property><name>dfs.datanode.data.dir</name><value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2</value></property>

分发hdfs-site.xml

如果其他节点的DataNode节点磁盘目录和node3节点一样,可以将配置好的hdfs-site.xml分发到其他节点,否则不需要分发,那么就只有node3的DataNode节点按照此配置有2个数据目录。

这里将hdfs-site.xml分发到其他DataNode节点上(node4、node5)。

[root@node3 ~]# cd /software/hadoop-3.3.6/etc/hadoop/
[root@node3 hadoop]# scp ./hdfs-site.xml node4:`pwd`
[root@node3 hadoop]# scp ./hdfs-site.xml node5:`pwd`

重启集群并检查DataNode数据目录

#重启集群
[root@node1 ~]# stop-all.sh
[root@node1 ~]# start-all.sh#每台DataNode节点检查数据目录,可以看到data1、data2目录
ls /opt/data/hadoop/dfs/
data  data1  data2  name1  name2

HDFS WebUI查看每个DataNode节点的数据存储路径如下:

 

测试

向HDFS中存储数据时,HDFS会自动均衡负载(轮询方式)决定将数据块存储在哪个目录中。此外,我们还可以配置HDFS每个目录的存储策略,决定将不同HDFS 目录的数据存储在不同的DataNode磁盘目录中,详细参考“HDFS 异构存储”小节。

例如将如下data.txt数据上传至HDFS:

#data.txt数据
1,zs
2,ls
3,ww
4,ml
5,tq[root@node5 ~]# hdfs dfs -put ./data.txt /

以上数据文件上传至HDFS后,可以看到只有一个block,3个副本,默认block数据存储在各个DataNode节点的data1目录下

[root@node3 subdir0]#  ll /opt/data/hadoop/dfs/data1/current/BP-187707191-192.168.179.4-1715610189467/current/finalized/subdir0/subdir0
blk_1073741825 blk_1073741825_1001.meta

movieData.txt大文件上传至HDFS后,该文件会产生3个block ,3个block分别按照轮询方式存储在data1和data2目录中:

[root@node3 ~]# ls /opt/data/hadoop/dfs/data1/current/BP-187707191-192.168.179.4-1715610189467/current/finalized/subdir0/subdir0
blk_1073741825 blk_1073741825_1001.meta blk_1073741827 blk_1073741827_1003.meta blk_1073741829 blk_1073741829_1005.meta[root@node3 ~]# ls /opt/data/hadoop/dfs/data2/current/BP-187707191-192.168.179.4-1715610189467/current/finalized/subdir0/subdir0
blk_1073741826 blk_1073741826_1002.meta blk_1073741828 blk_1073741828_1004.meta

3.HDFS异构存储

在Hadoop中,异构存储指的是根据数据的使用模式和特性,将数据分配到不同类型或特性的存储介质上。在企业中,HDFS中的数据根据使用频繁程度分为不同类型,这些类型包括热、温、冷数据,我们可以通过异构存储将不同类型数据根据存储策略存储在不同的介质中,例如:将不活跃或冷数据存储在成本较低的设备上(机械硬盘),而将活跃数据存储在性能更高的设备上(固态硬盘SSD),这样的存储策略通过平衡性能、成本和数据访问模式,提高了数据存储的效率和经济性。

异构存储是Hadoop2.6.0版本引入的特性,使得在存储数据时可以更好地利用不同存储介质的优势,从而提高整个系统的性能和灵活性。

3.1数据存储类型及存储策略

HDFS中数据存储类型有如下几种:

  • DISK:DISK存储类型表示数据存储在普通机械硬盘上,默认的存储类型
  • ARCHIVE:ARCHIVE存储类型通常用于归档数据,这些归档数据通常以压缩文件方式长期存储,具备存储密度高、不经常访问的特点,例如:历史备份数据。这类数据存储介质一般可选普通磁盘。
  • SSD:SSD存储类型表示数据存储在固态硬盘上,相比于传统的机械硬盘,SSD具有更快的读写速度和更低的访问延迟。
  • RAM_DISK:RAM_DISK存储类型表示数据存储在内存中模拟的硬盘中,由于内存的读写速度非常快,因此RAM_DISK存储类型通常用于对数据访问速度要求非常高的场景。

我们可以在hdfs-site.xml中配置dfs.datanode.data.dir配置项给DataNode配置数据存储目录,这些目录可以配置多个并可以指定以上不同的存储类型。当向HDFS中写入数据时,哪些数据存储在对应的存储类型中就需要根据HDFS中目录的存储策略来决定,这些存储策略需要用户来执行对应命令来指定。

HDFS中支持如下不同的存储策略:

以上表格有如下两点解释:

  • PROVIDED存储策略指的是在HDFS之外存储数据。LAZY_PERSIST存储策略指Block副本首先写在RAM_DISK中,然后惰性的保存在磁盘中。
  • #3列表示该策略下Block的分别,例如:“[SSD, DISK]”表示第一个block块存储在SSD存储类型中,其他block块存储在 DISK 存储类型中。
  • 关于#4列和#5列的解释如下:当#3列数据存储介质有足够的空间时,block存储按照#3指定的进行存储,如果空间不足,创建新文件和数据副本将按照#4和#5列中指定的介质存储。
  • HOT存储策略是默认的存储策略。常用的存储策略有COLD、WARN、HOT、ONE_SSD、ALL_SSD几种。

3.2HDFS存储类型配置

HDFS数据存储在DataNode中,设置HDFS存储类型与DataNode数据多目录设置一样,直接通过hdfs-site.xml文件中的参数hadoop.tmp.dir来配置,可以在目录前面指定“DISK、ARCHIVE、SSD、RAM_DISK”不同的存储类型,如果不配置默认所有存储类型为DISK。

在现有HDFS集群中,DataNode节点有3个(node3~node5),分别给每个DataNode节点设置多目录,并在不同的DataNode节点中给不同目录指定不同的存储类型。

hadoop.tmp.dir 设置多个路径后不需重新格式化HDFS集群,只需要重启即可生效。

按照如下步骤给DataNode设置多个存储磁盘路径及存储类型。

开启存储策略功能

在所有HDFS DataNode节点上,配置hdfs-site.xml文件中“dfs.storage.policy.enabled”配置项为true,该值默认为true,表示开启HDFS存储策略功能。

在node3~node5所有DataNode节点上配置hdfs-site.xml:

<property><name>dfs.storage.policy.enabled</name><value>true</value></property>

配置hdfs-site.xml文件

修改node3 DataNode节点上hdfs-site.xml中配置项dfs.datanode.data.dir,指定两个目录存储类型为DISK和ARCHIVE。

<property><name>dfs.datanode.data.dir</name><value>[DISK]file://${hadoop.tmp.dir}/dfs/disk,[ARCHIVE]file://${hadoop.tmp.dir}/dfs/archive</value></property>

修改node4 DataNode节点上hdfs-site.xml中配置项dfs.datanode.data.dir,指定两个目录存储类型为ARCHIVE和SSD。

<property><name>dfs.datanode.data.dir</name><value>[ARCHIVE]file://${hadoop.tmp.dir}/dfs/archive,[SSD]file://${hadoop.tmp.dir}/dfs/ssd</value></property>

修改node5 DataNode节点上hdfs-site.xml中配置项dfs.datanode.data.dir,指定两个目录存储类型为SSD和RAM_DISK。

<property><name>dfs.datanode.data.dir</name><value>[SSD]file://${hadoop.tmp.dir}/dfs/ssd,[DISK]file://${hadoop.tmp.dir}/dfs/disk</value></property>

 重启集群并检查DataNode数据目录

#重启集群
[root@node1 ~]# stop-all.sh
[root@node1 ~]# start-all.sh#node3 DataNode节点检查数据目录,可以看到disk、archive目录
[root@node3 hadoop]# ls /opt/data/hadoop/dfs/
archive  data  data1  data2  disk  name1  name2#node4 DataNode节点检查数据目录,可以看到archive、ssd目录
[root@node4 hadoop]# ls /opt/data/hadoop/dfs/
archive  data  data1  data2  ssd#node5 DataNode节点检查数据目录,可以看到ssd、ramdisk目录
[root@node5 hadoop]# ls /opt/data/hadoop/dfs/
data  data1  data2  ramdisk  ssd

通过HDFS WebUI查看每个DataNode节点的数据存储路径,由于给每个DataNode配置了新的数据目录,原有HDFS中的数据文件会找不到原来数据的block信息,出现如下提示:

解决以上问题,只需要执行删除损坏文件block命令即可:

#查看缺失文件block
[root@node5 hadoop]# hdfs fsck /
... ...
/data.txt: MISSING 1 blocks of total size 25 B.
/movieData.txt: MISSING 3 blocks of total size 269317754 B.
... ...#删除缺失的文件,正常文件不会被删除
[root@node5 hadoop]# hdfs fsck  / -delete

HDFS WebUI查看每个DataNode节点的数据存储路径如下:

 

 

 3.3存储策略操作命令

列出HDFS支持的存储策略

[root@node5 ~]# hdfs storagepolicies -listPolicies
Block Storage Policies:BlockStoragePolicy{PROVIDED:1, storageTypes=[PROVIDED, DISK], creationFallbacks=[PROVIDED, DISK], replicationFallbacks=[PROVIDED, DISK]}BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}BlockStoragePolicy{ONE_SSD:10, storageTypes=[SSD, DISK], creationFallbacks=[SSD, DISK], replicationFallbacks=[SSD, DISK]}BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}BlockStoragePolicy{LAZY_PERSIST:15, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}

B. 测试默认的存储策略HOT

在HDFS中创建目录 data,并查询该data目录的默认存储策略,可以通过命令“hdfs storagepolicies -getStoragePolicy -path <path>”来查询对应路径的存储策略。

#创建data目录,并查询存储策略
[root@node5 ~]# hdfs dfs -mkdir /data[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /data/
The storage policy of /data/ is unspecified

将上文中data.txt文件上传至HDFS /data目录下,然后通过“hdfs fsck -files -blocks -locations ”命令查询文件对应的block位置信息。

#上传
[root@node5 ~]# hdfs dfs -put ./data.txt  /data/#查询
[root@node5 ~]# hdfs fsck /data/data.txt -files -blocks -locations
/data/data.txt 25 bytes, replicated: replication=3, 1 block(s):  OK
0. BP-187707191-192.168.179.4-1715610189467:blk_1073741837_1013 len=25 Live_repl=3  [DatanodeInfoWithStorage[192.168.179.6:9866,DS-5f383d24-b137-
4208-b63f-01ff76f44394,DISK], DatanodeInfoWithStorage[192.168.179.8:9866,DS-6a5907f2-3065-4ea6-a097-70e2b3be4f5e,DISK], DatanodeInfoWithStorage[192.168.179.7:9866,DS-ac3a21d4-5503-4c39-bf63-fe1bc596d1c5,ARCHIVE]]

默认认的文件存储策略为HOT,将block数据存储在DISK存储类型中,由于集群中node3、node5节点有DISK存储类型,所以其Block副本会存在node3和node5节点,剩余一个block副本会根据“后备创建副本存储类型”选择ARCHIVE存储类型的节点node4。也可以通过HDFS WebUI查看对应的文件block所在的节点信息。

C. 创建HDFS路径并指定存储策略

下面对常用的COLD、WARN、HOT、ONE_SSD、ALL_SSD存储策略进行测试。创建HDFS 如下5个路径并给5个目录指定对应的存储策略存储热、温、冷等其他数据,给HDFS路径指定存储策略的命令为:hdfs storagepolicies -setStoragePolicy -path <Path> -policy <Policy> 。

#创建hot 、warm、cold 、onessd、allssd五个HDFS目录
[root@node5 ~]# hdfs dfs -mkdir /hot
[root@node5 ~]# hdfs dfs -mkdir /warm
[root@node5 ~]# hdfs dfs -mkdir /cold
[root@node5 ~]# hdfs dfs -mkdir /onessd
[root@node5 ~]# hdfs dfs -mkdir /allssd#给以上5个路径指定对应的存储策略
[root@node5 ~]# hdfs storagepolicies -setStoragePolicy -path /hot -policy HOT
[root@node5 ~]# hdfs storagepolicies -setStoragePolicy -path /warm -policy WARM
[root@node5 ~]# hdfs storagepolicies -setStoragePolicy -path /cold -policy COLD
[root@node5 ~]# hdfs storagepolicies -setStoragePolicy -path /onessd -policy ONE_SSD
[root@node5 ~]# hdfs storagepolicies -setStoragePolicy -path /allssd -policy ALL_SSD#再次查询5个路径的存储策略
[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /hot
[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /warm
[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /cold
[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /onessd
[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /allssd

将data.txt上传到HDFS /hot、/warm、/cold、/onessd、/allssd目录下:

[root@node5 ~]# hdfs dfs -put ./data.txt /hot
[root@node5 ~]# hdfs dfs -put ./data.txt /warm
[root@node5 ~]# hdfs dfs -put ./data.txt /cold
[root@node5 ~]# hdfs dfs -put ./data.txt /onessd
[root@node5 ~]# hdfs dfs -put ./data.txt /allssd

再次查看这些目录下data.txt文件 block的位置信息:

[root@node5 ~]# hdfs fsck /hot/data.txt -files -blocks -locations
/hot/data.txt 25 bytes, replicated: replication=3, 1 block(s):  OK
0. BP-187707191-192.168.179.4-1715610189467:blk_1073741838_1014 len=25 Live_repl=3  [DatanodeInfoWithStorage[192.168.179.6:9866,DS-5f383d24-b137-
4208-b63f-01ff76f44394,DISK], DatanodeInfoWithStorage[192.168.179.8:9866,DS-6a5907f2-3065-4ea6-a097-70e2b3be4f5e,DISK], DatanodeInfoWithStorage[192.168.179.7:9866,DS-ac3a21d4-5503-4c39-bf63-fe1bc596d1c5,ARCHIVE]][root@node5 ~]# hdfs fsck /warm/data.txt -files -blocks -locations
/warm/data.txt 25 bytes, replicated: replication=3, 1 block(s):  OK
0. BP-187707191-192.168.179.4-1715610189467:blk_1073741839_1015 len=25 Live_repl=3  [DatanodeInfoWithStorage[192.168.179.7:9866,DS-ac3a21d4-5503-
4c39-bf63-fe1bc596d1c5,ARCHIVE], DatanodeInfoWithStorage[192.168.179.6:9866,DS-f82bc144-22db-43da-9829-6bbf5abf301b,ARCHIVE], DatanodeInfoWithStorage[192.168.179.8:9866,DS-6a5907f2-3065-4ea6-a097-70e2b3be4f5e,DISK]][root@node5 ~]# hdfs fsck /cold/data.txt -files -blocks -locations
/cold/data.txt 25 bytes, replicated: replication=3, 1 block(s):  Under replicated BP-187707191-192.168.179.4-1715610189467:blk_1073741840_1016. T
arget Replicas is 3 but found 2 live replica(s), 0 decommissioned replica(s), 0 decommissioning replica(s).0. BP-187707191-192.168.179.4-1715610189467:blk_1073741840_1016 len=25 Live_repl=2  [DatanodeInfoWithStorage[192.168.179.7:9866,DS-ac3a21d4-5503-
4c39-bf63-fe1bc596d1c5,ARCHIVE], DatanodeInfoWithStorage[192.168.179.6:9866,DS-f82bc144-22db-43da-9829-6bbf5abf301b,ARCHIVE]][root@node5 ~]# hdfs fsck /onessd/data.txt -files -blocks -locations
/onessd/data.txt 25 bytes, replicated: replication=3, 1 block(s):  OK
0. BP-187707191-192.168.179.4-1715610189467:blk_1073741841_1017 len=25 Live_repl=3  [DatanodeInfoWithStorage[192.168.179.7:9866,DS-4195284f-9608-
4851-9155-861348a90aad,SSD], DatanodeInfoWithStorage[192.168.179.6:9866,DS-5f383d24-b137-4208-b63f-01ff76f44394,DISK], DatanodeInfoWithStorage[192.168.179.8:9866,DS-f2eac39b-64ba-4237-85e8-b8f1957f2753,SSD]][root@node5 ~]# hdfs fsck /allssd/data.txt -files -blocks -locations
/allssd/data.txt 25 bytes, replicated: replication=3, 1 block(s):  OK
0. BP-187707191-192.168.179.4-1715610189467:blk_1073741842_1018 len=25 Live_repl=3  [DatanodeInfoWithStorage[192.168.179.7:9866,DS-4195284f-9608-
4851-9155-861348a90aad,SSD], DatanodeInfoWithStorage[192.168.179.6:9866,DS-5f383d24-b137-4208-b63f-01ff76f44394,DISK], DatanodeInfoWithStorage[192.168.179.8:9866,DS-f2eac39b-64ba-4237-85e8-b8f1957f2753,SSD]]

注意:以上COLD存储策略中数据文件只有2个block,主要原因是只有2个节点配置了ARCHIVE存储类型。此外,如果使用COLD存储策略,由于其block都会存储在ARCHIVE存储类型中,需要保证集群中DataNode节点有该存储类型,否则上传文件会报错。

D. 取消存储策略

取消目录的存储策略可以使用命令:hdfs storagepolicies -unsetStoragePolicy -path ,下面对allssd目录取消存储策略,操作如下:

#查询allssd目前的存储策略
[root@node5 ~]# hdfs storagepolicies -getStoragePolicy -path /allssd
The storage policy of /allssd:
BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}#取消该目录的存储策略
[root@node5 ~]# hdfs storagepolicies -unsetStoragePolicy -path /allssd
Unset storage policy from /allssd#再次查询allssd存储策略
[root@node5 ~]#  hdfs storagepolicies -getStoragePolicy -path /allssd
The storage policy of /allssd is unspecified

4. Trash回收站

HDFS中提供了类似window回收站的功能,当我们在HDFS中删除数据后,默认数据直接删除,如果开启了Trash回收站功能,数据删除时不会立即清除,而是会被移动到回收站目录中(/usr/${username}/.Trash/current),如果误删了数据,可以通过回收站进行还原数据,此外,我们还可以配置该文件在回收站多长时间后被清空。

按照如下步骤进行回收站配置即可。

1) 修改core-site.xml

在HDFS各个节点上配置core-site.xml,加入如下配置:

... ...  <!-- 回收站文件存活时长 --><property>  <name>fs.trash.interval</name>  <value>1</value>  </property>  <!-- 检查回收站间隔时间 --><property>  <name>fs.trash.checkpoint.interval</name>  <value>0</value>
</property>
... ...

以上参数“fs.trash.interval”默认值为0,表示禁用回收站功能,设置大于0的值表示开启回收站并指定了回收站中文件存活的时长(单位:分钟)。

“fs.trash.checkpoint.interval”参数表示检查回收站文件间隔时间,如果设置为0表示该值和“fs.trash.interval”参数值一样,要求该值配置要小于等于“fs.trash.interval”配置值。

将以上配置文件分发到其他HDFS节点上:

[root@node1 hadoop]# scp ./core-site.xml node2:`pwd`
[root@node1 hadoop]# scp ./core-site.xml node3:`pwd`
[root@node1 hadoop]# scp ./core-site.xml node4:`pwd`
[root@node1 hadoop]# scp ./core-site.xml node5:`pwd`

2) 重启HDFS集群,测试回收站功能

#启动集群
[root@node1 ~]# start-all.sh#上传文件到HDFS 根路径下
[root@node5 ~]# hdfs dfs -put ./data.txt /#删除上传的data.txt文件
[root@node5 ~]# hdfs dfs -rm -r /data.txt
INFO fs.TrashPolicyDefault: Moved: 'hdfs://mycluster/data.txt' to trash at: hdfs://mycluster/user/root/.Trash/Current/data.txt

当执行删除命令后,可以看到数据被移动到“hdfs://mycluster/user/root/.Trash/Current/”目录下,通过HDFS WebUI也可看到对应的路径下文件。如果WebUI用户没有权限,可以通过给/user目录修改访问权限即可。

#修改/user目录访问权限
[root@node5 ~]# hdfs dfs -chmod -R 777 /user

 

大约等待1分钟左右数据会自动从回收站中清空。如果想要还原数据需要手动执行命令将数据move移动到对应目录中。

[root@node5 ~]# hdfs dfs -mv /user/root/.Trash/Current/data.txt /

注意:只有通过HDFS shell操作命令将数据文件删除后,才会进入回收站,如果在HDFS WebUI中删除文件,这种删除操作不会进入到回收站。

相关文章:

HDFS数据多目录、异构存储、回收站

1.NameNode元数据多目录 HDFS集群中可以在hdfs-site.xml中配置“dfs.namenode.name.dir”属性来指定NameNode存储数据的目录&#xff0c;默认NameNode数据存储在${hadoop.tmp.dir}/dfs/name目录&#xff0c;“hadoop.tmp.dir”配置项在core-site.xml中。 我们也可以将NameNod…...

windows设置暂停更新时长

windows设置暂停更新时长 win11与win10修改注册表操作一致 &#xff0c;系统界面不同 1.打开注册表 2.在以下路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键新建 DWORD 32位值&#xff0c;名称为FlightSettingsMaxPauseDays 根据需求填写数…...

04 路由表的IP分组传输过程

目录 1、路由表的核心结构 2、IP分组传输过程和数据包转发过程 2.1、IP分组传输过程 2.2、数据包转发过程 2.3、IP分组传输过程和数据包转发的区别 3、数据包的变化 3.1、拓扑结构 3.2、传输过程详解&#xff08;主机A → 主机B&#xff09; 3.2.1、主机A发送数据 3.2…...

实现Python+Django+Transformers库中的BertTokenizer和BertModel来进行BERT预训练,并将其应用于商品推荐功能

一、环境安装准备 #git拉取 bert-base-chinese 文件#创建 虚拟运行环境python -m venv myicrplatenv#刷新source myicrplatenv/bin/activate#python Django 集成nacospip install nacos-sdk-python#安装 Djangopip3 install Django5.1#安装 pymysql settings.py 里面需要 # 强制…...

数据结构---定长顺序表

1.线性表的定义 存在唯一的一个被称为“第一个”的数据元素&#xff1b;存在唯一的一个被称为“最后一个”的数据元素&#xff1b;除第一个之外&#xff0c;集合中的每一个数据元素都只有一个前驱&#xff1b;除最后一个之外&#xff0c;集合中的每一个数据元素都只有一个后继…...

Elasticsearch 相关面试题

1. Elasticsearch基础 Elasticsearch是什么&#xff1f; Elasticsearch是一个分布式搜索引擎&#xff0c;基于Lucene实现。 Mapping是什么&#xff1f;ES中有哪些数据类型&#xff1f; Mapping&#xff1a;定义字段的类型和属性。 数据类型&#xff1a;text、keyword、integer、…...

冒泡排序(Bubble Sort)详细教程:Java实现与优化

一、什么是冒泡排序&#xff1f; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它的基本思想是通过两两比较相邻元素&#xff0c;将较大的元素“冒泡”到数列的末尾。每一轮遍历会将一个较大的元素放到正确的位置&#xff0c;直到整个数组有序…...

【git】【reset全解】Git 回到上次提交并处理提交内容的不同方式

Git 回到上次提交并处理提交内容的不同方式 在 Git 中&#xff0c;若要回到上次提交并对提交内容进行不同处理&#xff0c;可使用 git reset 命令搭配不同选项来实现。以下为你详细介绍操作步骤及各选项的作用。 1. 查看提交历史 在操作之前&#xff0c;可通过以下命令查看提…...

矩阵的 正定(Positive Definite)与负定(Negative Definite):从Fisher信息矩阵看“曲率”的秘密

矩阵的正定与负定&#xff1a;从Fisher信息矩阵看“曲率”的秘密 在数学和统计学中&#xff0c;矩阵的“正定性”和“负定性”是一对重要概念&#xff0c;尤其在优化、统计推断和机器学习中频繁出现。比如&#xff0c;Fisher信息矩阵&#xff08;Fisher Information Matrix, F…...

Uniapp 小程序:语音播放与暂停功能的实现及优化方案

界面部分 //开启语音 <button class"open" v-if"showPlayfalse" click"playText">这是开启播放的图片</button >//关闭语音 <button class"close" v-if"showPlaytrue" click"stopText">这是…...

Python基于机器学习的微博舆情情感分析系统,微博评论情感分析可视化系统(全新升级)

大家好&#xff0c;今天为大家带来的是Python基于机器学习的微博舆情情感分析系统&#xff0c;微博评论情感分析可视化系统&#xff0c;这个系统在原本的系统上进行优化升级。 算法从开源框架的 snlow &#xff0c;到支持机器学习的 lstm 算法可以手动输入语句&#xff0c;进行…...

IP-------GRE和MGRE

4.GRE和MGRE 1.应用场景 现实场景 居家工作&#xff0c;公司工作&#xff0c;分公司工作----------需要传输交换数据--------NAT---在该场景中需要两次NAT&#xff08;不安全&#xff09; 为了安全有两种手段-----1.物理专线---成本高 2.VPN--虚拟专用网---隧道技术--封装技…...

内网综合渗透测试——WinterMute: 1靶场

靶场来源 <WinterMute: 1 ~ VulnHub> Wintermute 虚拟机网络配置指南 本实验涉及网络跳转技术&#xff0c;需正确配置VirtualBox网络。所有IP均为动态分配&#xff0c;配置快速简便。 通过"文件 >> 导入虚拟设备"导入各虚拟机。 STRAYLIGHT (网络#1 和 …...

项目进度管理工具:甘特图与关键路径法(2025实战指南)

在全球数字化转型加速的背景下&#xff0c;项目延期率高达42%的现状倒逼管理者掌握科学的进度管理工具。本文结合2025年最新实践&#xff0c;深度解析甘特图与关键路径法的原理及应用&#xff0c;助你构建精准可控的项目进度管理体系。 一、双剑合璧&#xff1a;工具组合的价值…...

deepseek-r1-centos-本地服务器配置方法

参考&#xff1a; 纯小白 Centos 部署DeepSeek指南_centos部署deepseek-CSDN博客 https://blog.csdn.net/xingxin550/article/details/145574080 手把手教大家如何在Centos7系统中安装Deepseek&#xff0c;一文搞定_centos部署deepseek-CSDN博客 https://blog.csdn.net/soso67…...

C# Unity 唐老狮 No.2 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…...

一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格&#xff0c;用于比较Flask中的…...

SpringBoot整合Mybatis-Plus+Druid实现多数据源

概述 Spring Boot&#xff1a; Spring Boot是一个基于Spring框架的开源Java开发框架&#xff0c;旨在简化Spring应用程序的开发、配置和部署。它提供了一种快速、敏捷的方式来构建独立的、生产级别的Spring应用程序&#xff0c;同时还提供了许多开箱即用的功能和工具&#xff0…...

【Mysql】我在广州学Mysql 系列—— 性能优化相关例题

ℹ️大家好&#xff0c;我是练小杰&#xff0c;时间过得真快&#xff0c;还有2天&#xff0c;2025年2月份就结束了&#xff01;&#xff01;&#x1f606; 本文是针对Mysql数据库中有关性能优化的相关示例&#xff0c;通过本文的学习可以深入了解性能优化的各类命令&#xff01…...

罗成华教授论腹膜后肿瘤核磁共振检查意义

腹膜后器官很少受生理运动的影响&#xff0c;而MRI又可进行除横断面以外的冠状面、矢状面或其它任意切面检查&#xff0c;其图像清晰&#xff0c;故其特别适用于腹膜后肿瘤的术前检查。早期经验显示MRI可提供比&#xff23;&#xff34;更多的信息&#xff0c;不用造影剂术前即…...

CSS3 圆角:实现与优化指南

CSS3 圆角&#xff1a;实现与优化指南 随着网页设计的发展&#xff0c;CSS3 圆角已经成为了现代网页设计中不可或缺的元素之一。本文将详细讲解 CSS3 圆角的基本用法、实现方式以及优化技巧&#xff0c;帮助您在网页设计中更好地运用这一功能。 一、CSS3 圆角基本用法 1.1 基…...

Windows下不建议使用C/C++运行库的本地化功能

Windows不建议setlocale或使用C的std::locale对象等C/C运行库的本地化功能&#xff0c;因为setlocale或C的std::locale对象实现bug多&#xff0c;不稳定&#xff0c;可能存在兼容性问题&#xff0c;如&#xff1a; 1、DOS/Win16下setlocale只支持"C"的locale 2、Wi…...

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…...

基于YOLO11深度学习的半导体芯片缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Python入门 — 类

面向对象编程中&#xff0c;编写表示现实世界中的事物和情景的类&#xff08;class&#xff09;&#xff0c;并基于这些类来创建对象&#xff08;object&#xff09;。根据类来创建对象称为实例化&#xff0c;这样就可以使用类的实例&#xff08;instance&#xff09; 一、创建…...

本地大模型编程实战(22)用langchain实现基于SQL数据构建问答系统(1)

使 LLM(大语言模型) 系统能够查询结构化数据与非结构化文本数据在性质上可能不同。后者通常生成可在向量数据库中搜索的文本&#xff0c;而结构化数据的方法通常是让 LLM 编写和执行 DSL&#xff08;例如 SQL&#xff09;中的查询。 我们将演练在使用基于 langchain 链 &#x…...

监听其他音频播放时暂停正在播放的音频

要实现当有其他音频播放时暂停当前音频&#xff0c;你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先&#xff0c;你需要创建一个事件总线。你可以在项目的一个公共文件中创建它&#xff0c;例如 eventBus.js…...

Docker数据卷操作实战

什么是数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录&#xff0c;它绕过 UFS&#xff0c;可以提供很多有用的特性: 数据卷 可以在容器之间共享和享用对 数据卷 的修改立马生效对 数据卷 的更新&#xff0c;不会影响镜像数据卷 默认会一直存在&#xff0c;即时容器被…...

Go中slice和map引用传递误区

背景 关于slice和map是指传递还是引用传递&#xff0c;很多文章都分析得模棱两可&#xff0c;其实在Go中只有值传递&#xff0c;但是很多情况下是因为分不清slice和map的底层实现&#xff0c;所以导致很多人在这一块产生疑惑&#xff0c;下面通过代码案例分析slice和map到底是…...

代码审计入门学习

简介 HadSky轻论坛程序为个人原创PHP系统&#xff0c;作者为蒲乐天&#xff0c;后端基于puyuetianPHP框架驱动&#xff0c;前端基于 puyuetianUI框架驱动&#xff0c;默认编辑器为puyuetianEditor富文本编辑器&#xff0c;其他非原创框架及驱动JQuery.js 及Font-Awesome字体库…...

排序算法(3):

这是我们的最后一篇排序算法了&#xff0c;也是我们的初阶数据结构的最后一篇了。 我们来看&#xff0c;我们之前已经讲完了插入排序&#xff0c;选择排序&#xff0c;交换排序&#xff0c;我们还剩下最后一个归并排序&#xff0c;我们今天就讲解归并排序&#xff0c;另外我们还…...

AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构

前言 人工智能技术的爆发式发展催生了多样化的AI模型生态&#xff0c;从通用对话到垂直领域应用&#xff0c;从数据挖掘到创意生成&#xff0c;各模型凭借其独特的技术优势与场景适配性&#xff0c;正在重塑全球产业格局。本文将以DeepSeek、ChatGPT、XAI&#xff08;可解释人…...

服务端配置TCP探活,超出探活时间后的行为?

server端启动 &#xff08;完整源码在最后&#xff09; 配置探活 setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPIDLE, &(int){5}, sizeof(int)); // 空闲60秒后探测setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPINTVL, &(int){10}, sizeof(int)); // 探测间隔10秒…...

Eclipse安装和配置环境教程包含下载、安装、汉化(附安装包)

文章目录 前言一、JDK 安装二、Eclipse IDE 安装三、Eclipse软件汉化&#xff08;可选&#xff09;四、安装完成 前言 在编程的世界里&#xff0c;一款好的开发工具能让效率大幅提升&#xff0c;Eclipse 2024 便是这样的利器。不过&#xff0c;其安装过程涉及 JDK 配置、软件本…...

nginx简单命令启动,关闭等

启动命令 #启动nginx start nginx重启命令 比如修改了配置文件&#xff0c;用这个命令重启生效 #重启nginx nginx -s reload3&#xff0c;查看端口占用 #查看端口占用 netstat -aon4&#xff0c;关闭nginx 如果使用cmd命令窗口启动nginx&#xff0c; 关闭cmd窗口是不能…...

SQL------搭建sql靶场和打开sql靶场及报错解决

搭建sql靶场 1.下载安装包与文件 在官网上下载phpstudy网址&#xff1a; http://www.xp.cn 下载sqli-labs的网址&#xff1a; https://github.com/Audi-1/sqli-labs 2.下载小皮面板 打开安装包 安装&#xff0c;记得改自己想要安装的路径 打开php版本 记得下载5.几的版本&…...

对话式AI引擎:DeepSeek技术引领多模态交互新篇章

摘要 DeepSeek技术公司推出了一项创新服务——“对话式AI引擎”&#xff0c;仅需两行代码即可激活任意大型AI模型的语音对话功能。这项技术使得文本型AI模型迅速转变为具备实时语音对话能力的多模态交互模型&#xff0c;解决了大型AI模型在语音交互方面的不足&#xff0c;为AI行…...

在什么情况下需要使用光谱相机呢?

1.需要捕捉不可见光信息时 光谱相机不仅能捕捉可见光&#xff0c;还能记录红外、紫外等波段的光谱信息。以下场景尤其适用&#xff1a; 环境监测&#xff1a;检测水质、空气污染物等肉眼无法观察的物质。 农业监测&#xff1a;分析植物的近红外反射率&#xff0c;判断作物健…...

nnUNetv2用自己的数据集训练推理

有什么不懂的大家可以在评论区问我&#xff0c;我一定会积极回复哒&#xff01;&#xff01;&#xff01; 一、环境配置 首先创建一个虚拟环境 conda create -n nnunet python3.9 conda activate nnunet 然后在pytorch官网&#xff0c;安装pytorch&#xff0c;这里我安装的是…...

std::thread的同步机制

在 C 中&#xff0c;std::thread 用于创建和管理线程。为了确保多个线程能正确、安全地访问共享资源&#xff0c;避免数据竞争和不一致问题&#xff0c;需要使用同步机制。 互斥锁&#xff08;std::mutex&#xff09; 原理&#xff1a;互斥锁是一种最基本的同步原语&#xff…...

Matplotlib 绘图标记

Matplotlib 绘图标记 引言 Matplotlib 是一个功能强大的 Python 绘图库&#xff0c;广泛用于数据可视化。在 Matplotlib 中&#xff0c;绘图标记&#xff08;markers&#xff09;是数据点在图表中显示的方式。正确的使用绘图标记可以增强图表的可读性和美观性。本文将详细介绍…...

Web3.py 入门笔记

Web3.py 学习笔记 &#x1f4da; 1. Web3.py 简介 &#x1f31f; Web3.py 是一个 Python 库&#xff0c;用于与以太坊区块链进行交互。它就像是连接 Python 程序和以太坊网络的桥梁。 官方文档 1.1 主要功能 查询区块链数据&#xff08;余额、交易等&#xff09;发送交易与…...

《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师

企业集成平台的理解与应用——论文写作框架 一、考点概述 本论题“企业集成平台的理解与应用”主要考察的是计算机软件测试工程师对于企业集成平台&#xff08;EIP&#xff09;的深入理解以及在实际项目中的应用能力。论题涵盖了以下几个核心内容&#xff1a; 首先&#xff…...

IO 和NIO有什么区别?

IO 与 NIO 的区别详解 Java 中的 IO&#xff08;Input/Output&#xff09; 和 NIO&#xff08;New IO 或 Non-blocking IO&#xff09; 是两种不同的输入输出处理机制&#xff0c;主要区别体现在设计模型、性能优化和应用场景上。以下是详细对比&#xff1a; 1. 阻塞与非阻塞模…...

音频进阶学习十六——LTI系统的差分方程与频域分析一(频率响应)

文章目录 前言一、差分方程的有理式1.差分方程的有理分式2.因果系统和ROC3.稳定性与ROC 二、频率响应1.定义2.幅频响应3.相频响应4.群延迟 总结 前言 本篇文章会先复习Z变换的有理分式&#xff0c;这是之前文章中提过的内容&#xff0c;这里会将差分方程和有理分式进行结合来看…...

Nginx面试宝典【刷题系列】

文章目录 1、nginx是如何实现高并发的&#xff1f;2、Nginx如何处理HTTP请求&#xff1f;3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的…...

【语法】C++的string

目录 4个默认成员函数 迭代器 string的扩容&#xff1a; capacity(): reserve(): resize()&#xff1a; 插入与删除&#xff1a; c_str: find()和substr: getline(): 在C语言中&#xff0c;要想存储一串字符&#xff0c;往往用的都是char arr[]&#xff0c;也就是字…...

支持selenium的chrome driver更新到133.0.6943.141

最近chrome释放新版本&#xff1a;133.0.6943.141 如果运行selenium自动化测试出现以下问题&#xff0c;是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…...

【2025.2.25更新】wordpress免费AI插件,文章内容、图片自动生成、视频自动生成、网站AI客服、批量采集文章,内置deepseek联网满血版

wordpress免费AI插件&#xff0c;文章内容、文章图片、长尾关键词、视频自动生成、网站AI客服、批量采集文章&#xff0c;插件已接入腾讯云大模型知识引擎xDeepSeek&#xff0c;基于腾讯云大模型知识引擎xDeepSeek可联网满血版&#xff0c;插件可实现文章生成、长尾关键词生成、…...

KylinSP3 | 防火墙和麒麟安全增强设置KySec

一、系统防火墙原理 麒麟操作系统从V10版本开始&#xff0c;默认使用了Firewalld防火墙&#xff0c;Firewalld是能提供动态管理的防火墙&#xff0c;支持网络/防火墙区域&#xff0c;用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时…...