立即注册 登录
About云-梭伦科技 返回首页

不羁的青春 https://www.aboutyun.com/?4073 [收藏] [复制] [分享] [RSS] 不要在该奋斗的年纪而去选择安逸的生活!!!

日志

HDFS API操作示例(一)

已有 1094 次阅读2014-10-13 15:30 |个人分类:HDFS

Hadoop中关于文件操作的类基本上位于org.apache.hadoop.fs包中,这些API能够支持的操作包括:打开文件、读/写文件,删除文件等。
Hadoop类库中最终面向用户提供的接口类是FileSystem,该类是个抽象类,只能通过该类的get方法得到具体类。get方法存在几个重载版本,下面是get常用的方法。
static FileSystem get(Configuration conf);
该类封装了几乎所有的文件操作,如mkdir、delete等。综上基本上可以得到文件操作的基本框架

operator(){
}
1、上传本地文件
通过FileSystem.copyFromLocalFile(PATH src,PATH dst)可以讲本地文件上传到HDFS的指定位置上,其中src 和 dst均为文件的完整路径。具体实例如下:
package org.hdoop.practice.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class CopyFile {

       public static void main(String[] args) {
             try {
                  Configuration conf = new Configuration();
                  FileSystem hdfs=FileSystem. get(conf);
                   //设置本地文件
                  Path src= new Path("E:\\qt" );
                   //设置上传数据的路径
                  Path dst= new Path("/" );
                   /*
                   * 通过FileSystem.copyFromLocalFile(Path src,Path dst);
                   * 可将本地文件上传到HDFS的指定位置
                   * **/
                  hdfs.copyFromLocalFile(src, dst);
                  System. out.println("Upload to"+conf.get("fs.default.name"));
                  FileStatus[] files=hdfs.listStatus(dst);
                   for(FileStatus file:files){
                        System. out.println(file.getPath());
                  }
            } catch (IOException e) {
                  e.printStackTrace();
            }
      }
}
代码解析:把本地文件上传到HDFS中,首先设置本地文件的路径,接下来设置上传到HDFS的目录,本地路径和HDFS路径必须是完整的路径,采用FileSystem.copyFromLocal(Path src,Path dst)可将本地文件上传到HDFS的指定位置上。运行结果可以通过控制台、项目浏览器、和SecureCRT查看。
控制台查看结果:
项目浏览器查看结果:
SecureCRT查看结果:


2、创建HDFS文件
通过FileSystem.create(Path f)可以在HDFS上创建文件,其中f为文件的完整路径。具体实现代码如下:
package org.hdoop.practice.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class CreateFile {

       public static void main(String[] args) {
             try {
                  Configuration conf= new Configuration();
                  FileSystem hdfs=FileSystem. get(conf);
                   byte[] buff="hello hadoop world!\n" .getBytes();
                   //设置文件的路径
                  Path dfs= new Path("/test" );
                   //采用FileSystem.create(Path f)创建文件
                  FSDataOutputStream outputStream=hdfs.create(dfs);
                  outputStream.write(buff, 0,buff. length);
            } catch (IOException e) {
                  e.printStackTrace();
            }
      }
}
代码解析:定义类CreateFile,通过Path dfs=new Path("/test");设置创建文件的路径,采用FileSystem.create(Path f);创建文件,最后通过outputStream.write(buff,0,buff.length);写入。运行结果可以通过项目浏览器和SecureCRT查看。
项目浏览器查看:
SecureCRT查看:


3、创建HDFS目录
通过FileSystem.mkdir(Path f)可在HDFS上创建文件夹,其中f为文件夹的完整路径。具体代码实现如下:
package org.hdoop.practice.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class CreateDir {

       public static void main(String[] args) {
             try {
                  Configuration conf= new Configuration();
                  FileSystem hdfs=FileSystem. get(conf);
                  
                   //设置文件的路径
                  Path dfs= new Path("/TestDir" );
                   //通过fileSystem.mkdirs(Path f)可在HDFS上创建文件夹
                  hdfs.mkdirs(dfs);
            } catch (IOException e) {
                  e.printStackTrace();
            }
      }

}
代码解析:上述代码主要实现了在HDFS中创建文件夹,其中创建文件夹采用FileSystem.mkdirs(Path f)方法来实现,f表示完整的路径。代码中Path dfs=new Path("/TestDir")表示设置文件夹,hfds.mkdirs(dfs)表示创建该文件夹。运行结果可以通过项目浏览器和secureCRT查看。
项目浏览器运行结果如下图:
secureCRT查看结果如下图:

4、重命名HDFS文件
通过FileSystem.rename(Path src,Path dst)可为指定的HDFS文件重命名,其中src和dst均为文件的完整路径。具体代码实现如下:
package org.hdoop.practice.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Rename {

       public static void main(String[] args) {
             try {
                   //创建Configuration示例 conf
                  Configuration conf = new Configuration();
                  FileSystem hdfs=FileSystem. get(conf);
                   //设置旧的文件名
                  Path frpath= new Path("/test" );
                   //设置新的文件名
                  Path topath = new Path("/test1" );
                  
                   //重新命名
                   boolean isRename=hdfs.rename(frpath, topath);
                  String result= isRename?"成功": "失败";
                  System. out.println("文件重命名结果为:" +result);
            } catch (IOException e) {
                  e.printStackTrace();
            }
      }

}

代码解析:上述代码实现了在HDFS上重命名文件,Path frpath=new Path("/test");设置源文件,Path topath=new Path("/test1')设置的是新文件名,hdfs.rename(frpath,topath)实现重命名。运行结果可以通过项目浏览器和SecureCRT查看。

项目浏览器运行结果如图:



SecureCRT查看运行结果:


5、删除HDFS上的文件

通过FileSystem.delete(Path f,Boolean recursive)可删除指定的HDFS文件,其中f为需要删除文件的完整路径,recursive用来确定是否进行递归删除。具体实现代码如下:
package org.hdoop.practice.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class DeleteFile {
       public static void main(String[] args) {
             try {
                  Configuration conf= new Configuration();
                  FileSystem hdfs=FileSystem. get(conf);
                   //删除文件的完整路径
                  Path delef= new Path("/test1" );
                   //非递归删除,这里参数false表示非递归删除
                   boolean isDeleted=hdfs.delete(delef, false);
                   //递归删除
                   //boolean isDeleted=hdfs.delete(delef, true);
                  System. out.println("Delete?" +isDeleted);
            } catch (IOException e) {
                  e.printStackTrace();
            }
            
      }
}

代码解析:上述代码实现了在HDFS中删除文件,首先通过Path delef=new Path("/test1")设置要删除的文件,接下来通过hdfs.delete(delef,false)实现删除文件。运行结果可以通过控制台和文件浏览器查看。

删除HDFS上的文件控制台结果如图:

6、删除HDFS上的目录

同删除文件代码一样,只需换成删除目录路径即可。如果目录下有文件,要进行递归删除。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条