从本地上传整个目录到hdfs的java程序
2023-09-14 09:10:27 时间
首先在网上找了好久没有找到从本地文件系统上传整个目录到hdfs文件系统的程序,权威指南上也没有,都是单个文件上传,所以这里自己编写了一个程序,封装成jar包执行能够复制。
先说明一下代码:须要手动输入两个路径,一个本地文件/目录路径,第二个是hdfs目录路径。好直接上代码:
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Progressable; /** * * @author zlqiao * */ public class Copy { public static void main(String[] args) throws Exception { if(args.length < 2){ System.out.println("Please input two number"); System.exit(2); } String localSrc = args[0]; String dst = args[1]; Configuration conf = new Configuration(); File srcFile = new File(localSrc); if(srcFile.isDirectory()){ copyDirectory(localSrc , dst , conf); }else{ copyFile(localSrc, dst, conf); } } /** * 复制文件 * @param src * @param dst * @param conf * @return * @throws Exception */ public static boolean copyFile(String src , String dst , Configuration conf) throws Exception{ FileSystem fs = FileSystem.get(conf); fs.exists(new Path(dst)); //FileStatus status = fs.getFileStatus(new Path(dst)); File file = new File(src); InputStream in = new BufferedInputStream(new FileInputStream(file)); /** * FieSystem的create方法能够为文件不存在的父文件夹进行创建, */ OutputStream out = fs.create(new Path(dst) , new Progressable() { public void progress() { System.out.print("."); } }); IOUtils.copyBytes(in, out, 4096, true); return true; } /** * 复制文件夹 * @param src * @param dst * @param conf * @return * @throws Exception */ public static boolean copyDirectory(String src , String dst , Configuration conf) throws Exception{ FileSystem fs = FileSystem.get(conf); if(!fs.exists(new Path(dst))){ fs.mkdirs(new Path(dst)); } System.out.println("copyDirectory:"+dst); FileStatus status = fs.getFileStatus(new Path(dst)); File file = new File(src); if(status.isFile()){ System.exit(2); System.out.println("You put in the "+dst + "is file !"); }else{ dst = cutDir(dst); } File[] files = file.listFiles(); for(int i = 0 ;i< files.length; i ++){ File f = files[i]; if(f.isDirectory()){ copyDirectory(f.getPath(),dst,conf); }else{ copyFile(f.getPath(),dst+files[i].getName(),conf); } } return true; } public static String cutDir(String str){ String[] strs = str.split(File.pathSeparator); String result = ""; if("hdfs"==strs[0]){ result += "hdfs://"; for(int i = 1 ; i < strs.length ; i++){ result += strs[i] + File.separator; } }else{ for(int i = 0 ; i < strs.length ; i++){ result += strs[i] + File.separator; } } return result; } }
相关文章
- 《Java 并发编程的艺术》迷你书
- maven 上传 java工程源码到私服
- 解决:使用java连接Fastdfs,上传文件时报:SocketTimeOutException的问题
- JAVA模拟PostObject表单上传OSS,实现签名直传
- 使用ueditor实现多图片上传案例——实体类(Shopping.java)
- java通过commons-fileupload实现多张图片的上传(jsp页面)
- java通过commons-fileupload实现多张图片的上传(servlet)
- Java文件上传
- Java实现 LeetCode 74 搜索二维矩阵
- java实现洛谷P3376【模板】网络最大流
- java实现数组转置
- Java实现堆排序问题(变治法)
- Java实现 蓝桥杯VIP 算法提高 开灯游戏
- Java实现 蓝桥杯VIP 算法提高 快速幂
- (Java实现) 洛谷 P1051 谁拿了最多奖学金
- Java客户端通过Http发送POST请求上传文件到web服务器
- java struts2入门学习实例--使用struts2快速实现多个文件上传
- java struts2入门学习实例--使用struts2快速实现上传
- 上传Android或Java库到Maven central repository(转载)
- Hadoop Java客户端操作hdfs实现文件上传操作
- atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- atitit. 文件上传带进度条 atiUP 设计 java c# php
- atitit. 文件上传带进度条 atiUP 设计 java c# php
- Atitit. 异常的使用总结最佳实践java .net php Vo8f
- java 大文件上传 断点续传 完整版实例 (Socket、IO流)
- java多线程分块上传并支持断点续传最新修正完整版本[转]
- java中接口的定义与实现
- 【最详细】最新最全Java虚拟机(JVM)面试题(51道)
- java long类型报错:error: integer number too large