关于HDFS应知应会的N个问题 | 技术点
安全模式是Namenode的一种状态(Namenode主要有active/standby/safemode三种模式)。
2. 哪些情况下,Namenode会进入安全模式 ?
a. Namenode发现集群中的block丢失率达到一定比例时(默认0.01%),Namenode就会进入安全模式,在安全模式下,客户端不能对任何数据进行操作,只能查看元数据信息
b. 在hdfs集群正常冷启动时,Namenode也会在safemode状态下维持相当长的一段时间,此时你不需要去理会,等待它自动退出安全模式即可
3. 为什么,在HDFS集群冷启动时,Namenode会在安全模式下维持相当长的一段时间 ?
Namenode的内存元数据中,包含文件路径、副本数、blockid,及每一个block所在Datanode的信息,而fsimage中,不包含block所在的Datanode信息。那么,当Namenode冷启动时,此时内存中的元数据只能从fsimage中加载而来,从而就没有block所在的Datanode信息 ——> 就会导致Namenode认为所有的block都已经丢失 ——> 进入安全模式 ——> 所在的Datanode信息启动后,会定期向Namenode汇报自身所持有的block信息 ——> 随着Datanode陆续启动,从而陆续汇报block信息,Namenode就会将内存元数据中的block所在Datanode信息补全更新 ——> 找到了所有block的位置,从而自动退出安全模式
4. 如何退出安全模式 ?
1)找到问题所在,进行修复(比如修复宕机的所在Datanode信息补全更新)
2)可以手动强行退出安全模式:hdfs namenode --safemode leave 【不推荐,毕竟没有真正解决问题】
5. Namenode服务器的磁盘故障导致namenode宕机,如何挽救集群及数据 ?
1)HA机制:高可用hadoop2.0
2)配置hdfs-site.xml指定然后重启Namenode运行时数据存放多个磁盘位置
3)然后重启Namenode和SecondaryNamenode的工作目录存储结构完全相同,当然后重启Namenode故障退出需要重新恢复时,可以从SecondaryNamenode的工作目录存储结构完全相同,当的工作目录中的namesecondary文件夹及其中文件拷贝到然后重启Namenode所在节点工作目录中(但只能恢复大部分数据SecondaryNamenode最后一次合并之后的更新操作的元数据将会丢失),将namesecondary重命名为name然后重启Namenode
6. Namenode是否可以有多个?Namenode跟集群数据存储能力有关系吗?
1)非HA的模式下Namenode只能有一个,HA模式下可以有两个(一主active一备standby),HDFS联邦机制可以有多个Namenode
2)关系不大,存储数据由Datanode完成。但是药尽量避免存储大量小文件,因为会耗费Namenode内存
7. fsimage是否存放了block所在服务器信息 ?
1)在edits中保存着每个文件的操作详细信息
2)在fsimage中保存着文件的名字、id、分块、大小等信息,但是不保存Datanode 的IP
3)在hdfs启动时处于安全模式,Datanode 向Namenode汇报自己的IP和持有的block信息
安全模式结束,文件块和Datanode 的IP关联上
| 
 验证过程: 1) 启动Namenode,离开safemode,cat某个文件,看log,没有显示文件关联的Datanode 2) 启动Datanode,cat文件,内容显示 3) 停止Datanode ,cat文件,看log,看不到文件,但显示了文件块关联的Datanode  | 
8. Datanode动态上下线?
在实际生产环境中,在hdfs-site.xml文件中还会配置如下两个参数:
dfs.hosts:白名单;dfs.hosts.exclude:黑名单
| 
 <property> <name>dfs.hosts</name> #完整的文件路径:列出了允许连入NameNode的datanode清单(IP或者机器名) <value>$HADOOP_HOME/conf/hdfs_include</value> </property> <property> <name>dfs.hosts.exclude</name> #文件完整路径:列出了禁止连入NameNode的datanode清单(IP或者机器名) <value>$HADOOP_HOME/conf/hdfs_exclude</value> </property>  | 
1) 上线datanode
a) 保证上线的datanode的ip配置在白名单并且不出现在黑名单中
b) 配置成功上线的datanode后,通过命令hadoop-daemon.sh datanode start启动
c) 刷新节点状态:/bin/hadoop dfsadmin -refreshNodes(这个命令可以动态刷新dfs.hosts和dfs.hosts.exclude配置,无需重启NameNode)
d) 手动进行数据均衡:start-balance.sh
2) 下线datanode
a) 保证下线的datanode的ip配置在黑名单并且不出现在白名单中
b) 关闭下线的节点
c) 刷新节点状态:/bin/hadoop dfsadmin -refreshNodes
d) 机器下线完毕后,将它们从hdfs_exclude文件中移除
9. 关于Datanode的几个问题 ?
1)Datanode在什么情况下不会备份?
在强制关闭或者非正常断电时不会备份
2)3个Datanode中有一个Datanode出现错误会怎样?
这个Datanode的数据会在其他的Datanode上重新做备份
10. HDFS HA机制下的脑裂现象以及避免方法 ?
当standby Namenode的ZKFailoverController收到active Namenode端故障通知时,不会立即将自己的状态切换为active,因为此时active Namenode可能处于“假死”状态,如果即刻切换为active状态,有可能造成脑裂现象。
为了防止脑裂,建议写个脚本确保发出故障通知的active Namenode一定被kill掉,具体可以按照以下几个步骤完成kill操作:
1.执行杀掉active Namenode的shell脚本,等待ssh kill返回命令
2.如果响应成功,就把原standby Namenode的状态切换为active;如果响应失败或者超时(可以配置一个超时时间)
3.只要shell脚本的调用返回值为true,则切换自己端的Namenode状态为active
笔者强调:Namenode主备切换、健康状态监控等需要通过ZKFailoverController等组件实现,但最终会借助于zookeeper集群
11. HDFS为什么不适合存储小文件 ?
一般一个block对应的元数据大小为150byte左右,大量小文件会使内存中的元数据变大导致占用大量Namenode内存、寻址时间长
12. 大量小文件的处理方式?
1)打成HAR files
命令:hadoop archive -archiveName xxx.har -p /src /dest
查看内容:hadoop fs -lsr har:///dest/xxx.har
该命令底层实际上是运行了一个MapReduce任务来将小文件打包成HAR。但是通过HAR来读取一个文件并不会比直接从HDFS中读取文件高效,因为对每一个HAR文件的访问都需要进行index文件和文件本身数据的读取。并且虽然HAR文件可以被用来作为MapReduce任务的input,但是并不能将HAR文件中打包的文件当作一个HDFS文件处理
2)编写MR程序,将小文件序列化到一个Sequence File中
将小文件以文件名作为key,以文件内容作为value,编写一个程序将它们序列化到HDFS上的一个Sequence File中,然后来处理这个Sequence File。相对打成HAR文件,具有两个优势:
(1)Sequence File是可拆分的,因此MapReduce可以将它们分成块并独立地对每个块进行操作
(2)它们同时支持压缩,不像HAR。在大多数情况下,块压缩是最好的选择,因为它将压缩几个记录为一个块,而不是一个记录压缩一个块
笔者强调hdfs小文件问题要结合具体的处理引擎以及业务情况等,比如离线处理下、流式处理下小文件问题如何解决,之后笔者会开单篇详述
13. 查看HDFS集群工作状态命令 ?
hdfs dfsadmin -report:快速定位各个节点情况,如每个节点的硬盘使用情况
关注微信公众号:大数据学习与分享,获取更对技术干货
关于HDFS应知应会的N个问题 | 技术点的更多相关文章
- 测试TwemProxy的应知应会
		
一.背景 最近中间件开发组对twemproxy的发现注册机制做了改造,之前没有接触过twemproxy,借这次测试的机会,初步学习了一下twemproxy相关的知识:下面用"测试语言&quo ...
 - SpringMVC 应知应会
		
springMVC 是表现层技术,可以用来代替 struts2,下面是简略图:主要是处理器和视图,只有这两个部分需要编写代码. springMVC 三大组件:处理器映射器,处理器适配器,视图解析器. ...
 - Markdown的应知应会
		
Markdown介绍 什么是Markdown Markdown是一种纯文本.轻量级的标记语言,常用作文本编辑器使用.和记事本.notepad++相比,Markdown可以进行排版:和Word相比,Ma ...
 - Linux用户应知应会的7个‘ls’命令的独特技巧
		
在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容.本文时‘ls命令’系列的最后一部分.如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接. Linux中的15个基本 ...
 - 【应知应会】15个常用的JavaScript字符串操作方法
		
1 初始化 //常用初始化方法 var stringVal = "hello iFat3"; //构造函数创建方法 var stringObj = new String(" ...
 - Hibernate 应知应会
		
Hibernate 的关联关系的配置: 一对一外键约束: 举例子是一个丈夫和妻子:[一个丈夫只能有一位妻子] 表结构: CREATE TABLE `tbl_hus` ( `uuid` ) NOT NU ...
 - Struts2 应知应会
		
struts.xml 文件的 action 的配置: Struts2 中结果类型的配置来自于下面: 其中: dispatcher:转发技术,转发到一个 jsp 视图 redirect:重定向到一个 j ...
 - .NET架构开发应知应会
		
.NET程序是基于.NET framework..NET Core.Mono.UWP[.NET实现]开发和运行的 ,定义以上[.NET实现]的标准规范称为.NET Standard L1:.NET S ...
 - Java 多线程应知应会
		
请简单说说 synchronized 关键字的底层原理 java 说到多线程绝对绕不开 synchronized,很多 java 工程师对 synchronized 是又爱又恨.为什么呢?主要原因包括 ...
 
随机推荐
- 高效学习必备软件:OneNote+ Mindmaster
			
做笔记有两个关键点: 一是笔记内容详略得当.二是知识的框架清晰完整. 为什么这样说? 举个例子,如图是我的笔记界面,用的是免费的OneNote, OneNote是微软出的笔记软件, 非常好用,有着书写 ...
 - JAVA对象转换为JSON及日期格式转换处理
			
1.JSON日期格式转换 默认JSON对DATE类型会转换成一个多属性对象, 而不是单独的一个字符串, 在某些应用处理上不是很方便, 可以利用JsonValueProcessor来实现日期的转换. ...
 - 【题解】[SDOI2015]星际战争
			
\(\color{red}{Link}\) \(\text{Solution:}\) 观察到,如果一个时间\(T\)可以完成任务,则\(T+1\)这个时间也可以完成任务. 于是我们可以二分. 为了避免 ...
 - JavaScript判断字符串中出现次数最多的字符,并统计其次数
			
要求: 输出一个给定字符串``中出现次数最多的字符,并统计其次数. 实现思路: 利用charA()遍历这个字符串 把每个字符都存储给对象,如果对象没有该属性,就先幅值为1,如果存在了就+1 遍历对象, ...
 - 十一、模拟扫码登录微信(用Django简单的布置了下页面)发送接收消息
			
为了能够模拟登陆QQ,并获取信息.对扫码登录微信进行了分析.简单的用了一下Django将获取的信息映射到页面上.(python3+pycharm) 主要过程就是: 1.获取二维码 2.扫码登录(有三种 ...
 - 微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud
			
系列文章目录 微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud 目录 系列文章目录 前言 单体式架构 微服务架构 优点 缺点 服务发现与弹性扩展 参考 前言 在微 ...
 - 这就是小学生也会用的四则计算练习APP吗?- by软工结对编程项目作业
			
结对编程项目 软件工程 这就是链接 作业要求 这就是链接 作业目标 熟悉在未结对情况下如何结对开发项目 Github与合作者 合作者(学号): 区德明:318005422 虚左以待 Github链接: ...
 - 手把手教你AspNetCore WebApi:认证与授权
			
前言 这几天小明又有烦恼了,之前给小红的接口没有做认证授权,直接裸奔在线上,被马老板发现后狠狠的骂了一顿,赶紧让小明把授权加上.赶紧Baidu一下,发现大家都在用JWT认证授权,这个倒是挺适合自己的. ...
 - 跟着动画学习 TCP 三次握手和四次挥手
			
TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...
 - ansible-的修改配置文件
			
1. ansible的配置文件 1 [root@1-230 python-2.7.5]# tree /etc/ansible/ 2 /etc/ansible/ 3 ├── ansible.cfg 4 ...