赞
踩
(上传一个hadoop-2.7.7.tar.gz安装包)
要求:
(1)以Java API方式写代码完成文件夹创建;
(2)以Java API文件流的方式完成hadoop-2.7.7.tar.gz文件的上传;
package hadoop; //多个文件 //一个文件多个文件块,一个块放在多个host上 //三级循环 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; 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.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.apache.hadoop.io.IOUtils; /** * * hdfs常用api */ public class HDFSAPITest { public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://hadoop01:9000"), conf, "hadoop01"); // 创建文件夹/data Path path = new Path("/data"); // 文件是否存在 boolean b = fs.exists(path); if (!b) { fs.mkdirs(path); } // //删除文件夹的操作 // fs.delete(path); // fs.deleteOnExit(path); // fs.delete(path, true); // 获取指定目录下的文件列表 只能获取文件列表,获取不到文件夹 shift+Ctrl+L RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(path, false); // 遍历迭代器 while (listFiles.hasNext()) { LocatedFileStatus next = listFiles.next(); System.out.println(next.getPath()); System.out.println(next.getReplication()); // 返回每一个文件的块信息,数组长度代表块的个数,每一个块代表数组中的一个元素 BlockLocation[] blockLocations = next.getBlockLocations(); for (BlockLocation bl : blockLocations) { System.out.println(bl); System.out.println("block size=" + bl.getLength()); } } // 获取指定目录下的文件状态信息 FileStatus[] listStatus = fs.listStatus(new Path("/")); for (FileStatus fst : listStatus) { System.out.println(fst); System.out.println(fst.isDirectory()); System.out.println(fst.isFile()); System.out.println(fst.getBlockSize()); } // 流的形式上传/下载 IOUtils工具类 //文件上传:本地(输入流)普通的java输入流-----hdfs(输出流) FileInputStream in = new FileInputStream(new File("D:\\hadoop-2.7.7.tar.gz"));//本地windows系统的文件路径 FSDataOutputStream out = fs.create(new Path("/data/package")); // 必须指定hdfs目录一个文件,如果没有可以先建 IOUtils.copyBytes(in, out, 4096); // 文件下载:hdfs(输入流)----本地(输出流) FSDataInputStream fsin = fs.open(new Path("/data/package")); FileOutputStream fsout = new FileOutputStream(new File("D:\\")); IOUtils.copyBytes(fsin, fsout, 4096); // IOUtils操作完会自动关闭流,不用再执行 in.close() 和 out.close() } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。