博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdfs的javaAPI使用
阅读量:5947 次
发布时间:2019-06-19

本文共 3987 字,大约阅读时间需要 13 分钟。

参考博客:https://www.cnblogs.com/Eddyer/p/6641778.html

1.需求

使用hdfs的javaAPI访问hdfs系统。

2.环境配置

(1)hadoop为本地模式

(2)pom文件代码如下

org.apache.hadoop
hadoop-client
2.7.3
junit
junit
4.11
maven依赖项

 3.使用hdfs的javaAPI操作hdfs的代码

(1)初始化环境

import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.junit.Before;import org.junit.Test;import java.io.FileInputStream;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;public class hadoopJavaApiDemo {    FileSystem fs = null;    @Before    public void init() throws IOException, URISyntaxException, InterruptedException {        Configuration configuration = new  Configuration();        //设置文件系统为hdfs        //获取文件系统的客户端实例对象        //注意:运行程序是要执行用户名为hadoop,否则会出现没写权限的情况        fs = FileSystem.get(new URI("hdfs://127.0.0.1:9900"),configuration,"hadoop");    }  //...
}

(2)上传文件

@Test    public void testUpload() throws IOException {        fs.copyFromLocalFile(new Path("file://[本地文件的路径,例如/a/b.txt]"),new Path("[hdfs文件系统的路径,例如/]"));        fs.close();    }

 (3)下载文件

@Test    public void testDownLoad() throws IOException {        fs.copyToLocalFile(new Path("[hdfs上的文件路径,例如/testData]"),new Path("[本地文件路径,例如/home/a.txt]"));        fs.close();    }

 (4)创建文件夹

@Test    //创建新的文件夹    public void testMakeDir() throws Exception {        boolean mkdirs = fs.mkdirs(new Path("/x/y/z"));        System.out.println(mkdirs);    }

(5)删除文件夹

@Test    public void testDelete() throws Exception{        //第二个参数为true是递归删除        boolean delete = fs.delete(new Path("/x"), true);        System.out.println(delete);    }

 (6)修改文件夹名称

@Test    //测试修改文件夹的名称    public void testRenameDir() throws IOException {        boolean change = fs.rename(new Path("/x"),new Path("/xx"));        System.out.println(change);    }

(7)查看目录信息

@Test    //测试查看目录信息功能    public void testListFiles() throws IOException {
     //第二个参数为true表示递归调用 RemoteIterator
listFiles = fs.listFiles(new Path("/"),true); while (listFiles.hasNext()){
       //打印各种文件信息,和命令行中执行 hdfs dfs -lsr / 效果一样 LocatedFileStatus status = listFiles.next(); System.out.println(status.getPath().getName()); System.out.println(status.getBlockSize()); System.out.println(status.getPermission()); System.out.println(status.getLen());               //打印文件的每个分组位置,每128M一个分组 BlockLocation[] blockLocations = status.getBlockLocations(); for(BlockLocation bl:blockLocations){ System.out.println("block-length:"+bl.getLength()+"--"+ "block-offset:"+bl.getOffset()); String[] hosts = bl.getHosts(); for(String host:hosts){ System.out.println(host); } } System.out.println(); } }

(8)查看文件以及文件夹信息

@Test    //查看文件以及文件夹信息    public void testListAll() throws IOException {        FileStatus[] listStatus = fs.listStatus(new Path("/"));        String flag = "d-----------------";        for(FileStatus fileStatus:listStatus){            if(fileStatus.isFile())                flag = "f----------------";            else                flag = "d----------------";            System.out.println(flag+fileStatus.getPath().getName());        }    }

4.注意事项

(1)hdfs各种端口的含义(就因为将127.0.0.1:9900写为127.0.0.1:50070,debug了好久。。)

  9900是fileSystem的端口号(默认是9000,这里我自定义为9900)

  50070是namenode主节点的端口号

  50090是namenode的secondarynamenode的端口号

(2)file://是一个传输协议

  比如可以通过在浏览器中输入路径file:///a/b/c.txt访问本地文件

5.github链接

  https://github.com/gulu2016/STBigData/hadoopJavaApiDemo.java

转载于:https://www.cnblogs.com/ManchesterCityCoder/p/10729848.html

你可能感兴趣的文章
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
搭载AI引擎,腾讯云云镜开启全面防护模式
查看>>
不仅有Ubuntu,这家公司的Ubuntu Core预计使用翻倍
查看>>
JMS机制
查看>>
Grumpy:Google 用 Go 开发的 Python 运行时
查看>>
Kubernetes 1.14 版本发布:正式支持Windows 节点,持久化本地卷进入GA
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
AVG插件泄漏Chrome用户数据
查看>>
免费微信公众号专用h5在线电影票API
查看>>
专访刘刚:360手机卫士的性能监控与优化
查看>>
FB正在大规模重构React Native,预计今年发布
查看>>
从0到1:腾讯Yoo视频底层页推荐系统实践
查看>>
推荐10个CI/CD工具,用于云平台集成交付
查看>>
云平台宕机引发的系列思考,企业如何自救?
查看>>
Java EE跟JCP说再见
查看>>
整洁代码之道——重构
查看>>
Oracle加入CNCF,发布Kubernetes on Oracle Linux以及Terraform Kubernetes Cloud Installer
查看>>
Scrum指南更新:Ken Schwaber、Jeff Sutherland访谈
查看>>
在瑞士最大银行驱动创新
查看>>
CRI Shimv2:一种 Kubernetes 集成容器运行时的新思路
查看>>