通过Hadoop提供的FileSystem这个API来操作hdfs

    刚刚学习了通过Hadoop提供的FileSystem这个API来操作hdfs。主要的操作有在hdfs上创建与删除文件夹、上传下载文件、浏览hdfs下某目录的文件。
    1.创建与删除文件夹

点击(此处)折叠或打开

  1. package com.chi.hdfs;

  2. import java.net.URI;

  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.FileSystem;
  5. import org.apache.hadoop.fs.Path;

  6. public class TestOne {
  7.     static final String PATH = "hdfs://192.168.15.100:9000/";// hdfs地址
  8.     static final String DIR = "hdfs://192.168.15.100:9000/One";// 所要创建的文件位置

  9.     public static void main(String[] args) throws Exception {
  10.         FileSystem fileSystem = FileSystem.get(new URI(PATH),
  11.                 new Configuration());

  12.         fileSystem.mkdirs(new Path(DIR));// 创建文件
  13.         // fileSystem.delete(new Path(DIR), false);//删除文件或目录

  14.     }

  15. }
删除hdfs下的目录时,若某目录不为空,则第二个参数必须为true,否则报错;当目录为空或删除文件时,第二个参数为false或true都可以。
在做这个测试的时候我遇到了个问题,并没有解决:就是用delete方法删除hdfs根目录下的所有文件夹和文件并没有实现(关键代码: fileSystem.delete(new Path("hdfs://192.168.15.100:9000/*"), true);),希望路过的大神能帮小弟解惑答疑,谢谢!

    2.上传和下载文件

点击(此处)折叠或打开

  1. package com.chi.hdfs;

  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.net.URI;

  5. import org.apache.hadoop.conf.Configuration;
  6. import org.apache.hadoop.fs.FSDataInputStream;
  7. import org.apache.hadoop.fs.FSDataOutputStream;
  8. import org.apache.hadoop.fs.FileSystem;
  9. import org.apache.hadoop.fs.Path;
  10. import org.apache.hadoop.io.IOUtils;

  11. public class TestTwo {
  12.     static final String PATH = "hdfs://192.168.15.100:9000/";// hdfs地址
  13.     static final String DIR = "hdfs://192.168.15.100:9000/One";// 所要创建的文件位置
  14.     static final String FILE = "/One/xixi";

  15.     public static void main(String[] args) throws Exception {
  16.         FileSystem fileSystem = FileSystem.get(new URI(PATH),
  17.                 new Configuration());
  18.         // 上传文件
  19.         FSDataOutputStream out = fileSystem.create(new Path(FILE));
  20.         FileInputStream in = new FileInputStream("D:/Hadoop/test/哈哈.txt");
  21.         IOUtils.copyBytes(in, out, 1024, true);

  22.         // 下载文件
  23.         FSDataInputStream inGet = fileSystem.open(new Path(FILE));
  24.         FileOutputStream outGet = new FileOutputStream(
  25.                 "D:/Hadoop/test/heihei.txt");
  26.         IOUtils.copyBytes(inGet, outGet, 1024, true);

  27.     }

  28. }
此处需要注意的是:在下载文件时,若本地文件存在,执行下载程序后本地文件内的内容会被完全覆盖。若本地文件不存在,则新建文件。

    3. 浏览hdfs下某目录的文件

点击(此处)折叠或打开

  1. package com.chi.hdfs;

  2. import java.net.URI;

  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.FileStatus;
  5. import org.apache.hadoop.fs.FileSystem;
  6. import org.apache.hadoop.fs.Path;

  7. public class TestThree {
  8.     static final String PATH = "hdfs://192.168.15.100:9000/";// hdfs地址
  9.     static final String DIR = "hdfs://192.168.15.100:9000/One";// 所要创建的文件位置

  10.     public static void main(String[] args) throws Exception {
  11.         FileSystem fileSystem = FileSystem.get(new URI(PATH),
  12.                 new Configuration());
  13.         FileStatus[] listStatus = fileSystem.listStatus(new Path(DIR));// 得到文件或文件夹的数组
  14.         for (FileStatus fileStatus : listStatus) { // 遍历数组
  15.             String isDir = fileStatus.isDirectory() ? "文件夹" : "文件";
  16.             long len = fileStatus.getLen();
  17.             String path = fileStatus.getPath().toString();
  18.             String permission = fileStatus.getPermission().toString();
  19.             short replication = fileStatus.getReplication();
  20.             System.out.println(isDir + "\t" + len + "\t" + path + "\t"
  21.                     + permission + "\t" + replication);
  22.         }

  23.     }
  24. }
在遍历某目录下的文件时并不能递归遍历。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29876573/viewspace-1813498/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29876573/viewspace-1813498/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值