Java操作hdfs,总是报ClosedChannelException

现象

public boolean uploadFile(MultipartFile file, String dst) {try {long start = System.currentTimeMillis();// 创建Hadoop配置对象Configuration config = new Configuration();config.set("fs.defaultFS", hdfsUri);Path dstPath = new Path(ROOT_PATH + dst);FileSystem fs = dstPath.getFileSystem(config);// 上传文件到HDFSInputStream in = new BufferedInputStream(file.getInputStream());OutputStream out = fs.create(dstPath);IOUtils.copyBytes(in, out, 128000000, true);in.close();// 关闭FileSystem对象fs.close();long end = System.currentTimeMillis();logger.info("文件名称: {} 耗时: {}", dst, end - start);return true;} catch (Exception e) {logger.error("文件:{}, 上传错误!, ", dst, e);return false;}
}

以上代码,如果多个请求同时过来,
会报 java.nio.channels.ClosedChannelException: null at org.apache.hadoop.hdfs.ExceptionLastSeen.throwException4Close

网上居然很难找到正确答案,经过多次尝试,修改后,

public boolean uploadFile(MultipartFile file, String dst) {try {long start = System.currentTimeMillis();// 创建Hadoop配置对象Configuration config = new Configuration();config.set("fs.defaultFS", hdfsUri);Path dstPath = new Path(ROOT_PATH + dst);FileSystem fs = dstPath.getFileSystem(config);// 上传文件到HDFSInputStream in = new BufferedInputStream(file.getInputStream());OutputStream out = fs.create(dstPath);IOUtils.copyBytes(in, out, 4096, true);in.close();// 关闭FileSystem对象<font color="red">// fs.close();</font>long end = System.currentTimeMillis();logger.info("文件名称: {} 耗时: {}", dst, end - start);return true;} catch (Exception e) {logger.error("文件:{}, 上传错误!, ", dst, e);return false;}
}

如上,不要执行fs.close();就好了。

原因:

经过查阅资料和查看源码,
FileSystem fs = dstPath.getFileSystem(config); 不是新建,而是从CACHE中拿。
所以多个请求关了同一个fs。

参考:
https://arganzheng.life/hadoop-filesystem-closed-exception.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第177期】基于matlab的蜘蛛蜂优化算法(SWO)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蜘蛛蜂优化算法&#xff08;Spider Wasp Optimization, SWO&#xff09;是一种启发式算法&#xff0c;它受到自然界中蜘蛛和蜂这两种生物的行为模式启发而开发。这一算法主要模拟了蜘蛛捕食与蜂群社会行为之间的相互作用&…

Mac brew 安装软件

Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…

网络以太网之(1)基础概念

网络以太网之(1)基础概念 Author: Once Day Date: 2024年4月1日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

C语言-----数据在内存中的存储(1)

1.整数在内存中的存储 我们之前就了解过整数的二进制写法分别有3种&#xff0c;分别为原码&#xff0c;反码&#xff0c;补码。整型在内存中存储的是补码。 原码&#xff0c;反码&#xff0c;补码都有自己的符号位和数值位&#xff0c;符号位为1时&#xff0c;则表示负数&…

os模块篇(十四)

文章目录 os.renames(old, new)os.replace(src, dst, *, src_dir_fdNone, dst_dir_fdNone)os.rmdir(path, *, dir_fdNone)os.scandir(path.)os.stat(path, *, dir_fdNone, follow_symlinksTrue)os.statvfs(path) os.renames(old, new) os.renames(old, new) 是 Python 的 os 模…

一些常见的Prometheus+Grafana问题和答案:

什么是Prometheus&#xff1f;它的主要功能是什么&#xff1f; Prometheus是一个开源的系统监控和报警工具。它通过收集和存储时间序列数据&#xff0c;提供了强大的查询语言和灵活的报警规则&#xff0c;可以帮助监控和分析系统的性能指标。 Prometheus的数据模型是什么样的…

LLM记录1

LLM的知识库问答有3种实现路径&#xff1a;RAG 或 微调&#xff0c;或两者结合。 RAG&#xff1a;低成本易部署&#xff0c;适用于知识会更新的场景&#xff0c;但知识内容多的情况下&#xff0c;检索成本会变高。微调&#xff1a;算力成本高&#xff0c;微调效果不稳定&#x…

全量知识系统 程序详细设计之 “起点”(递归原始版本)

原文 以下是对全知系统程序详细设计的设计起点的考虑。 关于“程序program” 数据模式--“程序”的基础--数型&#xff08;构造型&#xff09;&#xff1a;数值型、数字型和数据型 。 其中&#xff0c; 1其程序模式--结构化或自动化&#xff08;描述了“数据”的关系型rel…

【Docker笔记05】【网络模式】

一、前言 本系列是根据 B 站 尚硅谷 Docker 视频 学习记录笔记。因为没有视频课件&#xff0c;部分内容摘自 https://www.yuque.com/tmfl/cloud/dketq0。 本系列仅为自身学习笔记记录使用&#xff0c;记录存在偏差&#xff0c;推荐阅读原视频内容或本文参考笔记。 二、简单介…

靠谱的wordpress建站公司怎么选 建网站避坑指南

在选择WordPress建站公司时&#xff0c;查看其建站案例作品是非常重要的。这确实是一个可以直接反映公司实力和信誉的方面。神马都是浮云&#xff0c;作品给力才行。以下是一些建议&#xff0c;帮助您更好地评估一个WordPress建站公司是否靠谱&#xff1a; 1. 查看案例的真实性…

通用开发技能系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 通用开发技能系列 文章&#xff0c;主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证 每个请求都需要将 用户名密码 进行base64编码后&#xff0c;放在请求头的A…

Vaadin框架是如何处理前后端交互的?列举几个Vaadin中常用的UI组件,并描述它们的作用。如何使用Vaadin的布局管理器来构建复杂的用户界面?

Vaadin框架是如何处理前后端交互的&#xff1f; Vaadin框架处理前后端交互的方式主要基于服务端渲染和事件驱动的编程模型。以下是具体的处理过程&#xff1a; 服务端渲染&#xff1a;Vaadin应用程序的UI组件是在服务器端创建和渲染的。当用户在浏览器中访问应用程序时&#x…

基于隐私保护的可追踪可撤销密文策略属性加密方案论文阅读

论文是2022年发表的A Traceable and Revocable Ciphertext-Policy Attribute-based Encryption Scheme Based on Privacy Protection 摘要 本篇论文提出了一种具有用户撤销、白盒追踪、策略策略隐藏功能的CP-ABE方案。在该方案中密文被分为两个部分&#xff1a;第一个部分是和…

算法训练营30天|LeetCode 332.重新安排行程 51.N皇后 37.解数独

LeetCode 332.重新安排行程 题目链接&#xff1a; LeetCode 332.重新安排行程 代码&#xff1a; class Solution { public:unordered_map<string, map<string, int>> targets;bool backtracking(int ticketnum, vector<string>&result){if(result.si…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线商城系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理…

第六期丨酷雷曼无人机技能培训

第6期无人机技能提升培训 盼望着盼望着&#xff0c;第六期无人机技能提升培训会终于如期和大家见面了。 2024年1月1日&#xff0c;国务院、中央军事委员会颁布《无人驾驶航空器飞行管理暂行条例》&#xff0c;对民用无人机飞行活动实施更为严格的规范约束&#xff0c;越来越多…

阿里云服务器安装Java开发环境最佳实践

服务器环境安装 环境依赖服务器配置配置SSH登录打开安全配置端口远程连接配置秘钥 Linux服务器常用指令向远程服务器传送文件systemctl 相关 安装MySql安装步骤step1 检查并清除以前的mysql相关文件step2 安装step3 MySQL参数配置step4 设置开机启动step5 初始化数据库step6配置…

ABAP开发中常用弹窗的应用详解

在ABAP程序设计中为提示和交互的需要会经常用到弹窗&#xff0c; 所谓弹窗就是弹出一个框&#xff0c;告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等&#xff0c;它价值在于通过提示、提醒、警告&#xff0c;帮助用户顺利完成业务流程中的必要操作或给用户提供实…

【JS】打乱数组顺序,用作领域:随机播放音乐

思路 循环数组随机获取数组下标取值&#xff1a; 取当前随机下标数组取当前循环的下标数组 相互替换步骤3的数组 /*** 随机数组顺序* param {Array} arr 数组* returns Array*/ const shufArr arr > {for (let i arr.length - 1; i > 0; i--) {const j Math.floor(M…

中国智慧城管哪家做的好?

智慧城市管理综合执法系统建立全市统一的法律法规、裁量基准、执法事项、执法文书和基础信息库&#xff0c;实现从获取线索、立案、调查、处理到结案全过程的信息化和文书制作的智能化。全面支持移动执法办案&#xff0c;提高执法效率。 技术架构&#xff1a; 微服务javasprin…