Hadoop 中的大数据技术:调优篇(3)

HDFS---故障排除

NameNode 故障处理
  • 需求

    NameNode 进程崩溃且存储的数据丢失,如何恢复 NameNode?

  • 故障模拟

    终止 NameNode 进程

    复制代码
    [lzl@hadoop12 current]$ kill -9 19886

    删除 NameNode 存储的数据

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
  • 问题解决

    从 SecondaryNameNode 复制数据至 NameNode

    复制代码
    [lzl@hadoop12 dfs]$ scp -r lzl@hadoop14:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/

    重启 NameNode

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs --daemon start namenode

    向集群上传文件

集群安全模式 & 磁盘修复
  • 安全模式

    文件系统仅接受读取请求,不接受删除或修改等更改请求。

  • 进入安全模式的场景

    • NameNode 加载镜像文件和编辑日志期间处于安全模式。
    • NameNode 接收 DataNode 注册时处于安全模式。
  • 退出安全模式的条件

    • dfs.namenode.safemode.min.datanodes: 最小可用 DataNode 数量,默认为 0。
    • dfs.namenode.safemode.threshold-pct: 副本数达到最小要求的 block 占系统总 block 数的百分比,默认为 0.999f。
    • dfs.namenode.safemode.extension: 稳定时间,默认值 30000 毫秒,即 30 秒。
  • 基本语法

    复制代码
    bin/hdfs dfsadmin -safemode get	# 查看安全模式状态
    bin/hdfs dfsadmin -safemode enter # 进入安全模式状态
    bin/hdfs dfsadmin -safemode leave	# 离开安全模式状态
    bin/hdfs dfsadmin -safemode wait	# 等待安全模式状态
  • 案例 1:启动集群进入安全模式

    重启集群

    复制代码
    [lzl@hadoop12 subdir0]$ myhadoop.sh stop
    [lzl@hadoop12 subdir0]$ myhadoop.sh start

    尝试删除数据,提示集群处于安全模式

  • 案例 2:磁盘修复

    需求:

    数据块损坏,进入安全模式,如何处理?

    步骤:

    删除特定块信息

    复制代码
    [lzl@hadoop12 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta
    [lzl@hadoop12 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta

    注意:hadoop13/hadoop14 上重复执行以上命令。

    重启集群

    复制代码
    [lzl@hadoop12 subdir0]$ myhadoop.sh stop
    [lzl@hadoop12 subdir0]$ myhadoop.sh start

    观察状态

    访问 http://hadoop12:9870/dfshealth.html#tab-overview

    离开安全模式

    复制代码
    [lzl@hadoop12 subdir0]$ hdfs dfsadmin -safemode get
    Safe mode is ON
    [lzl@hadoop12 subdir0]$ hdfs dfsadmin -safemode leave
    Safe mode is OFF

    再次观察状态

    再次访问 http://hadoop12:9870/dfshealth.html#tab-overview

    1. 删除元数据
    2. 再次观察状态

    再次访问 http://hadoop12:9870/dfshealth.html#tab-overview,集群已恢复正常。

  • 案例 3:模拟等待安全模式

    查看当前模式

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs dfsadmin -safemode get
    Safe mode is OFF

    进入安全模式

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode enter

    创建并执行脚本/opt/module/hadoop-3.1.3路径上编辑脚本safemode.sh

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ vim safemode.sh
    #!/bin/bash
    hdfs dfsadmin -safemode wait
    hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /
    [lzl@hadoop12 hadoop-3.1.3]$ chmod 777 safemode.sh
    [lzl@hadoop12 hadoop-3.1.3]$ ./safemode.sh

    离开安全模式

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave

    观察结果

    复制代码
    Safe mode is OFF

    确认数据上传

慢磁盘监控
  • 慢磁盘定义

    • "慢磁盘"指的是写入数据非常缓慢的磁盘。这类磁盘在长时间运行和高负载任务下容易出现。
  • 发现慢磁盘的方法

    通过心跳未联系时间

    • 当出现慢磁盘时,可能影响 DataNode 与 NameNode 之间的正常心跳(正常心跳间隔通常为 3 秒)。

    使用 fio 命令测试磁盘读写性能

    复制代码
    [lzl@hadoop12 ~]# sudo yum install -y fio

    顺序读测试

    复制代码
    [lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r

    结果显示,磁盘的总体顺序读速度为 360MiB/s。

    顺序写测试

    复制代码
    [lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w

    结果显示,磁盘的总体顺序写速度为 341MiB/s。

    随机写测试

    复制代码
    [lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw

    结果显示,磁盘的总体随机写速度为 309MiB/s。

    混合随机读写测试

    复制代码
    [lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop

    结果显示,磁盘的总体混合随机读速度为 220MiB/s,写速度为 94.6MiB/s。

小文件归档

HDFS 存储小文件的弊端

  • 存储小文件会导致 NameNode 内存消耗过多,因为每个文件都需要按块存储,而每个块的元数据都存储在 NameNode 的内存中。尽管如此,小文件所需的磁盘空间取决于其实际大小而非块大小。

  • 解决方案

    使用 HDFS 存档文件(HAR 文件)来更高效地归档小文件,减少 NameNode 内存使用的同时保持文件的透明访问。

  • 案例实操

    启动 YARN 进程

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ start-yarn.sh

    归档文件

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hadoop archive -archiveName input.har -p  /input   /output

    查看归档

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -ls /output/input.har
    [lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -ls har:///output/input.har

    解归档文件

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -cp har:///output/input.har/*    /
相关推荐
AutoMQ17 分钟前
技术干货|AutoMQ:在 Kafka 中无需使用 Cruise Control 实现自动分区重分配
大数据
搞数据的小杰43 分钟前
spark广播表大小超过Spark默认的8GB限制
大数据·数据库·分布式·spark
isNotNullX1 小时前
数据怎么分层?从ODS、DW、ADS三大层一一拆解!
大数据·开发语言·数据仓库·分布式·spark
时序数据说2 小时前
时序数据库处理的时序数据独特特性解析
大数据·数据库·物联网·时序数据库·iotdb
Akamai中国2 小时前
为何说分布式 AI 推理已成为下一代计算方式
人工智能·分布式·云计算·边缘计算·云服务·akamai
随心............2 小时前
hive的相关的优化
数据仓库·hive·hadoop
专注VB编程开发20年3 小时前
WPF,Winform,HTML5网页,哪个UI开发速度最快?
大数据·c#·wpf
武子康4 小时前
大数据-42 Redis 发布/订阅详解:机制、弱事务性与实际风险分析
大数据·redis·后端
万能小锦鲤4 小时前
《大数据技术原理与应用》实验报告一 熟悉常用的Linux操作和Hadoop操作
大数据·linux·hadoop·ubuntu·vmware·实验报告·大数据技术原理与应用
小马爱打代码5 小时前
分布式通信框架 - JGroups
分布式·节点通信