hadoop之FileSystem操作

创建Java项目,File->New->Java Project,命名为TestHDFS

采用单元测试做实验,加入单元测试依赖包,项目导航栏里右键Build Path->Add Libraries->JUnit,以上操作完成如下:
Hadoop <wbr>API编程——FileSystem操作


引入hadoop相关外部jar包,Build Path->Add External Archives,jar包包括:
hadoop/lib/*.jar,hadoop/hadoop-core-1.2.1.jar

创建一个java类,TestHDFS.java,继承junit.framework.TestCase,代码开始写:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;

import junit.framework.TestCase;


public class TestHDFS extends TestCase {
   
   public static String hdfsUrl = "hdfs://192.168.1.106:8020";

    @Test
    public void testHDFSMkdir() throws Exception{  //create HDFS folder 创建一个文件夹
       Configuration conf= new Configuration();
       FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
       Path path = new Path("/test");
       fs.mkdirs(path);
    }

    @Test 
    public void testCreateFile() throws Exception{  //create a file  创建一个文件
      Configuration conf= new Configuration();
      FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
      Path path = new Path("/test/a.txt");
      FSDataOutputStream out = fs.create(path);
      out.write("hello hadoop".getBytes());
    }

     @Test
     public void testRenameFile() throws Exception{  //rename a file 重命名
       Configuration conf= new Configuration();
       FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
       Path path = new Path("/test/a.txt");
       Path newPath = new Path("/test/b.txt");
       System.out.println(fs.rename(path, newPath));
     }

     @Test
     public void testUploadLocalFile1() throws Exception{  //upload a local file 上传文件
       Configuration conf= new Configuration();
       FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
       Path src = new Path("/home/hadoop/hadoop-1.2.1/bin/rcc");
       Path dst = new Path("/test");
       fs.copyFromLocalFile(src, dst);
     }

      @Test
      public void testUploadLocalFile2() throws Exception{  //upload a local file 上传文件
        Configuration conf= new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        Path src = new Path("/home/hadoop/hadoop-1.2.1/bin/rcc");
        Path dst = new Path("/test");
        InputStream in = new BufferedInputStream(new FileInputStream(new File("/home/hadoop/hadoop-1.2.1/bin/rcc")));
        FSDataOutputStream out = fs.create(new Path("/test/rcc1"));
        IOUtils.copyBytes(in, out, 4096);
      }

@Test
       public void testListFIles() throws Exception{ //list files under folder 列出文件
               Configuration conf= new Configuration();
               FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
               Path dst = new Path("/test");
               FileStatus[] files = fs.listStatus(dst);
               for(FileStatus file: files){
               System.out.println(file.getPath().toString());
       }
}

@Test
       public void testGetBlockInfo() throws Exception{  //list block info of file 查找文件所在的数据块
         Configuration conf= new Configuration();
         FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
         Path dst = new Path("/test/rcc");
         FileStatus fileStatus = fs.getFileStatus(dst);                                                   BlockLocation[] blkloc=fs.getFileBlockLocations(fileStatus,0,fileStatus.getLen()); //查找文件所在数据块
         for(BlockLocation loc: blkloc){
             for(int i=0;i < loc.getHosts().length;i++)
                 System.out.println(loc.getHosts()[i]);
              }
          }
}


还有很多函数,慢慢使用体会吧。。。

单元测试过程:
Hadoop <wbr>API编程——FileSystem操作

Eclipse左侧窗口,展开java类的方法,对某个需要进行单元测试的类右键,选择JUnit Test,如图所示。

先到这里吧。。。

API说明:
转自:http://blog.sina.com.cn/s/blog_4438ac090101pxnj.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值