使用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. android_模拟器调试

    找到adb_server adb_server connect

  2. JS中的块级作用域,var、let、const三者的区别

    1. 块作用域{ } <script type="text/javascript"> { var a = 1; console.log(a); // 1 } conso ...

  3. CSS属性速查表

    前面的话 本文将按照布局类属性.盒模型属性.文本类属性.修饰类属性这四个分类,对CSS常用属性进行重新排列,并最终设置为一份stylelintrc文件 布局类 1.定位 position z-inde ...

  4. error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler op

    caffe c++11编译问题 问题:error: #error This file requires compiler and library support for the ISO C++ 201 ...

  5. python之生成器和列表推导式

    一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成 ...

  6. Drag(拖拽)和Move(移动)两个脚本

    Drag using System.Collections; using System.Collections.Generic; using UnityEngine; public class Dra ...

  7. eclipse报错 : One or more constraints have not been satisfied.

    当eclipse进行报错时,但是不影响运行时,这种错误一般是编译时的问题 进行修改3个地方,即可完成 一 :  进行修改这三个地方的配置文件,都改成你统一的jdk版本,和你用的Dynamic Web ...

  8. 解决 MariaDB无密码就可以登录的问题

    问题: 困扰了很久的问题,, 使用apt-get来安装mysql,安装好之后发现安装的是 MariaDB,如下,无需密码既可以登录了.即使使用mysqladmin设置好密码,用密码登录可以,不用密码登 ...

  9. Magento 目录基本介绍

    Magento 目录基本介绍 app; 与Magento 1一样,该文件夹包含主要的Magento代码; adminhtml和 frontend;/ app / design / adminhtml和 ...

  10. [AMD驱动]解决AMD驱动的1603错误

    官方:https://www.amd.com/en/support/kb/faq/gpu-kb1603 其实把更改的文档 下载 音乐等默认目录恢复到C盘(或任意一个可访问的路径),就可以正常安装了.