Hadoop之HDFS的API实现
在本地Eclipse上开发;
导入开发所需的关键包:
将HDFS配置文件信息写入,记住是new Source folder文件夹名称名称必须是conf
下面是API,都有详细备注,欢迎学习指正。
package com.hadoop.hdfs; 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.Path; import org.apache.hadoop.hdfs.DistributedFileSystem; import org.apache.hadoop.hdfs.protocol.DatanodeInfo; import org.apache.hadoop.io.IOUtils; import org.junit.Test; public class HDFStest { /** * 读取文件内容 */ @Test public void readFile() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //文件名称 Path path = new Path("/wc/01.txt"); //打开文件输入流 ---- opne() FSDataInputStream fdi = hdfs.open(path); //读取文件内容到控制台显示 ---- read() IOUtils.copyBytes(fdi, System.out, 4096,false); //关闭流 ---- close() IOUtils.closeStream(hdfs); } /** * 查看目录 */ @Test public void readDir() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //查看目录 Path path = new Path("/"); //获取目录下信息 FileStatus[] fileStatus = hdfs.listStatus(path); //循环遍历输出信息到控制台 for(FileStatus fs :fileStatus){ Path p = fs.getPath(); String info = fs.isDir()?"目录":"文件"; System.out.println(info + " " + p); } } /** * 创建目录 */ @Test public void mkdir() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //在该目录下创建 Path path = new Path("/ddddddd"); //创建文件夹 boolean isSuccess = hdfs.mkdirs(path); String indo = isSuccess ? "yes":"no "; System.out.println("创建目录是否成功【" + path + "】" + indo); } /** * 从本地上传文件 */ @Test public void copyFromLocal() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //本地文件(目录+文件名称) Path src = new Path("d:/01.log"); //HDFS文件上传路径 Path dfsPath = new Path("/ddddddd"); //文件上传 hdfs.copyFromLocalFile(src, dfsPath); } /** * 创建HDFS文件并写入 */ @Test public void createFile() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //写入文件 Path path = new Path("/wc/test/ucky.txt"); //创建文件02.txt FSDataOutputStream fsdos = hdfs.create(path); //通过流向文件写入数据 fsdos.writeUTF("Hello World"); IOUtils.closeStream(fsdos); } /** * 删除HDFS文件 */ @Test public void deletFile() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //删除文件位置 Path src = new Path("/wc/test/ucky.txt"); //调用API删除文件 boolean flag = hdfs.deleteOnExit(src); System.out.println(flag?"success":"fail"); } /** * 删除HDFS文件夹 */ @Test public void deletDir() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //删除文件位置 Path src = new Path("/wc/test/ceshi/"); //调用API删除文件 boolean flag = hdfs.delete(src,true); System.out.println(flag?"success":"fail"); } /** * 重命名文件 */ @Test public void renameFile() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //原来文件名 Path oldSrc = new Path("/wc/test/ucky.txt"); //新文件名 Path newSrc = new Path("/wc/test/ucky7.txt"); //调用API删除文件 boolean flag = hdfs.rename(oldSrc, newSrc); System.out.println(flag?"success":"fail"); } /** * 查找某个文件在HDFS集群的位置 */ @Test public void Location() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //获取该文件在集群上的位置 Path path = new Path("/wc/test/ucky.txt"); //获取文件状态 FileStatus fileStatus = hdfs.getFileStatus(path); //获取文件快信息 BlockLocation[] blockLocation = hdfs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen()); for(BlockLocation b:blockLocation){ String[] hosts = b.getHosts(); for(String s:hosts){ //输出主机名 System.out.println(s); } } } /** * 获取HDFS集群上所有节点名称信息 */ @Test public void cluster() throws Exception{ //获取文件配置信息 Configuration conf = new Configuration(); //获取文件系统 FileSystem hdfs = FileSystem.get(conf); //类型转换到DistributedFileSystem DistributedFileSystem disHDFS = (DistributedFileSystem)hdfs; //获取DataNode状态 DatanodeInfo[] datanodeInfo = disHDFS.getDataNodeStats(); //获取DataNode信息 for(DatanodeInfo di : datanodeInfo){ di.getHostName(); } } }
自己进行测试吧~坚持~