第1章 问题解答
1.1 Hadoop架构
-
NameNode
1、NameNode管理整个HDFS集群 2、NameNode管理整个HDFS的所有元数据(/a.txt rwx 1K 3 {blk:node1,node2,node3}) 3、Client要上传或者下载文件必须先找NameNode 4、一旦NameNode挂掉,整个HdFS集群将无法工作 5、各个DataNode隔一段时间向NameNode汇报自己的Block信息和磁盘信息
-
DataNode
1、DataNode是具体存数据的,HDFS所有真实数据都在DataNode存储 2、各个DataNode隔一段时间向NameNode汇报自己的Block信息和磁盘信息 3、Client在上传和下载文件时,和NameNode交流之后,真实的数据上传和下载是在Client和DataNode之间
-
SecondaryNameNode
1、辅助NameNode进行元数据管理,将NameNode内存中元数据保存到硬盘上
问题一:HDFS块的大小应该如何设置?
块设置的太小,会增加寻址时间,程序会一直在找块的开始位置。
块设置的太大,从磁盘传输的时间会明显大于定位块的时间,导致程序在处理这块数据时,非常慢。
综上,块的设置大小主要取决于磁盘传输速率:固态硬盘可以设置500MB,机械硬盘100-200MB
第2章 Trash垃圾回收
HDFS本身也是一个文件系统,那么就会涉及到文件数据的删除操作。默认情况下,HDFS中是没有回收站垃圾桶概念的,删除操作的数据将会被直接删除,没有后悔药。
Trash机制,叫做回收站或者垃圾桶。Trash就像Windows操作系统中的回收站一样。它的目的是防止你无意中删除某些东西。默认情况下是不开启的。
启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会立即被清除,它们将被移动到回收站Current目录中(/user/${username}/.Trash/current)。
.Trash中的文件在用户可配置的时间延迟后被永久删除。也可以简单地将回收站里的文件移动到.Trash目录之外的位置来恢复回收站中的文件和目录。
检查点仅仅是用户回收站下的一个目录,用于存储在创建检查点之前删除的所有文件或目录。如果你想查看回收站目录,可以在/user/ u s e r n a m e / . T r a s h / t i m e s t a m p o f c h e c k p o i n t c r e a t i o n 处看到 : 最近删除的文件被移动到回收站 C u r r e n t 目录,并且在可配置的时间间隔内, H D F S 会为在 C u r r e n t 回收站目录下的文件创建检查点 / u s e r / {username}/.Trash/{timestamp_of_checkpoint_creation}处看到: 最近删除的文件被移动到回收站Current目录,并且在可配置的时间间隔内,HDFS会为在Current回收站目录下的文件创建检查点/user/ username/.Trash/timestampofcheckpointcreation处看到:最近删除的文件被移动到回收站Current目录,并且在可配置的时间间隔内,HDFS会为在Current回收站目录下的文件创建检查点/user/{username}/.Trash/<日期>,并在过期时删除旧的检查点。
2.1 功能开启,修改core-site.xml
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>
fs.trash.interval:分钟数,当超过这个分钟数后检查点会被删除。如果为零,Trash回收站功能将被禁用。
fs.trash.checkpoint.interval:检查点创建的时间间隔(单位为分钟)。其值应该小于或等fs.trash.interval。如果为零,则将该值设置为fs.trash.interval的值。每次运行检查点时,它都会从当前版本中创建一个新的检查点,并删除在数分钟之前创建的检查点
2.2 功能使用
开启Trash功能后,正常执行删除操作,文件实际并不会被直接删除,而是被移动到了垃圾回收站。
有的时候,我们希望直接把文件删除,不需要再经过Trash回收站了,可以在执行删除操作的时候添加一个参数:-skipTrash.
[root@node1 hadoop-3.3.0]# hadoop fs -ls /
Found 4 items
-rw-r--r-- 3 root supergroup 15697 2022-10-21 10:16 /LICENSE.txt
drwxr-xr-x - root supergroup 0 2022-10-20 19:15 /output
drwxrwx--- - root supergroup 0 2022-10-20 17:25 /tmp
drwxr-xr-x - root supergroup 0 2022-10-20 17:15 /wcinput
[root@node1 hadoop-3.3.0]# hadoop fs -rm /LICENSE.txt
2022-10-21 11:18:24,961 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/LICENSE.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/LICENSE.txt
第3章 Archive档案的使用
第4章 Hadoop的shell操作
2.1 上传
- hadoop fs -put/-copyFromLocal:上传
- hadoop fs -moveFromLocal:从本地剪切粘贴到HDFS
- hadoop fs -appendToFile:追加一个文件到已经存在的文件末尾
2.2 下载
- hadoop fs -copyToLocal/-get:从HDFS拷贝到本地
- hadoop fs -getmerge:合并下载多个文件,把hdfs系统上多个文件合并下载成一个文件,用的很少
2.3 直接操作
- hadoop fs -ls /:显示目录信息
- hadoop fs -mkdir -p:创建目录
- hadoop fs -cat:显示文件内容
- hadoop fs -rm:删除文件或者文件夹
- hadoop fs -setrep:设置HDFS中文件的副本数量,这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。