使用Junit封装HFDS

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.net.URI;
/**
 * 使用Java API操作HDFS文件系统
 */
public class HDFSApp {
    public static final String HDFS_PATH = "hdfs://localhost:9000";
    Configuration conf = null;
    FileSystem fs = null;

    @Before
    public void open() throws Exception{
        System.out.println("连接HDFS...");
        conf = new Configuration();
        // 副本系数为1,配置文件只对shell生效
        conf.set("dfs.replication","1");
        /**
         * 构造一个访问指定HDFS文件系统的客户端对象
         * 第一个参数: HDFS的URI
         * 第二个参数: 客户端指定的配置参赛
         * 第三个参数: 客户端的身份,说白了就是用户名
         */
        fs = FileSystem.get(new URI(HDFS_PATH),conf,"hadoop");
    }
    @After
    public void close() throws Exception{
        conf = null;
        fs = null;
        System.out.println("注销连接...");
    }
}

创建HDFS文件夹

/**
 * 创建HDFS文件夹
 */
@Test
public void mkdir() throws Exception{
    fs.mkdirs(new Path("input"));
}

文件上传

/**
 * 文件上传
 */
@Test
public void copyFromLocalFile() throws Exception{
    fs.copyFromLocalFile(new Path("/home/hadoop/word.txt"),
                         new Path("input/word.txt"));
}

文件下载

/**
 * 文件下载
 */
@Test
public void copyToLocalFile() throws Exception{
    fs.copyToLocalFile(new Path("input/word.txt"),
                       new Path("/home/hadoop/word2.txt"));
}

查看HDFS文件内容

/**
 * 查看HDFS文件内容
 */
@Test
public void catFileText() throws Exception{
    FSDataInputStream in = fs.open(new Path("input/word.txt"));
    IOUtils.copyBytes(in,System.out,1024);
}

列出指定文件夹下的所有内容

/**
 * 列出指定文件夹下的所有内容
 */
@Test
public void listFile() throws Exception{
    FileStatus[] listStatus = fs.listStatus(new Path("input"));
    for (FileStatus file : listStatus) {
        String isDir = file.isDirectory()?"文件夹":"文件";
        String permission = file.getPermission().toString();
        short replication = file.getReplication();
        long len = file.getLen();
        String path = file.getPath().toString();
        // 输出信息
        System.out.println(isDir+"\t"+permission+"\t"+
                           replication+"\t"+len+"\t"+path);
    }
}

递归列出指定文件夹下的所有文件(夹)信息

/**
 * 递归列出指定文件夹下的所有文件(夹)信息
 */
@Test
public void listAllFiles() throws Exception{
    RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("input"),true);
    while (files.hasNext()){
        LocatedFileStatus file = files.next();
        // 获取信息
        String isDir = file.isDirectory()?"文件夹":"文件";
        String permission = file.getPermission().toString();
        short replication = file.getReplication();
        long len = file.getLen();
        String path = file.getPath().toString();
        // 输出信息
        System.out.println(isDir+"\t"+permission+"\t"+
                           replication+"\t"+len+"\t"+path);
    }
}

创建HDFS文件,并写入内容

/**
 * 创建HDFS文件,并写入内容
 */
@Test
public void create() throws Exception{
    FSDataOutputStream out = fs.create(new Path("input/a.txt"));
    out.writeUTF("Hello,HDFS!");
    out.flush();
    out.close();
}

刪除文件/文件夾

/**
 * 刪除文件/文件夾
 */
@Test
public void deleteFile() throws Exception{
    // true递归删除文件夹,false不删除文件夹,文件则无所谓
    fs.delete(new Path("input"),true);
}

HDFS重命名

/**
 * HDFS重命名
 */
@Test
public void rename() throws Exception{
    fs.rename(new Path("input/word.txt"),new Path("input/input.txt"));
}

列出文件块信息

/**
 * 列出文件块信息
 */
@Test
public void getFileBlockLocations() throws Exception{
    FileStatus fileStatus = fs.getFileStatus(new Path("input/word.txt"));
    BlockLocation[] blocks = fs.getFileBlockLocations(fileStatus, 0,
                                                      fileStatus.getLen());
    for (BlockLocation block : blocks) {
        // 获取文件块名字(多个,被切分)
        for (String name:block.getNames()) {
            System.out.println(name+":"+block.getOffset()+":"+block.getLength());
        }
    }
}

使用Java API操作HDFS文件系统的更多相关文章

  1. Hadoop Java API操作HDFS文件系统(Mac)

    1.下载Hadoop的压缩包 tar.gz   https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/ 2.关联jar包 在 ...

  2. 使用Java Api 操作HDFS

    如题 我就是一个标题党  就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Ma ...

  3. hadoop学习笔记(五):java api 操作hdfs

    HDFS的Java访问接口 1)org.apache.hadoop.fs.FileSystem 是一个通用的文件系统API,提供了不同文件系统的统一访问方式. 2)org.apache.hadoop. ...

  4. 使用java api操作HDFS文件

    实现的代码如下: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import ...

  5. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  6. HDFS 05 - HDFS 常用的 Java API 操作

    目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...

  7. JAVA API 实现hdfs文件操作

    java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ...

  8. Java API实现Hadoop文件系统增删改查

    Java API实现Hadoop文件系统增删改查 Hadoop文件系统可以通过shell命令hadoop fs -xx进行操作,同时也提供了Java编程接口 maven配置 <project x ...

  9. 大数据-09-Intellij idea 开发java程序操作HDFS

    主要摘自 http://dblab.xmu.edu.cn/blog/290-2/ 简介 本指南介绍Hadoop分布式文件系统HDFS,并详细指引读者对HDFS文件系统的操作实践.Hadoop分布式文件 ...

随机推荐

  1. OpenStack-Keystone(2)

    一. Keystone 概述 管理用户及其权限 维护OpenStack Services的Endpoint Authentication(认证)和 Authorization(授权) 1.验证用户 验 ...

  2. 好久好久没写,,百度API逆地址解析以及删除指定marker

    百度地图Api中 除覆盖物有两个方法:map.removeOverlay()或者 map.clearOverlays(),其中 clearOverlays()方法一次移除所有的覆盖物removeOve ...

  3. Python 中关于 round 函数的坑

    round函数很简单(而且不需要引入math模块),对浮点数进行近似取值,保留几位小数. 比如 # -*- coding: UTF-8 -*- r1=round(12.12345,3) r2=roun ...

  4. 前端cookie操作用到的一些小总结

    前后端完全分离的是目前web开发的大趋势,包括现下流行的前端框架的应用vue,angular,在不同页面跳转时,前端需要对用户登录状态进行判断,拿到用户的id,除了Ajax从服务器端获取数据外,对co ...

  5. SVD/SVD++实现推荐算法

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不仅可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域. ...

  6. CSS代码检查工具stylelint

    前面的话 CSS不能算是严格意义的编程语言,但是在前端体系中却不能小觑. CSS 是以描述为主的样式表,如果描述得混乱.没有规则,对于其他开发者一定是一个定时炸弹,特别是有强迫症的人群.CSS 看似简 ...

  7. docker_weave

    安装 curl -L git.io/weave -o /usr/local/bin/weave chmod a+x /usr/local/bin/weave 启动 weave weave launch ...

  8. luogu4705玩游戏

    题解 我们要对于每个t,求一个(1/mn)sigma(ax+by)^t. 把系数不用管,把其他部分二项式展开一下: simga(ax^r*by^(t-r)*C(t,r)). 把组合数拆开,就变成了一个 ...

  9. EOJ 306 树上问题

    题解: 因为w大于1,所以,题意就是,有多少(x,z),存在x到z的路径上,有一个x<y<z的y w没用的其实. 树上路径问题,有什么方法吗? 1.树链剖分.这个主要方便处理修改操作. 2 ...

  10. 行为驱动开发BDD和Cucunber简介

    测试驱动开发(TDD) 1.测试驱动开发,即Test-Driven Development(TDD),测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前 ...