HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件、删除文件、读取文件内容等操作。下面记录一下使用JAVA API对HDFS中的文件进行操作的过程。
对分HDFS中的文件操作主要涉及一下几个类:
Configuration类:该类的对象封转了客户端或者服务器的配置。
FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。FileSystem fs = FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。
FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入输出流。分别通过FileSystem的open方法和create方法获得。
package hdfsday01;
import java.io.IOException;
import java.io.InputStream;
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.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
public class HdfsDemo {
//创建新文件
public static void CreateFile(String url,String path){
try {
//该类的对象封转了客户端或者服务器的配置。
Configuration config = new Configuration();
URI uri = new URI("hdfs://192.168.52.140:9000");
//该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。
FileSystem fs = FileSystem.get(uri, config);
//目标路径
Path p = new Path("hdfs://192.168.52.140:9000/dirs");
fs.create(p, new Progressable() {
@Override
public void progress() {
System.out.print(">>");
}
});
System.out.println("create dir successful!!!");
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//判断文件是否存在于Hdfs
public static boolean IfFileExits(String FileName)throws Exception
{
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(FileName),conf);
Path path = new Path(FileName);
boolean isExists = fs.exists(path);
return isExists;
}