对于操作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. AngularJS表单验证
  2. 查看本地文档的一些方法
  3. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...
  4. 深入理解HTML表格
  5. 语言解析ssl包_HPSocket v5.0.1:支持 IPv6 及多 SSL 证书
  6. Online DDL
  7. Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备
  8. 记一次和摄像头的摩擦经历
  9. abp radio表单元素 消失了
  10. kind富文本编辑器_在VueJs中集成UEditor 富文本编辑器
  11. 统计学第一章--最小二乘拟合正弦函数,正则化
  12. 关于java设计模式与极品飞车游戏的思考
  13. Quadtrees UVA - 297
  14. VS2008远程调试简介
  15. 【元胞自动机】基于matlab激进策略元胞自动机三车道(不开放辅路,软件园影响)交通流模型【含Matlab源码 1297期】
  16. Manjaro 常用软件安装
  17. 欧姆龙, PLC CJ2M标准程序,一共控制12个伺服电机
  18. 服务器带宽打开网页很慢,网速快但是打开网页慢是怎么回事 浏览器打开网页慢的解决办法汇总...
  19. Python 爬取“微博树洞”详细教程
  20. Sentinel流量卫兵

热门文章

  1. Hibernate常见问题集锦
  2. java backbone_[Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合
  3. Oracle Caused by: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect
  4. MySQL(七):InnoDB 自适应Hash索引(Adaptive Hash Index)
  5. Django2.2-LookupError No installed app with label admin
  6. Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差别
  7. mysql 占比函数_MySQL中你必须了解的函数
  8. php集成jpush教程,Laravel 集成 JPush 极光推送指北
  9. 无线抄表免费透传云服务器,两个WIFI模块USR-WIFI232-B2连接有人云实现远程一对一透传...
  10. 【若依(ruoyi)】按钮样式