玩大数据期间碰到的一些问题总结

文章目录

  • 问题一:Zookeeper节点数量为什么建议是奇数个?
  • 问题二:HA机制的Hadoop集群中Journal Node 作用
  • 问题三:两个datanode节点互相排斥怎么解决(集群无法识别新加入的Datanode)?
  • 问题四:如何修改Zookeeper日志 zookeeper.out输出路径
  • 问题五:HDFS block丢失过多进入安全模式(safe mode)的解决方法
  • 问题六:datanode数据存放位置研究

问题一:Zookeeper节点数量为什么建议是奇数个?

原因是:“Zookeeper集群,当有一半以上的节点数在工作中的时候,集群才对外服务”。

怎么理解上面这句话呢,用实验数据说话:
实验一:

设置节点数量为偶数 4, 启动 2 个节点。观察结果:集群不对外服务启动 3 个节点。观察结果:集群开始对外服务
实验二:

设置节点数量为奇数个 5启动3个节点。观察结果:集群开始对外服务

总结:
Zookeeper的算法逻辑里面,“一半以上的节点”,是不包括等于一半的。所以无论设置集群总数量为 2n+1 个节点 或者 2n 个节点,最少都需要依赖 n+1 个节点,分别可以容纳 n 个 或 n-1 个节点挂掉(也就是说就算挂n个节点ZK系统照样运行)。 (相比之下,设置为 2n+1, 可以比设置为 2n 多挂掉一个节点)。所以这里说的是建议奇数个而不是一定是奇数个节点

问题二:HA机制的Hadoop集群中Journal Node 作用

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
集群启动时,可以同时启动2个NameNode。这些NameNode只有一个是active的,另一个属于standby状态。active状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务,如图所示:
在这里插入图片描述
在一个典型的HA集群中,每个NameNode是一台独立的服务器。在任一时刻,只有一个NameNode处于active状态,另一个处于standby状态。其中,active状态的NameNode负责所有的客户端操作,standby状态的NameNode处于从属地位,维护着数据状态,随时准备切换。

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信(JournalNodes依赖于Zookeeper来实现两个NameNode之间数据的同步功能)。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了,如图所示
在这里插入图片描述

为了确保快速切换,standby状态的NameNode有必要知道集群中所有数据块的位置。为了做到这点,所有的datanodes必须配置两个NameNode的地址,发送数据块位置信息和心跳给他们两个。

对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNs必须确保同一时刻只有一个NameNode可以向自己写数据。

JournalNode服务器:运行的JournalNode进程非常轻量,可以部署在其他的服务器上。注意:必须允许至少3个节点。当然可以运行更多,但是必须是奇数个,如3、5、7、9个等等。当运行N个节点时,系统可以容忍至少(N-1)/2(N至少为3)个节点失败而不影响正常运行

在HA集群中,standby状态的NameNode可以完成checkpoint操作,因此没必要配置Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,还会报错。

问题三:两个datanode节点互相排斥怎么解决(集群无法识别新加入的Datanode)?

之前有两个datanode节点,这里新添加了一个datanode节点,但是在集群中却未表现出来。
到对应的管理界面只看到两个存活的节点
Live Nodes 为 2,
Dead Nodes 为 0
然后我切换到Datanodes界面查看:
发现mini2和mini3存活, 我就刷新了几下, 发现变成了mini3和mini4存活了, 我一直刷呀刷,发现有mini2就没有mini4,有mini4就没有mini2, mini2与mini4互相排斥,
然后我上传了一个文件,结果mini2挂掉了 , 经过排查发现是我的
/root/apps/hadoop/tmp/dfs/data/current目录下了VERSION文件里:
在这里插入图片描述
在这里插入图片描述
mini2和mini4的 datanodeUuid是一样的(在虚拟机中玩集群添加节点的时候直接克隆虚拟机,虽然将新增的节点配置好后,但是由于对应datanode的配置信息(如版本信息)依旧是别的的节点的配置信息,所以才会出现这种情况,这时候只需要将之前节点生成的datanode的配置信息删除,让该节点重新生成配置信息即可)原来是datanode的Uuid冲突了
解决方法:
把mini4的VERSION文件删除,重启datanode即可
停止: hadoop-daemon.sh stop datanode
启动: hadoop-daemon.sh start datanode

问题四:如何修改Zookeeper日志 zookeeper.out输出路径

如果不做修改,默认zookeeper的日志输出信息都打印到了zookeeper.out文件中,这样输出路径和大小没法控制,因为日志文件没有轮转。所以需要修改日志输出方式。
具体操作如下:
1、修改$ZOOKEEPER_HOME/bin目录下的zkEnv.sh文件,ZOO_LOG_DIR指定想要输出到哪个目录,ZOO_LOG4J_PROP,指定INFO,ROLLINGFILE的日志APPENDER.

2、修改$ZOOKEEPER_HOME/conf/log4j.properties文件的:
zookeeper.root.logger的值与前一个文件的ZOO_LOG4J_PROP 保持一致,该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender

问题五:HDFS block丢失过多进入安全模式(safe mode)的解决方法

因磁盘空间不足,内存不足,系统掉电等其他原因导致dataNode datablock丢失。
解决办法(Solution)*

安装HDFS客户端,并执行如下命令:

步骤 1     执行命令退出安全模式:hadoop dfsadmin -safemode leave步骤 2     执行健康检查,删除损坏掉的block。  hdfs fsck  /  -delete

注意: 这种方式会出现数据丢失,损坏的block会被删掉。

问题六:datanode数据存放位置研究

Datanode中数据实际存放位置:

自定义路径+dfs/data/current/BP-190247797-192.168.10.220-1460040893538/current/finalized

一、curren

/home/zjsd/hadoopdata/dfs/data/current/BP-190247797-192.168.10.220-1460040893538/current/如图:
在这里插入图片描述

dfsUsed:该文件中存放该DataNode容量被占有的大小&&DataNode总容量
Finalized:数据实际所在的位置
VERSION:数据块的版本信息
DataNode空间存储的ID
layoutVersion:软件所处的版本

二、Datanode的版本信息:
在这里插入图片描述

参考:https://blog.csdn.net/wbzhang2594/article/details/53893275
参考:https://blog.csdn.net/kiwi_kid/article/details/53514314
参考:
https://blog.csdn.net/csdm_admin/article/details/63253538?utm_source=itdadao&utm_medium=referral
参考:https://blog.csdn.net/wangshuminjava/article/details/79306358
参考:https://blog.csdn.net/czp11210/article/details/76695745
参考:https://blog.csdn.net/xiaoshunzi111/article/details/51239679

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA的SSH框架登录注册

Struts 的MVC设计模式可以使我们的逻辑变得很清晰,主要负责表示层的显示。 Spring 的IOC和AOP可以使我们的项目在最大限度上解藕。 hibernate的就是实体对象的持久化了, 数据库的封装。 项目截图:(代码是按照项目截图上传的,直接对号入座即可…

Visual Studio Code 前端调试不完全指南

本文最初发布于我的个人博客:咀嚼之味Visual Studio Code (以下简称 vscode) 如今已经代替 Sublime,成为前端工程师们最喜爱的代码编辑器。它作为一个大型的开源项目,不断推陈出新;社区中涌现出大量优质的插件,以支持我…

MySQL中(delete、truncate、drop) 的区别

delete、truncate、drop的用法 MySQL 数据表中delete删除数据的通用语法: ###删除 students_tbl 表中 student_id 为3 的记录: delete from students_tbl where student_id3; MySQL 数据表中truncate删除数据的通用语法: ###删除 students_…

机器学习之LDA主题模型算法

文章目录1、知道LDA的特点和应用方向1.1、特点1.2、应用方向2、知道Beta分布和Dirichlet分布数学含义3、了解共轭先验分布4、知道先验概率和后验概率5、知道参数α值的大小对应的含义6、掌握LDA主题模型的生成过程7、知道超参数α等值的参考值8、LDA总结1、知道LDA的特点和应用…

分别写出引入CSS的3种方式, 特点, 优先级

第一&#xff1a;css的三种引入方式 1.行内样式 最直接最简单的一种&#xff0c;直接对HTML标签使用style""&#xff0c;例如&#xff1a; <p style"color:#F00; "></p> 缺点&#xff1a;HTML页面不纯净&#xff0c;文件体积大&#xff0c…

[Go] Template 使用简介

Golang 提供了两个标准库用来处理模板 text/template 和 html/template。我们使用 html/template 格式化 html 字符。 模板引擎 模板引擎很多&#xff0c;Python 的 jinja&#xff0c;nodejs 的 jade 等都很好。所谓模板引擎&#xff0c;则将模板和数据进行渲染的输出格式化后的…

内存泄露监测

2019独角兽企业重金招聘Python工程师标准>>> iOS 内存泄露监测 144 作者 谢谢生活 已关注 2017.05.19 17:38* 字数 4235 阅读 209评论 0喜欢 6 iOS可能存在的内存泄露&#xff1a;block 循环引用。当一个对象有一个block属性&#xff0c;而block属性又引用这个对象…

玩Azkaban跳过的坑

文章目录一号坑&#xff1a;启动Azkaban报错&#xff1a;User xml file conf/azkaban-users.xml doesnt exist.二号坑&#xff1a;报错&#xff1a;failed SslSocketConnector0.0.0.0:8443: java.io.FileNotFoundException: /home/hadoop/app/azkaban/azkaban-web-2.5.0/bin/ke…

两种解除禁止右键、选中、复制的方法

我在网上找的 两种解除禁止右键、选中、复制的方法 1、直接存到书签点击即可 javascript:(function(){var docdocument;var bddoc.body;bd.onselectstartbd.oncopybd.onpastebd.onkeydownbd.oncontextmenubd.onmousemovebd.onselectstartbd.ondragstartdoc.onselectstartdoc.o…

删除节点removeChild()

http://www.imooc.com/code/1700 删除节点removeChild() removeChild() 方法从子节点列表中删除某个节点。如删除成功&#xff0c;此方法可返回被删除的节点&#xff0c;如失败&#xff0c;则返回 NULL。 语法: nodeObject.removeChild(node) 参数: node &#xff1a;必需&…

机器学习自主解决安全威胁离我们还有多远?

曾经听见不止一次这样的问题&#xff1a; “机器学习会替代基于人工经验规则的安全解决方案么&#xff1f;”把这个问题放在去年来看&#xff0c;我们已经得到了非常多的讨论甚至是一些已经实际应用的解决方案&#xff0c;对于人工智能在安全以及其它各种对数据进行价值挖掘的场…

Linux执行定时任务(crontab)遇到的坑

文章目录前言&#xff1a;1、建立定时任务的两种方式1.1、crontab -e1.2、vi /etc/ crontab2、两种方法的区别2.1、用户级2.2、系统级3、解决办法前言&#xff1a; 之前第一次要在生产环境部署定时任务&#xff0c;无奈的是&#xff0c;博主对定时任务这块还是个小白&#xff…

Vue:解决[Vue warn]: Failed to resolve directive: modle (found in Anonymous)

解决问题 [Vue warn]: Failed to resolve directive: modle (found in <ComponentA>) console.error(("[Vue warn]: " msg trace)); 原因是 我把model 写成了 modle 这类错误一般是单词写错了 (found in <Anonymous>) 解决思路

Oracle树查询及相关函数

Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了。依托于该语法&#xff0c;我们可以将一个表形结构的中以树的顺序列出来。在下面列述了Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的Oracle特性函数等&#xff0c;在这里只涉及到…

Mysql常用函数总结

文章目录前言&#xff1a;1、日期相关函数1.1、mysql获取未来、现在、过去的时间&#xff1a;DATE_SUB&#xff08;&#xff09;、DATE_ADD()1.2、格式化日期&#xff1a;date_format&#xff08;&#xff09;1.3、MySQL 日期、时间相减函数&#xff1a;datediff(date1,date2),…

一行Python代码制作动态二维码

目录 1、普通二维码 2、艺术二维码 3、动态二维码 在GitHub上发现了一个比较有意思的项目&#xff0c;只需要一行Python代码就可以快捷方便生成普通二维码、艺术二维码(黑白/彩色)和动态GIF二维码。 GitHub网站参加&#xff1a;https://github.com/sylnsfar/qrcode 用法比…

Vue常用经典开源项目汇总参考-海量

Vue常用经典开源项目汇总参考-海量 Vue是什么&#xff1f; Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是&#xff0c;Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层&#xff0c;并且非常…

鼠标移入视频播放,鼠标移出播放停止,恢复到原来状态

<!doctype html> <html lang"en"> <head><meta charset"UTF-8"><title>鼠标移入视频播放&#xff0c;鼠标移出播放停止&#xff0c;恢复到原来状态</title><link rel"shortcut icon" href"http://f…

Pycharm常用高效技巧总结

文章目录1、PyCharm如何自动生成函数注释2、pycharm运行程序时在Python console窗口中运行3、Pycharm在创建py文件时,如何自动添加文件头注释4、Pycharm配置远程调试5、pycharm同一目录下无法import明明已经存在的.py文件1、PyCharm如何自动生成函数注释 一般在函数def()行下敲…

EntityFramework中常用的数据删除方式

最近在学EF&#xff0c;目前了解到删除操作有三种方式&#xff0c; 第一&#xff0c;官方推荐的先查询数据&#xff0c;再根据查询的对象&#xff0c;删除对象。 这是第一种&#xff0c;官方推荐 第二&#xff0c;自己创建一个对象&#xff0c;然后附加&#xff0c;然后删除。 …