HDFS文件操作有哪些

97次阅读
没有评论

这篇文章将为大家详细讲解有关 HDFS 文件操作有哪些,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

HDFS 的文件操作

格式化 HDFS

命令:user@namenode :Hadoop$bin/hadoop namenode -format

启动 HDFS

命令:user@namenode :hadoop$bin/start-dfs.sh

列出 HDFS 上的文件

命令:user@namenode :hadoop$bin/hadoop dfs -ls

使用 hadoop API

public List String[] GetFileBolckHost(Configuration conf, String FileName) { 

      try { 

       List String[] list = new ArrayList String[]  

       FileSystem hdfs = FileSystem.get(conf);

       Path path = new Path(FileName); 

       FileStatus fileStatus = hdfs.getFileStatus(path); 

       BlockLocation[] blkLocations = hdfs.getFileBlockLocations( 

             fileStatus, 0,fileStatus.getLen()); 

       int blkCount = blkLocations.length;

       for (int i = 0; i blkCount; i++) {

           String[] hosts =blkLocations.getHosts(); 

            list.add(hosts); 

       } 

       return list; 

      } catch (IOException e) { 

       e.printStackTrace(); 

      } 

      return null; 

    }

在 HDFS 上创建目录

命令:user@namenode :hadoop$bin/hadoop dfs -mkdir / 文件名

使用 hadoop API

//  在 HDFS 新建文件  

   public FSDataOutputStream CreateFile(Configuration conf, StringFileName) { 

      try { 

       FileSystem hdfs = FileSystem.get(conf);

       Path path = new Path(FileName); 

       FSDataOutputStream outputStream = hdfs.create(path); 

       return outputStream; 

      } catch (IOException e) { 

       e.printStackTrace(); 

      } 

      return null; 

}

上传一个文件到 HDFS

命令:user@namenode :Hadoop$ bin/hadoopdfs -put 文件名 /user/yourUserName/

使用 hadoop API

// 上传文件到 HDFS 

    public voidPutFile(Configuration conf, String srcFile, String dstFile) { 

     try { 

         FileSystem hdfs =FileSystem.get(conf); 

         Path srcPath = newPath(srcFile); 

         Path dstPath = newPath(dstFile); 

       hdfs.copyFromLocalFile(srcPath, dstPath); 

     } catch (IOExceptione) { 

       e.printStackTrace(); 

     } 

    }

从 HDFS 中导出数据

命令:user@namenode:hadoop$ bin/hadoopdfs -cat foo

使用 hadoop API

// 从 HDFS 读取文件

    public voidReadFile(Configuration conf, String FileName) {

     try { 

         FileSystem hdfs =FileSystem.get(conf); 

         FSDataInputStreamdis = hdfs.open(new Path(FileName)); 

       IOUtils.copyBytes(dis, System.out, 4096, false); 

         dis.close(); 

     } catch (IOExceptione) { 

       e.printStackTrace(); 

     } 

    }

HDFS 的关闭

命令:user@namenode:hadoop$bin/stop-dfs.sh

HDFS 全局状态信息

命令:bin/Hadoop dfsadmin -report

我们可以得到一份全局状态报告。这份报告包含了 HDFS 集群的基本信息,当然也有每台机器的一些情况。

以上讲的都是本地操作 HDFS,都是基于在 Ubuntu 下并配置有 hadoop 环境下对 HDFS 的操作,作为客户端也可以在 window 系统下远程的对 HDFS 进行操作,其实原理基本上差不多,只需要集群中 namenode 对外开放的 IP 和端口,就可以访问到 HDFS

/**

* 对 HDFS 操作

* @author yujing

*

*/ 

public class Write { 

    public static voidmain(String[] args) { 

     try { 

       uploadTohdfs(); 

         readHdfs(); 

       getDirectoryFromHdfs(); 

     } catch(FileNotFoundException e) { 

         e.printStackTrace(); 

     } catch (IOExceptione) { 

       e.printStackTrace(); 

     } 

    } 

 

    public static voiduploadTohdfs() throws FileNotFoundException, IOException { 

     String localSrc = D://qq.txt  

     String dst = hdfs://192.168.1.11:9000/usr/yujing/test.txt  

     InputStream in = newBufferedInputStream(new FileInputStream(localSrc)); 

     Configuration conf =new Configuration(); 

     FileSystem fs =FileSystem.get(URI.create(dst), conf); 

     OutputStream out =fs.create(new Path(dst), new Progressable() {

         public voidprogress() { 

           System.out.println(.

         } 

     }); 

      System.out.println(上传文件成功  

     IOUtils.copyBytes(in,out, 4096, true); 

    } 

 

    /** 从 HDFS 上读取文件 */ 

    private static voidreadHdfs() throws FileNotFoundException, IOException { 

     String dst = hdfs://192.168.1.11:9000/usr/yujing/test.txt  

     Configuration conf =new Configuration(); 

     FileSystem fs =FileSystem.get(URI.create(dst), conf); 

     FSDataInputStreamhdfsInStream = fs.open(new Path(dst)); 

 

     OutputStream out = newFileOutputStream(d:/qq-hdfs.txt

     byte[] ioBuffer = newbyte[1024]; 

     int readLen =hdfsInStream.read(ioBuffer); 

 

     while (-1 != readLen){ 

       out.write(ioBuffer, 0, readLen); 

         readLen =hdfsInStream.read(ioBuffer); 

     } 

      System.out.println(读文件成功  

     out.close(); 

     hdfsInStream.close(); 

     fs.close(); 

    } 

 

    /**

    * 以 append 方式将内容添加到 HDFS 上文件的末尾; 注意:文件更新,需要在 hdfs-site.xml 中添 property name dfs.

    *append.support /name value true /value /property

    */ 

    private static voidappendToHdfs() throws FileNotFoundException,

         IOException { 

     String dst = hdfs://192.168.1.11:9000/usr/yujing/test.txt  

     Configuration conf =new Configuration(); 

     FileSystem fs =FileSystem.get(URI.create(dst), conf); 

     FSDataOutputStream out= fs.append(new Path(dst)); 

 

     int readLen = zhangzk add by hdfs java api .getBytes().length; 

 

     while (-1 != readLen){ 

       out.write(zhangzk add by hdfs java api .getBytes(), 0,readLen); 

     } 

     out.close(); 

     fs.close(); 

    } 

 

    /** 从 HDFS 上删除文件 */ 

    private static voiddeleteFromHdfs() throws FileNotFoundException,

         IOException { 

     String dst = hdfs://192.168.1.11:9000/usr/yujing  

     Configuration conf =new Configuration(); 

     FileSystem fs =FileSystem.get(URI.create(dst), conf); 

     fs.deleteOnExit(newPath(dst)); 

     fs.close(); 

    } 

 

    /** 遍历 HDFS 上的文件和目录 */ 

    private static voidgetDirectoryFromHdfs() throws FileNotFoundException, 

         IOException { 

     String dst = hdfs://192.168.1.11:9000/usr/yujing  

     Configuration conf =new Configuration(); 

     FileSystem fs =FileSystem.get(URI.create(dst), conf); 

     FileStatus fileList[]= fs.listStatus(new Path(dst)); 

     int size =fileList.length; 

     for (int i = 0; i size; i++) { 

       System.out.println(文件名 name: + fileList.getPath().getName() 

             + 文件大小 /t/tsize: +fileList.getLen()); 

     } 

     fs.close(); 

    } 

 

}

我们可以通过 http:// 主机 IP:50030 就可以查看集群的所有信息,也可以查看到自己上传到 HDFS 上的文件。

关于“HDFS 文件操作有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。