HDFS块信息异常,spark无法读取数据

背景:flume数据落盘到hdfs上时,正在写入的文件一般是以.log.tmp结尾的文件,当flume将文件关闭以后将变为:.log 结尾的文件。由于我们使用阿里云的服务器,经常会有个别节点挂掉(进程在,无法通信,需要在阿里云上强制重启机器才行),导致一些文件写入中断,非正常关闭,造成快信息异常。导致spark报错,流程异常。

解放方法:

-- 1.检查hdfs目录下打开的文件
    hdfs fsck /user/hive/external/ods/ods_xxxxx/dt=2024-07-07 -openforwrite

-- 2.过滤出非正常关闭的文件 (.log.tmp:正在打开写入数据的文件 .log 为关闭的文件,这里出现的.log文件即为异常文件)
    将文件复制出来 vcscode
    通过将OPENFORWRITE替换为 \n 换行
    将 .log.tmp的正常文件替换为空,过滤出异常文件  【正则: .*\.tmp.* 】

-- 3.修复 (将异常的文件进行修复)
    hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290198943.log -retries 3 
    hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290187773.log -retries 3 
    hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290379675.log -retries 3 

命令解释:

hdfs fsck /user/hive/external/ods/ods_xxxxx/dt=2024-07-07 -openforwrite

使用 hdfs fsck 命令加上 -openforwrite 选项时,它会检查指定的目录是否可以安全地打开以供写入,并报告任何可能影响写入操作的问题。这包括检查是否有文件正被打开进行写入。

-openforwrite 选项主要关注于以下几个方面:

检查目录下是否有文件正处于打开状态,即这些文件是否被某个客户端持有写入租约(lease)。
检查是否有任何文件处于不完整的状态(即尚未完成写入)。
如果目录中有文件正在被打开写入,fsck 命令的输出通常会显示这些文件的信息。这些信息可以帮助您了解哪些文件可能会阻止您对目录进行进一步的写入操作。

hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290198943.log -retries 3 

    命令用于尝试恢复在 HDFS 中被中断的文件写入操作。当一个文件的写入因为某种原因(如客户端意外断开连接)而中断时,这个文件会被标记为“未完成”状态,并且其租约(lease)将保持有效直到过期或者手动释放。

hdfs debug recoverLease: 这个命令用于尝试恢复一个文件的租约,使其可以从“未完成”的状态中恢复过来。
-path: 指定要恢复租约的文件路径。
/user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290198943.log: 这是具体的文件路径。
-retries 3: 指定在尝试恢复租约时的最大重试次数。
执行这条命令后,HDFS 会尝试恢复指定文件的租约。如果文件的租约可以成功恢复,那么文件就可以继续写入或完成写入过程。如果命令执行失败,它将根据指定的重试次数进行重试。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值