hdfs背景意义
优缺点
hdfs组成架构
文件块block(面试重点)
配置HADOOP_HOME环境变量,copywin7下编译的hadoop-27.2
配置MAVEN_HOME环境变量(安装,配置环境变量)
创建maven工程,导入依赖
如果Eclipse/Idea 打印不出日志,在项目的src/main/resources 目录下,新建一个文件,命名为“log4j.properties”
创建包,写一个HDFSClient程序上传文件,测试
HDFS文件上传:copyFromLocalFile(测试参数优先级):客户端代码中设置的值>resources下的site>集群上的site>服务器的默认配置
HDFS文件下载:copyToLocalFile
HDFS 文件夹删除:delete
HDFS 文件名更改:rename
HDFS 文件详情查看:listFiles,返回迭代器,内容是LocatedFileStatus
HDFS 文件和文件夹判断:listStatus,返回FileStatus[],isFile()判断
HDFS 文件上传:FileInputStream创建输入流,fs.create创建输出流,拷贝IOUtils.copyBytes,关闭资源
HDFS 文件下载:fs.open创建输入流,ileOutputStream创建输出流,拷贝,关闭资源
定位文件读取:fs.open创建输入流,seek()定位输入数据位置,ileOutputStream创建输出流,拷贝,关闭资源;第一块使用byte[]读取一定长度,剩下的使用seek()
namenode
secondary namenode
oiv 查看Fsimage 文件:hdfs oiv -p 文件类型-i 镜像文件-o 转换后文件输出路径
oev 查看Edits 文件:hdfs oev -p 文件类型-i 编辑日志-o 转换后文件输出路径
Fsimage不记录块对应的datanode,datanode主动上报数据块信息
思考:可以看出,Fsimage 中没有记录块所对应DataNode,为什么?
在集群启动后,要求DataNode 上报数据块信息,并间隔一段时间后再次上报。
思考:NameNode 如何确定下次开机启动的时候合并哪些Edits?
seen_txid记录了最新的编辑日志
hdfs-site.xml
杀死进程:kill - 9 ID
NameNode 故障后,可以采用如下两种方法恢复数据
NameNode启动时,加载镜像文件和编辑日志,此时处于安全模式,NameNode的文件系统对于客户端是只读的
DataNode启动时,(系统中的数据块不是由NameNode维护的,而是以块列表的形式存在DataNode中),在系统的正常操作期间,NameNode会在内存中保留所有块的位置信息。在安全模式下,个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块信息后,即可运行文件系统
安全模式退出判断:满足最小副本条件,NameNode会在30秒之后退出安全模式。最小副本条件是指:在整个文件系统中99.9%的块满足最小副本级别(默认值dis.replication.min=1)。在启动一个刚刚格式化的集群时,因为系统中没有任何块,所以NameNode不会进入安全模式。(99.9%的块都至少有一份!)
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)等待安全模式结束后执行之后的命令
NameNode 的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性
配置hdfs-site.xml:fs.namenode.name.dir为多个地址file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2
1,一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据块,一个是元数据(长度,校验和)
2,datanode启动后向namenode注册,通过后,周期性(1小时)上报所有块的信息
3,心跳每3秒一次,带回namenode给datanode的命令,超过十分钟没有收到datanode的心跳,认为该节点不可用
4,集群运行中可以加入和退出一些机器
crc校验
datanode进程死亡或网络故障无法与namenode通信,namenode不会立即判定该节点死亡,默认(10分钟+30秒)
超时时间:timeout=2*dfs.namenode.heartbeat.recheck-interval + 10*dfs.heartbeat.interval;默认值(5分钟,3秒)
直接启动datanode即可关联到集群(必须有相同的配置信息,其中包含namenode节点地址等等,必须删除data/和logs/)
如果数据不均衡,可以用命令实现集群的再平衡:start-balancer.sh
添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出。
注意:不在白名单上的节点的数据不会拷贝到其他节点,下载数据会报错
黑名单退役,在黑名单上的主机都会被强制退出
注意:黑名单上的节点的数据会拷贝到其他节点,此时显示为(Decommission in progress)。也即是副本数小于设定值的话是不能退役的,当节点上的块全部在别的节点上都增加了相应的副本就退役(Decommission)。
- 刷新节点在任何一个节点都可以进行,此时是通知NameNode节点刷新,NameNode会读取所在节点的相应配置文件,也即是dfs.hosts和dfs.hosts.exclude文件在其他节点上无效,hdfs-site.xml中对应的路径配置也无效。
- 不允许白名单和黑名单中同时出现同一个主机名称。
集群间数据拷贝
小文件存档,需要启动YARN运行MR
回收站:开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。
注意:通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站,Trash trash = New Trash(conf);
trash.moveToTrash(path)
快照管理:相当于对目录做备份,不会备份文件,而是记录文件变化。建立文件系统的索引,每次更新文件不会真正的改变文件,而是新开辟一个空间用来保存更改的文件,
- hdfs dfsadmin -allowSnopshot 路径 (开启指定目录的快照功能)
- hdfs dfsadmin -disallowSnopshot 路径 (禁用指定目录的快照功能,默认禁用)
- hdfs dfs -createSnapshot 路径(对目录创建快照)
- hdfs dfs -createSnapshot 路径 名称(对目录创建快照,指定名称)
- hdfs dfs -renameSnapshot 路径 旧名称 新名称(重命名快照名称)
- hdfs dfs -lsSnopshottableDir(列出当前用户所有可快照目录)
- hdfs dfs snapshotDiff 快照路径 名称1 名称2(比较两个快照不同之处,.表示当前状态,.snapshot可以省略)
- hdfs dfs -deleteSnapshot 路径 名称(删除快照)
手机扫一扫
移动阅读更方便
你可能感兴趣的文章