IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【HDFS问题】datanode启动失败的问题 -> 正文阅读

[大数据]【HDFS问题】datanode启动失败的问题

场景1:故障目录容忍度大于等于数据目录数

报错:org.apache.hadoop.util.DiskCheck$DiskErrorException:?Invalid volume failure config value:1
原因:dfs.datanode.data.dir只配了一个目录,但dfs.datanode.failed.volumes.tolerated配的是1;即只有一个目录,还允许一个目录不可用。
解决:将dfs.datanode.failed.volumes.tolerated配置为0,或增加数据目录数。

后记:

dfs.datanode.failed.volumes.tolerated

  当DataNode的任何一个本地磁盘出故障时,它的默认行为认定整个DataNode失效。在一个中到大型的集群中,硬盘故障是相当常见的,所以这种行为不是最优的。一个DataNode的丢失会导致一些数据块备份数下降,因此,NameNode会命令其他DataNode复制这些丢失的数据块来增加被附属。参数dfs.datanode.failed.volumes.tolerated定义整个DataNode声明失败前允许多少个硬盘出现故障。

  很多人会问,为什么不能容忍所有磁盘失效的情况,这样就可以把整个DataNode的失效推迟到没有任何可工作的硬盘为止。对于一个永久的时间窗口来说,这看上去很合理的,但是实际上,对于所有的磁盘来说,管理员对于磁盘故障的处理都会早于由于正常磨损而出现的故障。只有一种情况例外,所有的硬盘在一个极短的时间内全部出现故障,这种异常情况需要立即调查。在实践中,快速的磁盘故障通常意味着驱动控制器或者某些部件故障。正因为罕见,但如果磁盘在短时间内开始出现一连串故障,最好的办法就是立即隔离。先把整个集群设置为不可用,直到找到失败的原因为止。参数dfs.datanode.failed.volumes.tolerated默认值为0,也就意味着只要有一个磁盘出现故障就会导致整个DataNode不可用,管理员可以增大该值来保证在出现部分磁盘故障时,DataNode仍能持续运行,但是需要保持谨慎的是,在极短的时间范围内出现一个或者两个磁盘故障表明一个更大的问题存在。

  另外,多说一嘴,磁盘故障时,如果总容量降低,一般是出现了坏道导致的,而产生坏道的原因很大概率是磁盘中进入灰尘,后续出故障的概率会明显增加,因此生产环境的话建议换盘。


场景2:故障目录数大于故障目录容忍度

报错:org.apache.hadoop.util.DiskChecker$DiskErrorException: Too many failed volumes - current valid volumes: 1, volumes configured: 2, volumes failed: 1, volume failures tolerated: 0
原因:故障目录数大于故障目录容忍度。
解决:

? ? 方法1:?修改坏盘容忍度(dfs.datanode.failed.volumes.tolerated),使其大于故障盘数。

? ? 方法2: 更换磁盘,并挂载与之前一致的目录

后记:

【磁盘挂载步骤】
步骤1:查看磁盘盘符
? ??fdisk -l
步骤2:格式化文件系统
? ? mkfs.ext4 /dev/sdd
步骤3:新建挂载目录
? ? mkdir /opt/disk02
步骤4:将磁盘盘符挂载到需要的目录下
? ? mount /dev/sdd /opt/disk02
步骤5:查看挂载是否成功
? ? df -Th
步骤6:查看磁盘的UUID
? ? blkid?/dev/sdd1
步骤7:修改系统配置文件,使开机自动挂载
? ? vi /etc/fstab
? ? UUID /opt/disk02 ext4 defaults 0 0


场景3:NameNode和DataNode的NameNodeID不一致

报错:java.io.IOException: Incompatible clusterIDs in /hadoop/hdfs/data: namenode clusterID = CID-d4d0f6ef-7b81-falj-ajkfjlasdfj; datanode clusterID=CID-d4d0f6ef-7b81-falj-ajkfjlasdff
java.io.IOException:All specified directories are failed to load.

原因:格式化namenode后未更新datanode的version文件。
解决:

? ? 方法1:?修改datanode目录VERSION(位于${datanode_dir}/current/VERSION)中的clusterID与namenode目录VERSION(位于${namenode_dir}/current/VERSION)一致。

? ? 方法2: 修改清空datanode的数据目录:rm -rf?${datanode_dir}。

后记:

【hdfs格式化】
步骤1:停掉服务
步骤2:将hdfs-site.xml的dfs.name.dir和dfs.data.dir所指定的目录删除,将core-site.xml的Hadoop.tmp.dir所指定的目录删除。
? ? (如果开启了HA,则同时需要清空dfs.journalnode.edits.dir)
? ? (清空目录可以用模糊匹配:rm -rf /opt/disk*/hadoop/hdfs/data/* ? ?会删除所有disk下hdfs data目录中的数据)
步骤3:在主节点:hadoop namenode -format(如果开启了HA,journalnode需要先开启,然后再执行格式化)
步骤4:将namenode下所有文件的所有者改为hdfs:hadoop(步骤3在hdfs用户下执行则不需要改权限)
步骤5:在/hadoop/hdfs/namenode/current目录下查看VERSION的clusterID,修改/hadoop/hdfs/data/current目录下对应clusterID
? ? (已清空datanode目录的情况下无需改ID)
步骤6:格式化完成后正常启动所有服务即可。


持续更新......

后续遇到datanode无法启动的问题会持续更新该文章,敬请关注。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:33:51  更:2021-07-24 11:34:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 10:24:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码