zoukankan      html  css  js  c++  java
  • 【Hadoop】:HDFS调用Java API进行操作

    一.程序的架构

    一般来讲我们可以使用命令行在linux下对HDFS进行操作,那么我们也可以使用Java对HDFS进行操作,因为一旦使用了Java,我们可以编写Java程序定时对HDFS进行操作,这样就会更加的自动,也就不需要人为在linux下输入这些命令了。这里我使用了Junit的Java单元测试对下面的API进行调用。

    大致的代码结构是这样的:

    @before
    public void before()
    {
    //编写运行单元测试前需要运行的代码
    }
    
    @Test
    public void test()
    {
    //进行单元测试时的代码,每一个函数里仅编写一个调用HDFS的Java API,
    }
    
    @After
    public void after()
    {
    //在每一个单元测试完成之后,都会运行的代码部分
    }

    二.代码使用

    调用各种API的代码如下;

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.FilterFileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.net.URI;
    
    public class hdfs_test {
    
        private FileSystem fileSystem;
        //现在使用before,直接就可以创建对象
        @Before
        public void before() throws Exception
        {
          //其中19000端口是我设置的,在xml文件里进行配置,你用的什么端口就使用什么,我之类用的是19000 fileSystem
    =FileSystem.get(URI.create("hdfs://127.0.0.1:19000"),new Configuration()); } //现在尝试了put方法,将本地的文件上传至HDFS @Test public void put() throws IOException,InterruptedException { fileSystem.copyFromLocalFile(new Path("d:\2.txt"),new Path("/")); } //现在来尝试一下rename方法,这个API运行起来也十分简单,可以对文件进行重命名 @Test public void rename() throws IOException, InterruptedException { fileSystem.rename(new Path("/2.txt"),new Path("/great.txt")); } //现在尝试一下delete方法,使用这个方法可以删除文件 @Test public void delete() throws IOException { fileSystem.delete(new Path("1.txt"),true); } @Test public void ls() throws Exception { FileStatus[] fileStatuses=fileSystem.listStatus(new Path("/")); for(FileStatus fileStatu: fileStatuses) if(fileStatu.isFile()) { System.out.println("这是一个文件!"); System.out.println("路径:"+fileStatu.getPath()); System.out.println("文件大小:"+fileStatu.getLen()); System.out.println(); } else { System.out.println("这是一个文件夹!"); System.out.println("路径:"+fileStatu.getPath()); System.out.println("文件大小:"+fileStatu.getLen()); System.out.println(); } } @After public void after() throws Exception { fileSystem.close(); } }
  • 相关阅读:
    关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例
    js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
    判断是否是IE浏览器
    点击不同位置实现同一个文件上传框上传头像
    如何去掉a标签的下划线
    jquery $(document).ready() 与window.onload的区别
    Java 程序 关于Properties 类使用Store方法时不能会覆盖以前Properties 文件的内容
    dom4j读取某个元素的某个属性
    字节流与字符流的区别详解
    Eclipse修改方法内容不用重启Jetty服务器
  • 原文地址:https://www.cnblogs.com/geeksongs/p/14234715.html
Copyright © 2011-2022 走看看