写在前面:

这是关于HDFS的api org.apache.hadoop.fs 小科普和吐槽,不过这个问题没有看过类似的,有一点提的价值。这个问题是实现需求:移动一个文件从一个目录到另一个目录。


实现方案

实现了后确实很简单,先创建对象,然后调用api就行。

 /*** 获取hdfs的文件系统对象** @return FileSystem* @throws IOException 打开HDFS文件系统异常*/public static FileSystem createFileSystemInstance() throws IOException {Configuration conf = new Configuration();return FileSystem.get(conf);}  /*** 移动hdfs上目录或文件到* @param path 当前路径* @param newPath 目标路径* @return 是否移动成功*/public static boolean mv(String path,String newPath) {boolean result = false;FileSystem fs = null;try {fs =  HDFSUtil.createFileSystemInstance();if (!fs.exists(new Path(newPath))){result=fs.rename(new Path(path),new Path(newPath)); }else {LOGGER.warn("HDFS上目录: {} 被占用!",newPath);}} catch (Exception e) {LOGGER.error("移动HDFS上目录:{} 失败!", path, e);} finally {//close(fs);}return result;}

但调用的api十分有趣:rename,没错 就是重命名,尤其是linux的移动命令都是 hadoop fs -mv的时候。但最后就是这个重命名的api实现了需求(真的迷)

最开始在org.apache.hadoop.fs 找到两个与移动相关的api moveToLocalFile和 moveFromLocalFile 会在运行中显示找不到源文件,我觉得这两个api的作用是用在本机和集群之间的文件传输(待验证),但显然无法作用于hdfs系统的文件之间。


11.9补充

实际上有更好的实现,可以完成模糊查询数据追加等操作

 /***@param prePath 需要合并的文件目录* @param resPath 合并输出的文件名*                合并文件 读取文件的目录 然后依次读文件并合并输出到一个文件中,并删除原文件*                不处理递归*/public static void mergeFile(String prePath, String resPath) throws Exception {FileSystem hdfs = HDFSUtil.createFileSystemInstance();//获取文件目录(采用模糊查询的方法)FileStatus[] fileStatuses = hdfs.globStatus(new Path(prePath));//创建文件输出流FSDataOutputStream fsOutStream = hdfs.create(new Path(resPath), true);try {for (FileStatus fs : fileStatuses) {Path tmpPath = fs.getPath();Boolean isFile = fs.isDirectory() ? false : true;//只操作文件if (isFile) {System.out.println(tmpPath.getName());//打开文件流FSDataInputStream inStream = hdfs.open(tmpPath);//读取文件内容到输出文件流IOUtils.copyBytes(inStream, fsOutStream, 4096, false);//关闭临时的输入流IOUtils.closeStream(inStream);//删除原文件,去掉后就是不删除原文件hdfs.delete(tmpPath, true);}}} catch (Exception ex) {System.out.println(ex.toString());} finally {//关闭输出流//   IOUtils.closeStream(fsOutStream);}}

HDFS集群内文件移动的Java实现相关推荐

  1. 安装hdfs集群的具体步骤

    一.首先需要准备N台linux服务器 学习阶段,用虚拟机即可! 先准备4台虚拟机:1个namenode节点  + 3 个datanode 节点 二.修改各台机器的主机名和ip地址 主机名:hdp-01 ...

  2. Java API访问HDFS集群(HA)

    title: Java API访问HDFS集群(HA) date: 2021-06-23 17:06:11 tags: HDFS hadoopV2版本及以后都是HA架构,active namenode ...

  3. hadoop java访问_Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群

    上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat xxx ...

  4. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    阅读目录(Content) 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 1.2.数据块(data block)简介 1.3.对分布式文件系统中的块进行抽象会带来很多好处 二.Jav ...

  5. 在IDEA中创建maven项目编写java代码操作HDFS集群

    一.安装win10编译过的hadoop 1.将编译好的hadoop包放在非中文目录 2.配置HADOOP_HOME环境变量 3.将hadoop包的bin目录加到PATH环境变量中 二.在idea中创建 ...

  6. java集群解析文件_干货:一文详解Redis集群原理核心内容

    集群原理 一个系统建立集群主要需要解决两个问题:数据同步问题和集群容错问题. Naive方案 一个简单粗暴的方案是部署多台一模一样的Redis服务,再用负载均衡来分摊压力以及监控服务状态.这种方案的优 ...

  7. Java API 访问HA模式下的HDFS集群

    在使用Hadoop Java API访问HDFS集群时,在创建FileSystem对象时,直接指定NameNode的IP以及端口号即可.但是在HA模式下,访问HDFS集群却有一些不同,需要指定Name ...

  8. 独家 | 带你认识HDFS和如何创建3个节点HDFS集群(附代码案例)

    作者:尼廷·兰詹(Nitin Ranjan) 翻译:陈之炎 校对:王威力 本文约1500字,建议阅读5分钟. 在本文中,大数据专家将为您介绍如何使用HDFS以及如何利用HDFS创建HDFS集群节点. ...

  9. docker下,极速搭建spark集群(含hdfs集群)

    搭建spark和hdfs的集群环境会消耗一些时间和精力,处于学习和开发阶段的同学关注的是spark应用的开发,他们希望整个环境能快速搭建好,从而尽快投入编码和调试,今天咱们就借助docker,极速搭建 ...

最新文章

  1. Struts2 中#、@、%和$符号的用途
  2. Microsoft Dynamics CRM 2011 多客户端安装共用同一Sql Server 实例设置
  3. 天翼云从业认证(4.12) 天翼云医疗行业解决方案
  4. 以下python语言关键字在异常处理_【单选题】以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( )...
  5. OpenGL多窗口示例
  6. python中填充颜色结束的程序_在ttk/python中更改标签小部件的填充颜色
  7. 字节跳动入局全网搜索;思科回应中国区裁员;IntelliJ IDEA 新版发布! | 极客头条...
  8. 10岁女程序员,婉拒谷歌Offer,研发全球首款AI桌游,现在是一名CEO
  9. ASP.NET适合做互联网吗,适合做电子商务平台吗?
  10. 大连理工大学计算机科学世界排名,喜忧参半!2021年5月ESI世界大学排行榜,21个学科排名数据分析!...
  11. JAVA作业-简易计算器
  12. 【Low版】HAUT - OJ - Contest1035 - 2017届新生周赛(六)题解
  13. 软考和华为证书的含金量,哪个更适合找工作
  14. scara机器人动荷载_【机器人在线】SCARA机械结构参数计算说明 下
  15. 手机射频功放指标介绍
  16. ARM7、ARM9、ARM11、ARM-Cortex的关系
  17. Java虚拟机之字节码查看工具
  18. HTTPS网页打开缓慢或者打不开
  19. PS(2018)更换启动界面
  20. 武汉智慧工地管理系统能帮助建筑施工提升质量吗?

热门文章

  1. 【CodeForces】【DP】14E Camels
  2. 基于RFID技术的智能门禁系统设计(控制部分)
  3. java tcp门禁_门禁控制器的TCP/IP协议功能
  4. PTA L1-020 帅到没朋友 (20 分)(C++)
  5. xbox sdk_因此,您只是获得了Xbox Xbox。 怎么办?
  6. 带你认识网络世界,什么是网络协议、分层有什么好处
  7. 校园二手商城小程序,手把手带你开发一款云开发版商城小程序,校园二手微信小程序,可升级社区团购小程序
  8. 三态内容寻址存储器(TCAM)工作原理
  9. 罗克韦尔自动化启用位于硅谷的新建电动汽车创新中心
  10. dl----算法常识100例