day08笔记
**********************************************
课程回顾:
**********************************************
1、HDFS权限问题
针对用户操作没有权限 permission denied:
(1)修改 hdfs-site.xml 去掉权限检查(关闭HDFS服务 stop-all.sh;修改后 重新 Start-all.sh)
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
(2)通过设定用户名字 root
System.setProperty("HADOOP_USER_NAME","root");
(3)通过java的-D参数传递。 HADOOP_USER_NAME=root (命令行的方式)
public static void main(String[] args)
https://www.cnblogs.com/-wangjiannan/p/3626965.html
(4)hdfs dfs -chmod 777 /input 让所有用户访问。
(5)针对HDFS权限问题,有kerberos认证。
Kerberos: The Network Authentication Protocol
https://www.cnblogs.com/wukenaihe/p/3732141.html
2、IDEA Maven工程实现HDFS的文件上传与下载
## Maven环境中 只有当 POM文件中所有的依赖包全部变成白色。 ##
(1)HDFS文件上传
查看源码:crtl+鼠标左键
## Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. ##
step1:
下载:hadoop2.7.3 winutils binary
https://github.com/rucyang/hadoop.dll-and-winutils.exe-for-hadoop2.7.3-on-windows_X64
step2: 配置环境变量 拷贝进入 D:\hadoop-2.7.3\bin文件下。
hadoop.home.dir ---bin/winutils.exe
HADOOP_HOME:D:\hadoop-2.7.3,然后再path里面增加 %HADOOP_HOME%\bin
或者:System.setProperty("hadoop.home.dir", "D:\\hadoop-2.7.3");
(2)HDFS文件下载
### 使用IOUtils 输入路径 输出路径###
IOUtils.copyBytes(input,output,1024);
3、HDFS上传与下载原理
(1)上传原理
![](HDFS_Upload.png)
(2)下载原理
![](HDFS_DownLoad.png)
4、安全模式 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
5、快照:是一种备份,默认:HDFS快照是关闭
## 一般不建议使用。 ##
快照的本质:将需要备份的数据放到一个隐藏目录下。
(1)开启和关闭快照:
hdfs dfsadmin -allowSnapshot <snapshotDir>
hdfs dfsadmin -disallowSnapshot
hdfs lsSnapshottableDir 查看开启快照的所有文件夹
(2)创建快照:
需要创建快照的目录 快照目录的名字
hdfs dfs -createSnapshot /folder111 backup_folder111_20190118
快照打出的日志:
Created snapshot /folder111/.snapshot/backup_folder111_20190118
(3)删除快照
hdfs dfs -deleteSnapshot /folder111 backup_folder111_20190118
(4)恢复快照:
hdfs dfs -cp /folder111/.snapshot/backup_folder111_20190118/a.png /folder111
6、回收站:默认HDFS的回收站禁用
(1)回收站的配置:
core-site.xml fs.trash.interval(时间间隔 分钟)
关闭集群后才能起作用。
(2)本质是剪切:回收站开启之后,会把删除的文件放到一个/user/root/.Trash/Current
(3)回收站回复也就是粘贴的过程。
7、配额:Quota
(1)名称配额
限定HDFS目录下,存放文件(目录)的个数>1,最多存放N-1个。
setQuota--指定名称配额
clrQuota--清除名称配额
例如:
hdfs dfs -mkdir /myquota1
hdfs dfsadmin -setQuota 3 /myquota1
hdfs dfs -put ~/test.txt /myquota1----第1个
hdfs dfs -put ~/students.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
8、HDFS底层原理-RPC
Remote Procedure Call:远程过程调用,调用代码不在本地执行,实现调用者与被调用者之间的连接和通信。
基于Client server,相当于 DFSClient 相当于客户端。Namenode集群相当于Server。
9、HDFS底层原理-代理对象Proxy
(1)代理---明星的经纪人
是一种设计模式,提供了对目标对象的另一种访问方式。通过代理对象访问目标对象。
(2)代理分为静态代理和动态代理。
a、静态代理:接口的定义 实现接口。被代理对象与对象实现相同的接口。
# b、动态代理:接口的定义 不需要实现接口(匿名内部类+反射 invoke) #
10、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解决。