1、HDFS下载文件原理
1、请求
2、创建client
DFS –>DFSClient
3、建立RPC通信
4、得到代理对象proxy,通过代理对象请求得到文件元信息
5、查找元信息
6、返回元信息
7、创建输入流
8、下载数据块
FSDataInputStream
9、整合下载文件
注意:HDFS维护失败列表
2、安全模式 safe mode
检查副本率是否满足配置要求。副本率不够的时候,会水平复制,当下次那个挂掉的节点如果又活过来的话,副本数就会超过N了,就超了,系统会自动选一个多余的副本删掉
(1)冗余度:dfs.replication 3.有几个冗余的副本
hdfs-site.xml
<!--注释配置数据块的冗余度,默认是3-->
<property>
<name>dfs.replication
</name>
<value>1
</value>
</property>
(2)副本率:数据块实际冗余度(M),HDFS配置的数据块应该具有的冗余度(N)
M/N*100%;
例如:知否知否.avi M=2;HDFS配置的 N=3;
2/3=0.667。要求的副本率为 0.99,系统会水平复制数据块到其他节点
如果是副本率过高,M=6,N=3,副本率=2;大于0.99.系统会删除多余的数据块
在安全模式下 无法操作HDFS,因为正在进行副本率的检查工作
进入或查看安全模式的命令:
hdfs dfsadmin -safemode get/enter/leave/wait
3、快照:是一种备份,默认:HDFS快照是关闭
一般不建议使用
快照的本质:将需要备份的数据放到一个隐藏目录下
(1)开启和关闭快照
hdfs dfsadmin -allowSnapshot
<snapshotDir>
hdfs dfsadmin -disallowSnapshot
hdfs lsSnapshottableDir
//查看开启快照的所有文件夹
(2)创建快照
需要创建快照的目录 快照目录的名字
hdfs dfs -createSnapshot /test1 backup_test1_20190216
快照打出的日志:
Created snapshot /test1/.snapshot/backup_test1_20190216
(3)删除快照
hdfs dfs -deleteSnapshot /test1 backupt1_test1_20190216
(4)恢复快照
hdfs dfs -cp /test1/.snapshot/backup_test1_20190216/a.txt /test1
4、回收站:默认HDFS的回收站禁用
(1)回收站的配置:
core-site.xml fs.trash.interval(时间间隔 分钟)
关闭集群后才能起作用
<!--配置回收站,单位是分钟,默认是0-->
<property>
<name>fs.trash.interval
</name>
<value>1440
</value>
</property>
(2)本质是剪切:回收站开启之后,会把删除的文件放到一个/user/root/.Trash/Current
(3)回收站恢复也就是粘贴的过程
hdfs dfs -cp /user/root/.Trash/Current /
5、配额:Quota
(1)名称配额
限定HDFS目录下,存放文件(目录)的个数>1,最多存放N-1个
setQuota–指定名称配额
clrQuota–清除名称配额
例如:
hdfs dfs -mkdir /myquota1
hdfs dfsadmin -setQuota 3 /myquota1
hdfs dfs -put ~/a.txt /myquota1—-第1个
hdfs dfs -put ~/student01.txt /myquota1–第2个
hdfs dfs -put ~/students01.txt /myquota1—第3个 无法放
错误:put: The NameSpace quota (directories and files) of directory /myquota1 is exceeded: quota=3 file count=4
(2)空间配额 –必须要大于 默认数据块大小
setSpaceQuota
clrSpaceQuota
6、HDFS底层原理-RPC
Remote Procedure Call:远程过程调用,调用代码不在本地执行,实现调用者与被调用者之间的连接和通信
基于Client server,相当于 DFSClient 相当于客户端。Namenode集群相当于Server
7、HDFS底层原理-代理对象Proxy
(1)代理—明星的经纪人
是一种设计模式,提供了对目标对象的另一种访问方式。通过代理对象访问目标对象
(2)代理分为静态代理和动态代理
a、静态代理:接口的定义 实现接口,被代理对象与对象实现相同的接口
b、动态代理:接口的定义 不需要实现接口(匿名内部类+反射 invoke)
8、RPC与Proxy程序示例
针对log4j warn
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
可以在src/resource/通过 增加 log4j.properties解决