标签:
自定义方法将本地多个小文件合并成一个大文件上传到HDFS上。
package test; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocalFileSystem; import org.apache.hadoop.fs.Path; public class PutMerge { public static void main(String[] args) throws Exception { //配置环境变量 System.setProperty("hadoop.home.dir", "F:\\JAVA\\hadoop-2.2.0"); Configuration conf = new Configuration(); /** * 获取HDFS * 其中URI的使用,可以使得下面对于HDFS的路径使用简写 */ FileSystem dfs = FileSystem.get(new URI("hdfs://hadoop01:9000"), conf); //输出流 FSDataOutputStream outputStream = dfs.create(new Path("/wc/test/a/a.data"), true); /** * 获取本地FS */ LocalFileSystem lfs = FileSystem.getLocal(conf); /** * 获取要上传的路径 * 由于是文件家,所以使用 listStatus()方法 */ FileStatus[] listStatus = lfs.listStatus(new Path("e:\\b")); //缓冲区 byte[] buffer =new byte[1024]; int len=0; //循环遍历文件夹 for(FileStatus file : listStatus){ //打印当前读取的文件名 System.out.println(file.getPath().toString()); //输入流 FSDataInputStream inputStream = lfs.open(file.getPath()); //循环读取,输出 while((len=inputStream.read(buffer))>0){ outputStream.write(buffer, 0, len); } inputStream.close(); } outputStream.close(); } }
标签:
原文地址:http://www.cnblogs.com/skyl/p/4732318.html