3.hdfs的文件的上传、下载流程
上传流程:
1、client上传文件到hdfs,发出上传请求
2、Namenode首先往edits中记录元数据操作日志,并返回元数据信息给client(即分成多少block,不同block放在哪些datanode上)
3、client根据namenode返回的信息,对文件进行切分,写入到datanode中
4、datanode再将block复制到其他datanode上,并向datanode返回成功信息,若失败,则重新分配datanode进行复制
5、client上传文件成功后,将成功信息返回给NameNode,NameNode将本次元数据信息写入内存
6、当edits写满时,需要将这一段时间内新的元数据刷到fs_image文件中,这个过程在secondary namenode中进行
6.1 首先Namenode通知Secondary Namenode进行checkpoint操作
6.2 然后Namenode会停止往edits中写数据,而是生成一个edits.new文件,数据写入edits.new
6.3 secondary namenode会从namenode下载 fs_image 和 edits,合并为fs_image.checkpoint
6.4 secondary namenode将fs_image.checkpoint上传到namenode,改名为fs_image,替换原文件;同时edits.new改名为edits,并替换原文件
下载流程:
客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址
挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。
4.hdfs的默认副本策略
第一个副本在client所处的节点上,如果客户端在集群外,
随机选择一个
第二个副本和第一个副本位于相同机架,随机节点
第三个副本位于不同机架,随机节点
5.nn和2nn的工作机制?2nn有什么作用?集群的故障处理、集群的安全模式
namenode的工作机制:
1、加载编辑日志和镜像文件到内存
2、元素增删改请求
3、记录操作日志更新滚动日志
4、内存增删改
2nn的工作机制:
1、请求是否需要checkpoint
(checkpoint除法条件:1.定时时间到 2.edits中的数据满了)
2、请求执行checkpoint
3、滚动正在写的edits
4、拷贝到2nn
5、加载到内存并合并
6、生成新的fsimage
7、拷贝到2nn
8、重命名成fsimage
2nn的作用:是帮助namenode进行edits和Fsimage的合并
集群的故障处理:
1、将2nn中数据拷贝到namenode存储数据的目录
(1)kill -9 namenode进程
(2)删除namenode存储的数据
(3)拷贝2nn中数据到原namenode存储数据目录
(4)重新启动namenode
2、使用-importCheckpoint选项启动namenode守护进程,将
2nn中数据拷贝到namenode目录中
(1)修改hdfs-site.xml
(2)kill -9 namenode进程
(3)删除namenode存储的数据
(4)如果2nn不和namenode在一个主节点上,需要将2nn存储
数据的目录拷贝到namenode存储数据的平级目录,并删除in_use.lock文件文件
5、检查导入数据
6、启动namenode
集群的安全模式:
可读不可写
集群启动完成后,自动退出安全模式。
各个datanode会向nameode发送最新的块列表信息,namenode
了解到足够的块位置信息后,即可高效运行文件系统
安全模式退出:满足最小副本条件1
6.dn的工作机制
1、datanode启动后向namenode注册
2、注册成功
3、以后每周期(1小时)上报所有信息块
4、心跳每3秒一次,心跳返回结果带有namenode给该datanode的命令
5、超过10分钟没有收到datanode2的心跳,则认为该节点不可用
7.判断dn的离线
1、datanode进程死亡或者网络故障造成的datanode无法与
namenode通信
2、namenode不会立即把该节点判定位死亡,要经过一段时间
这段时间暂称做超时时长
3、hdfs默认的超时时长为10分30秒
8.添加新节点
1、主机上克隆一个新的虚拟机
2、修改IP地址和主机名称
3、删除原来hdfs文件系统留存的文件
4、source一下配置文件
直接启动datanode,即可关联到集群
在新的虚拟机上上传文件
如果数据不均衡,可以用命令实现集群的在平衡
9.什么是黑名单?什么是白名单?如何退役旧节点?
如何设置白名单?
添加到白名单的主机节点,都允许访问NameNode,
在黑名单上的主机都会被强制退出
不允许白名单和黑名单中同时出现同一个主机名称。
设置白名单:
在namenode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件
在NameNode的hdfs-site.xml配置文件中增加dfs.hosts属性
配置文件分发
刷新namenode
更新resourceManager节点
在web浏览器上查看
退役旧节点:
在黑名单上的主机都会被强制退出
在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts.exclude文件
在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性
刷新NameNode、刷新ResourceManager
检查Web浏览器,退役节点的状态为decommission in progress(退役中),
说明数据节点正在复制块到其他节点
等待退役节点状态为decommissioned(所有块已经复制完成),
停止该节点及节点资源管理器(如果副本数是3,服役的节点小于等于3,是不能退役成功的,
需要修改副本数后才能退役)
10.datanode多目录配置(一般情况下服务器磁盘存储满了,我们需要新增磁盘挂载点,来存储数据块)
DataNode可以配置成多个目录,每个存储的数据不一样(数据不是副本)
配置hdfs-site.Xml
dfs.datanode.data.dir
file:///hadoop.tmp.dir/dfs/data1,file:///{hadoop.tmp.dir}/dfs/data1,file:///hadoop.tmp.dir/dfs/data1,file:///{hadoop.tmp.dir}/dfs/data2
添加多个目录中间用逗号隔开
11.2.x新特性,小文件存储的缺点?提供的小文件归档的命令、查看归档文件的命令、以及解档命令
小文件存储的缺点:
每个文件均按块存储,每个块的元数据存储在namenode的内存中,因此hdfs存储小文件会非常低效。
大量的小文件会耗尽namenode中的大部分内存,存储小文件所需的磁盘容量和数据块的大小无关。
小文件归档的命令:bin/hadoop archive -archiveName 归档文件名 -p 归档后存储的路径
查看归档文件的命令:
hadoop fs -lsr /user/jinghang/output/input.har
hadoop fs -lsr har:///user/jinghang/output/input.har
解档命令:
hadoop fs -cp har:/// user/jinghang/output/归档文件名/*
- fsimage文件查看、edits文件查看
Fsimage文件查看:
hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
将显示的xml文件内容拷贝到Eclipse中创建的xml文件中,并格式化
为什么Fsimage中没有记录块所对应DataNode
在集群启动后,要求DataNode上报数据块信息,并间隔一段时间后再次上报。
edits文件查看:
hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径