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

文章目录

  • 问题一: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,成为前端工程师们最喜爱的代码编辑器。它作为一个大型的开源项目,不断推陈出新;社区中涌现出大量优质的插件,以支持我…

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

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

[Go] Template 使用简介

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

内存泄露监测

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

玩Azkaban跳过的坑

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

删除节点removeChild()

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

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

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

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>) 解决思路

一行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;并且非常…

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;然后删除。 …

Elasticsearch的前后台运行与停止(tar包方式)

备注&#xff1a;在生产环境中&#xff0c;往往一般用后台来运行。jps查看。 1、ES的前台运行 [hadoopdjt002 elasticsearch-2.4.3]$ pwd/usr/local/elasticsearch/elasticsearch-2.4.3[hadoopdjt002 elasticsearch-2.4.3]$ bin/elasticsearch 2、ES的后台运行 [hadoopdjt002 e…

解决pycharm运行Flask指定ip、端口更改无效

后来查了一下官网文档&#xff0c;原来Flask 1.0 版本不再支持之前的FLASK_ENV 环境变量了。 Prior to Flask 1.0 the FLASK_ENV environment variable was not supported and you needed to enable debug mode by exporting FLASK_DEBUG1. This can still be used to control…

Android中SimpleAdapter的使用—自定义列表

本人初学Android&#xff0c;今天研究到Adapter这块感觉挺有意思的&#xff0c;写了个自定义列表进行测试 首先我们新建一个layout列表布局文件&#xff0c;具体布局可以自己设定。 下面贴上我的自定义布局文件代码 1 <?xml version"1.0" encoding"utf-8&qu…

linux lvm扩容

linux lvm扩容 LVM磁盘管理 一、LVM简介... 1 二、 LVM基本术语... 2 三、 安装LVM... 3 四、 创建和管理LVM... 4 2、 创建PV.. 6 3、 创建VG.. 7 4、 创建LV.. 9 5、LV格式化及挂载... 10 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz …

Python基础常见面试题总结

文章目录基础知识题看程序写结果题编程题以下是总结的一些常见的Python基础面试题&#xff0c;帮助大家回顾基础知识&#xff0c;了解面试套路。会一直保持更新状态。PS&#xff1a;加粗为需要注意的点。基础知识题 1、深拷贝和浅拷贝的区别是什么&#xff1f; 深拷贝是将对象…

Flask-Script扩展命令行manager = Manager(app)

通过使用Flask-Script扩展&#xff0c;我们可以在Flask服务器启动的时候&#xff0c;通过命令行的方式传入参数。而不仅仅通过app.run()方法中传参&#xff0c;比如我们可以通过python hello.py runserver --host ip地址&#xff0c;告诉服务器在哪个网络接口监听来自客户端的连…

Python基础总结之常用内置方法总结

文章目录前言1、str1.1、内置方法&#xff1a;1.2、常用的内置方法1.3、String模块的一些方法2、list2.1、内置方法2.2、常用内置方法3、tupple3.1、内置方法3.2、常用内置方法4、dict4.1、内置方法4.2、常用内置方法5、其他5.1、几个sort的使用5.2、enumerate&#xff08;&…