刚刚学习了通过Hadoop提供的FileSystem这个API来操作hdfs。主要的操作有在hdfs上创建与删除文件夹、上传下载文件、浏览hdfs下某目录的文件。
1.创建与删除文件夹
删除hdfs下的目录时,若某目录不为空,则第二个参数必须为true,否则报错;当目录为空或删除文件时,第二个参数为false或true都可以。
在做这个测试的时候我遇到了个问题,并没有解决:就是用delete方法删除hdfs根目录下的所有文件夹和文件并没有实现(关键代码: fileSystem.delete(new Path("hdfs://192.168.15.100:9000/*"), true);),希望路过的大神能帮小弟解惑答疑,谢谢!
2.上传和下载文件
此处需要注意的是:在下载文件时,若本地文件存在,执行下载程序后本地文件内的内容会被完全覆盖。若本地文件不存在,则新建文件。
3. 浏览hdfs下某目录的文件
在遍历某目录下的文件时并不能递归遍历。
1.创建与删除文件夹
点击(此处)折叠或打开
- package com.chi.hdfs;
-
- import java.net.URI;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- public class TestOne {
- static final String PATH = "hdfs://192.168.15.100:9000/";// hdfs地址
- static final String DIR = "hdfs://192.168.15.100:9000/One";// 所要创建的文件位置
-
- public static void main(String[] args) throws Exception {
- FileSystem fileSystem = FileSystem.get(new URI(PATH),
- new Configuration());
-
- fileSystem.mkdirs(new Path(DIR));// 创建文件
- // fileSystem.delete(new Path(DIR), false);//删除文件或目录
-
- }
-
- }
在做这个测试的时候我遇到了个问题,并没有解决:就是用delete方法删除hdfs根目录下的所有文件夹和文件并没有实现(关键代码: fileSystem.delete(new Path("hdfs://192.168.15.100:9000/*"), true);),希望路过的大神能帮小弟解惑答疑,谢谢!
2.上传和下载文件
点击(此处)折叠或打开
- package com.chi.hdfs;
-
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.net.URI;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FSDataInputStream;
- import org.apache.hadoop.fs.FSDataOutputStream;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.IOUtils;
-
- public class TestTwo {
- static final String PATH = "hdfs://192.168.15.100:9000/";// hdfs地址
- static final String DIR = "hdfs://192.168.15.100:9000/One";// 所要创建的文件位置
- static final String FILE = "/One/xixi";
-
- public static void main(String[] args) throws Exception {
- FileSystem fileSystem = FileSystem.get(new URI(PATH),
- new Configuration());
- // 上传文件
- FSDataOutputStream out = fileSystem.create(new Path(FILE));
- FileInputStream in = new FileInputStream("D:/Hadoop/test/哈哈.txt");
- IOUtils.copyBytes(in, out, 1024, true);
-
- // 下载文件
- FSDataInputStream inGet = fileSystem.open(new Path(FILE));
- FileOutputStream outGet = new FileOutputStream(
- "D:/Hadoop/test/heihei.txt");
- IOUtils.copyBytes(inGet, outGet, 1024, true);
-
- }
-
- }
3. 浏览hdfs下某目录的文件
点击(此处)折叠或打开
- package com.chi.hdfs;
-
- import java.net.URI;
-
- 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 TestThree {
- static final String PATH = "hdfs://192.168.15.100:9000/";// hdfs地址
- static final String DIR = "hdfs://192.168.15.100:9000/One";// 所要创建的文件位置
-
- public static void main(String[] args) throws Exception {
- FileSystem fileSystem = FileSystem.get(new URI(PATH),
- new Configuration());
- FileStatus[] listStatus = fileSystem.listStatus(new Path(DIR));// 得到文件或文件夹的数组
- for (FileStatus fileStatus : listStatus) { // 遍历数组
- String isDir = fileStatus.isDirectory() ? "文件夹" : "文件";
- long len = fileStatus.getLen();
- String path = fileStatus.getPath().toString();
- String permission = fileStatus.getPermission().toString();
- short replication = fileStatus.getReplication();
- System.out.println(isDir + "t" + len + "t" + path + "t"
- + permission + "t" + replication);
- }
-
- }
- }
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29876573/viewspace-1813498/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29876573/viewspace-1813498/
最后
以上就是殷勤香菇最近收集整理的关于通过Hadoop提供的FileSystem这个API来操作hdfs的全部内容,更多相关通过Hadoop提供内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复