1.Configuration类——cof对象
(1)创建
Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
2.FileSystem类——fs对象
(1)创建
FileSystem fs = FileSystem.get(new URI(conf.get("fs.defaultFS")), conf);
(2)方法
- fs.create(hdfsPath, true) 写文件,true表覆盖
- fs.open(hdfsPath) 读文件
- fs.append
- fs.exists(hdfsPath) 判断hdfs文件是否存在
- fs.close()
3.Path类
(1)创建
String localFilePath = "/home/hadoop/xsyTest.txt"; // 本地文件路径 String hdfsFilePath = "input/xsyTest.txt"; // HDFS目标路径 //String hdfsFilePath = "/user/hadoop/input/xsyTest.txt"; // 或该完整路径 Path localPath = new Path(localFilePath); Path hdfsPath = new Path(hdfsFilePath);
(2)hdfs文件是否存在
import org.apache.hadoop.fs.*; FileSystem fs = FileSystem.get(new URI(conf.get("fs.defaultFS")), conf); Path hdfsPath = new Path(hdfsFilePath); boolean flag = fs.exists(hdfsPath)
(3)本地文件是否存在
import java.io.*; String localFilePath = "/home/hadoop/xsyTest.txt"; // 本地文件路径 File fs = new File(localFilePath); boolean flag = fs.exists();
4.FSDataOutputStream类:FileSystem之上
(1)创建
FSDataOutputStream out = fs.create(hdfsPath, true); // 第二个参数true表示重名覆盖 FSDataOutputStream out = fs.create(hdfsPath); //纯上传未重名
4.FSDataOutputStream类:FileSystem之上
(1)创建
FSDataInputStream in = fs.open(hdfsPath);
5.BufferedReader类:读文件,FSDataOutputStream之上
(1)创建d对象
(2)读文件d.readLine()
BufferedReader d = new BufferedReader(new InputStreamReader(in)) String line = null; while ( (line = d.readLine()) != null ) { System.out.println(line); }
6.FileStatus类:封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。
RemoteIterator类类似。
其他内容可以直接输出,数据内容需转换:
Long timeStamp = s.getModificationTime(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = format.format(timeStamp); System.out.println("修改时间: " + date);;
//读取文件信息 FileStatus[] fileStatuses = fs.listStatus(hdfsPath); for (FileStatus s : fileStatuses) {} //读取目录下所有文件信息 RemoteIterator<LocatedFileStatus> remoteIterator = fs.listFiles(hdfsPath, true); while (remoteIterator.hasNext()) { FileStatus s = remoteIterator.next();}
关系:FileStatus s = remoteIterator.next();