注意:本工程项目的源码可以在hadoop主页当中开放源代码中查看。
[01].创建文件与文件夹
工具函数
public static void createFile(String path) throws IOException, URISyntaxException {
logger.info("\n[创建文件]===========================");
logger.info("[目标文件]:"+path);
Path dst = new Path(path);// 目的路径
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri, new Configuration());
fs.create(dst).close();
logger.info("[创建完成]");
}
public static boolean mkdir(String path) throws IOException, URISyntaxException {
logger.info("\n[创建目录]===========================");
logger.info("[目标目录]:"+path);
Path dst = new Path(path);// 目的路径
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri, new Configuration());
boolean ok = fs.mkdirs(dst);
logger.info("[创建情况]:"+ok);
return ok;
}
主函数
//创建文件
FSManager.createFile("/mz/create.txt");
//创建目录
FSManager.mkdir("/new");
运行截屏:
[02].删除文件与文件夹
首先创建一些多余文件
//先在new目录下创建9个文件
for(int i =1;i<10;i++) {
FSManager.createFile("/new/text_"+i+".txt");
}
//主目录下创建1个文件
FSManager.createFile("/HeiHei.txt");
创建在主目录的多余文件:
创建在new里的文件开始演示删除文件与文件夹
//删除主目录的那个多余文件
FSManager.delete("/HeiHei.txt", true);
//删除new目录所有文件及文件夹
FSManager.delete("/new", true);
函数
public static boolean delete(String path, boolean recursive) throws IOException, URISyntaxException {
logger.info("\n[删除目录]===========================");
logger.info("[目标目录]:" + path);
Path dst = new Path(path);// 目的路径
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri, new Configuration());
boolean ok = fs.delete(dst, recursive);
logger.info("[删除情况]:" + ok);
return ok;
}
执行情况
[03].重命名文件
先创建文件再命名
//先创建
FSManager.createFile("/NeedReanme.txt");
//再命名
FSManager.rename("/NeedReanme.txt", "/HaveNewName.txt");
函数
public static boolean rename(String oldPath, String newPath) throws IOException, URISyntaxException {
logger.info("\n[重命名]===========================");
logger.info("[旧路径]:" + oldPath);
logger.info("[新路径]:" + newPath);
Path last = new Path(oldPath);// 目的路径
Path newst = new Path(newPath);// 目的路径
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri, new Configuration());
boolean ok = fs.rename(last, newst);
logger.info("[命名情况]:" + ok);
return ok;
}
日志情况
- web情况
[04].重命名目录
先创建目录
FSManager.mkdir("/oldName");
// 先在oldName目录下创建9个文件
for (int i = 1; i < 10; i++) {
FSManager.createFile("/oldName/text_" + i + ".txt");
}
//重命名文件夹
FSManager.rename("/oldName", "/newName");
日志情况
- 前台
[05].追加文件内容
追加到一个空的文件
//追加内容
FSManager.appendStringToFile("我是被追加的内容", "/HaveNewName.txt");
//读取被追加后的文件
String content = FSManager.readContent("/HaveNewName.txt");
if (content != null) {
System.out.println(content);
}
函数
public static void appendStringToFile(String content,String dstPath) throws URISyntaxException, IOException {
logger.info("\n[追加内容]===========================");
logger.info("[文件内容]:" + content);
logger.info("[目标文件]:" + dstPath);
Path dst = new Path(dstPath);// 目的路径
URI uri = new URI(Conf.uri);
Configuration conf = new Configuration();
conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
conf.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true");
FileSystem fs = FileSystem.get(uri,conf);
FSDataOutputStream fos = fs.append(dst);
fos.write(content.getBytes());
fos.close();
logger.info("[写入完成]");
}
运行日志
[06].获取文件信息
调用
FSManager.getLastTime("/HaveNewName.txt");
函数
public static long getLastTime(String path) throws URISyntaxException, IOException {
logger.info("\n[获取最新时间]===========================");
logger.info("[目标文件]:" + path);
Path dst = new Path(path);// 目的路径
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri,new Configuration());
FileStatus status = fs.getFileStatus(dst);
long newTime = status.getModificationTime();
logger.info("[最新时间]:"+newTime);
return newTime;
}
[07].查看block分布主机
函数
public static void getBlockInfo(String path) throws URISyntaxException, IOException {
logger.info("\n[获取Block分机情况]===========================");
logger.info("[目标文件]:" + path);
Path dst = new Path(path);// 目的路径
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri,new Configuration());
FileStatus status = fs.getFileStatus(dst);
BlockLocation blocks[] = fs.getFileBlockLocations(status, 0,status.getLen());
for(int i = 0 ; i <blocks.length;i++) {
String hosts[] = blocks[i].getHosts();
for(String host:hosts) {
logger.info("[Block]:"+i+"\t[Location]:"+hosts);
}
}
}
调用
FSManager.getBlockInfo("/HaveNewName.txt");
后台日志
[08].获取所有node节点情况
调用
FSManager.getDataNodeInfo();
函数
public static String[] getDataNodeInfo() throws URISyntaxException, IOException {
logger.info("\n[获取DataNode节点情况]===========================");
URI uri = new URI(Conf.uri);
FileSystem fs = FileSystem.get(uri,new Configuration());
DatanodeInfo dataNodeInfo[] = ((DistributedFileSystem)fs).getDataNodeStats();
String names[] = new String[dataNodeInfo.length];
for(int i = 0;i<dataNodeInfo.length;i++) {
names[i] = dataNodeInfo[i].getHostName();
logger.info("[Node]:"+i+"\t[HostName]:"+names[i]);
}
return names;
}
后台日志