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/*    /
相关推荐
Databend6 小时前
2KB histogram 背后:Databend 如何低成本追踪长尾延迟
大数据·数据分析·agent
Databend8 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
阿里云大数据AI技术1 天前
StarRocks x Fluss x Paimon湖流一体方案:构建秒级响应、湖流一体的实时数据引擎
大数据·人工智能
Databend1 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
喵个咪1 天前
Go Wind UBA 拆解系列 - 架构总览:三服务、数据流与契约优先
大数据·后端·go
喵个咪1 天前
Go Wind UBA 拆解系列 - 多租户与安全:两套隔离机制的边界
大数据·后端·go
喵个咪1 天前
Go Wind UBA 拆解系列 - OLAP 与 SQL 硬核:25 个分析模型怎么落地
大数据·后端·go
喵个咪1 天前
Go Wind UBA 拆解系列 - SDK 与采集层:从浏览器到 Kafka
大数据·后端·go
QCC产品中心2 天前
MiniMax Agent 接入实测:企业查询、股权穿透与 UBO 识别(附 Prompt 模板)
大数据·mcp·金融/非金融
SelectDB2 天前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python