从本地上传整个目录到hdfs的java程序
2014-10-02 14:44
501 查看
首先在网上找了好久没有找到从本地文件系统上传整个目录到hdfs文件系统的程序,权威指南上也没有,都是单个文件上传,所以这里自己编写了一个程序,封装成jar包执行能够复制。
先说明一下代码:须要手动输入两个路径,一个本地文件/目录路径,第二个是hdfs目录路径。好直接上代码:
先说明一下代码:须要手动输入两个路径,一个本地文件/目录路径,第二个是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; } }
相关文章推荐
- 从本地上传整个文件夹到hdfs的java程序
- java实现Starteam检索本地未上传到服务器的目录
- 用java程序把本地的一个文件拷贝到hdfs上并显示进度
- 用Perl写的自动上传整个目录的程序
- java在远程linux服务器中切换目录和新建目录,把本地文件上传到新建的目录中
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
- java在远程linux服务器中切换目录和新建目录,把本地文件上传到新建的目录中
- CaptainGan------使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
- Spark streaming不同数据来源(socket套接字、hdfs目录)和存储位置(hdfs、本地)的java代码
- java上传本地文件到HDFS简单demo
- hadoop生态系统学习之路(三)java实现上传文件(本地或ftp)至hdfs
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- <实战> 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器 推荐
- JAVA实现:将文件从本地上传到HDFS上、从HDFS上读取等操作
- 请问哪位高手知道用Apache Commons Net包实现javaFTP上传整个目录(文件夹)
- JAVA实现批量上传本地文件至HDFS
- 获取 JAVA 程序当前的工作目录
- 在本地我们调试运行AJAX.NET程序完全没有问题,但是一旦上传到服务器就会出现很多Web.config文件异常