对于操作HDFS文件系统,需要有一个入口,对于Hadoop来说,编程入口就是FileSystem。
例如我们要使用API创建一个文件夹:

/*** @author vincent* @time 2019-10-14 22:39* 使用Java API操作HDFS文件系统* 关键点:* 1. 创建Configuration* 2. 获取FileSystem* 3. HDFS API操作*/
public class HDFSApp {public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {// hadoop 链接Configuration configuration = new Configuration();FileSystem fileSystem = FileSystem.get(new URI("hdfs://vmware-ubuntu-1:9000"),configuration,"duandingyang");Path path = new Path("/hdfsapi/test");boolean result = fileSystem.mkdirs(path);System.out.println(result);}
}

FileSystem.get(new URI("hdfs://vmware-ubuntu-1:9000"),configuration,"myusername");用户名必须要写,否则提示没有权限

常用的API操作

package hadoop.hdfs;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;/*** 使用Java API操作HDFS文件系统* 关键点:* 1) 创建Configuration* 2) 获取FileSystem* 3) HDFS API 操作*/
public class HDFSAPP {public static final String HDFS_PATH = "hdfs://swarm-worker1:9000";FileSystem fileSystem = null;Configuration configuration = null;/*** 构造一个访问指定HDFS系统的客户端对象* 第一个参数:HDFS的URI* 第二个参数:客户端指定的配置参数* 第三个参数:客户端的身份,即用户名** @throws URISyntaxException*/@Beforepublic void setUp() throws URISyntaxException, IOException, InterruptedException {System.out.println("--------setUp---------");configuration = new Configuration();configuration.set("dfs.replication", "1");fileSystem = FileSystem.get(new URI("hdfs://swarm-worker1:9000"), configuration, "iie4bu");}/*** 创建HDFS文件夹** @throws IOException*/@Testpublic void mkdir() throws IOException {Path path = new Path("/hdfsapi/test/myDir");boolean mkdirs = fileSystem.mkdirs(path);System.out.println(mkdirs);}/*** 查看HDFS内容*/@Testpublic void text() throws IOException {FSDataInputStream in = fileSystem.open(new Path("/hdfsapi/test/a.txt"));IOUtils.copyBytes(in, System.out, 1024);in.close();}/*** 创建文件** @throws Exception*/@Testpublic void create() throws Exception {FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/b.txt"));out.writeUTF("hello world b");out.flush();out.close();}@Testpublic void testReplication() {System.out.println(configuration.get("dfs.replication"));}/*** 重命名文件** @throws Exception*/@Testpublic void rename() throws Exception {Path src = new Path("/hdfsapi/test/b.txt");Path dst = new Path("/hdfsapi/test/c.txt");boolean rename = fileSystem.rename(src, dst);System.out.println(rename);}/*** 小文件* 拷贝本地文件到HDFS文件系统* 将本地的E:/test/uid_person.txt文件拷贝到hdfs上的路径/hdfsapi/test/下** @throws Exception*/@Testpublic void copyFromLocalFile() throws Exception {Path src = new Path("E:/test/uid_person.txt");Path dst = new Path("/hdfsapi/test/myDir/");fileSystem.copyFromLocalFile(src, dst);}/*** 大文件* 拷贝本地文件到HDFS文件系统:带进度* 将本地的E:/test/uid_person.txt文件拷贝到hdfs上的路径/hdfsapi/test/my.txt** @throws Exception*/@Testpublic void copyFromLocalBigFile() throws Exception {InputStream in= new BufferedInputStream(new FileInputStream(new File("E:/tools/linux/jdk-8u101-linux-x64.tar.gz")));FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/jdk.tar.gz"), new Progressable() {public void progress() {System.out.print(".");}});IOUtils.copyBytes(in, out, 4096);}/*** 拷贝HDFS文件到本地:下载* @throws Exception*/@Testpublic void copyToLocalFile() throws Exception {Path src = new Path("/hdfsapi/test/c.txt");Path dst = new Path("E:/test/a.txt");fileSystem.copyToLocalFile(src, dst);}/*** 查看目标文件夹下的所有文件* @throws Exception*/@Testpublic void listFile() throws Exception {Path path = new Path("/hdfsapi/test/");FileStatus[] fileStatuses = fileSystem.listStatus(path);for(FileStatus file: fileStatuses) {String isDir = file.isDirectory() ? "文件夹": "文件";String permission = file.getPermission().toString();short replication = file.getReplication();long len = file.getLen();String stringPath = file.getPath().toString();System.out.println("isDir:" + isDir + ", " + "permission: " + permission + ", " + "replication: " + replication + " , len: " + len + ", stringPath" + stringPath);}}/*** 递归查看目标文件夹下的所有文件* @throws Exception*/@Testpublic void listFileRecursive() throws Exception {Path path = new Path("/hdfsapi/test/");RemoteIterator<LocatedFileStatus> files = fileSystem.listFiles(path, 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 stringPath = file.getPath().toString();System.out.println("isDir:" + isDir + ", " + "permission: " + permission + ", " + "replication: " + replication + " , len: " + len + ", stringPath" + stringPath);}}/*** 查看文件块信息* @throws Exception*/@Testpublic void getFileBlockLocations() throws Exception {Path path = new Path("/hdfsapi/test/jdk.tar.gz");FileStatus fileStatus = fileSystem.getFileStatus(path);BlockLocation[] blocks = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());for(BlockLocation block: blocks) {for (String name: block.getNames()) {System.out.println(name + ": " + block.getOffset() + ": " + block.getLength());}}}/*** 删除文件* @throws Exception*/@Testpublic void delete() throws Exception {boolean delete = fileSystem.delete(new Path("/hdfsapi/test/a.txt"), true);System.out.println(delete);}@Afterpublic void tearDown() {configuration = null;fileSystem = null;System.out.println("--------tearDown---------");}}

Java操作HDFS文件系统相关推荐

  1. hadoop java操作hdfs

    hfds 是一种文件系统,用于存储hadoop将要处理的数据.适用于大规模分布式数据处理,是一个可扩展行的文件分布式系统: 优点 1.如果出现节点宕机,hdfs,可以持续监视,错误检查,容错处理,文档 ...

  2. Java 操作 HDFS

    HDFS 作为开源界比较成熟的分布式文件存储系统,适用于海量文件存储,本文介绍了如何使用 Java 操作 HDFS,采用 Maven 管理包. pom.xml <dependency>&l ...

  3. Java操作HDFS文件

    1.读取单个文件 [java] view plain copy Date date = DateUtil.getSpecifiedDayBefore(); String yesterday = Dat ...

  4. JAVA操作HDFS API(hadoop)

    http://www.cnblogs.com/alisande/archive/2012/06/06/2537903.html HDFS API详解 Hadoop中关于文件操作类基本上全部是在&quo ...

  5. java操作hdfs文件、文件夹

    工具类HdfsUtils.java,及测试用例代码如下: HdfsUtils.java package com.xy6.demo.utils; import java.io.ByteArrayInpu ...

  6. hadoop学习1 java操作HDFS

    1.创建目录 package hdfs.operation; import java.io.IOException; import org.apache.hadoop.conf.Configurati ...

  7. shell 删除了hdfs 文件_从零开始学大数据(三) Shell操作HDFS文件系统-中

    1.格式化 [root@master sbin]# hdfs namenode -format 2.命令hdfs dfsadmin 查看(hdfs dfsadmin -report) [root@ma ...

  8. 【转载保存】java操作HDFS

    http://www.cnblogs.com/langgj/p/6595756.html

  9. HDFS文件系统(含hdfs常用命令,java对hdfs API的简单操作)

    HDFS文件系统 HDFS概念 什么是HDFS HDFS的组成 HDFS文件块大小 HFDS命令行操作 基本语法 常用命令 Java操作hdfs 配置编译环境 获取文件系统 上传文件 文件下载 目录创 ...

最新文章

  1. playsound函数Linux使用,函数PlaySound和sndPlaySound的用法
  2. CSS实现 全屏 遮罩
  3. Derby数据库备份
  4. leetcode887 鸡蛋掉落
  5. linux 按日期复制文件夹,Linux 按文件日期分类文件
  6. suricata架构——数据结构和代码流程图解
  7. 2.18 logistic 损失函数的解释
  8. 如果孩子早恋是支持还是反对?
  9. php cgi启动报错,php编译安装,cgi启动,以及memcache扩展编译安装.
  10. Navicat-mysql 中文破解版下载及基础使用教程
  11. crackme 004
  12. 使用FileZilla删除乱码名称文件
  13. editplus编辑器使用-快速开始(editplus通过sftp协议远程编辑文件)
  14. empty怎么发音_empty怎么读?empty是什么意思?
  15. 【搬运及个人处理】联想电脑(Lenovo XiaoXinAir-14IIL 2020)散热模式Fn+Q 失效解决方案
  16. 这套摄像头方案太适合监控院子了!(附:安装方法+物联卡推荐)
  17. 从零开始用Python搭建Socket服务器(初篇)
  18. gravity和layout_gravity的区别(有时使用layout_gravity=center时失效的原因)
  19. 仙人掌之歌——开发(2)
  20. 免费、稳定的天气预报API

热门文章

  1. 解决memcached不能远程访问的问题
  2. 使用 Feign 调用分页接口报错:Method has too many Body parameters(亲测)
  3. jar包和war包区别及理解
  4. python中二维列表的遍历方式(亲测)
  5. sublime开启vim模式
  6. php5.6+Redis+Windows7安装 (phpstudy)
  7. PHP CURL 多线程 GET/POST 类
  8. 反思走火入魔 急功近利:一步一步的做 一步一步的走 顺其自然 水到渠成
  9. java开发surface,World Wind Java开发之十――AnalyticSurface栅格渲染
  10. 微信小程序跳转到其他网页(外部链接)公众号等的实现方法