Java操作HDFS文件系统
对于操作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文件系统相关推荐
- hadoop java操作hdfs
hfds 是一种文件系统,用于存储hadoop将要处理的数据.适用于大规模分布式数据处理,是一个可扩展行的文件分布式系统: 优点 1.如果出现节点宕机,hdfs,可以持续监视,错误检查,容错处理,文档 ...
- Java 操作 HDFS
HDFS 作为开源界比较成熟的分布式文件存储系统,适用于海量文件存储,本文介绍了如何使用 Java 操作 HDFS,采用 Maven 管理包. pom.xml <dependency>&l ...
- Java操作HDFS文件
1.读取单个文件 [java] view plain copy Date date = DateUtil.getSpecifiedDayBefore(); String yesterday = Dat ...
- JAVA操作HDFS API(hadoop)
http://www.cnblogs.com/alisande/archive/2012/06/06/2537903.html HDFS API详解 Hadoop中关于文件操作类基本上全部是在&quo ...
- java操作hdfs文件、文件夹
工具类HdfsUtils.java,及测试用例代码如下: HdfsUtils.java package com.xy6.demo.utils; import java.io.ByteArrayInpu ...
- hadoop学习1 java操作HDFS
1.创建目录 package hdfs.operation; import java.io.IOException; import org.apache.hadoop.conf.Configurati ...
- shell 删除了hdfs 文件_从零开始学大数据(三) Shell操作HDFS文件系统-中
1.格式化 [root@master sbin]# hdfs namenode -format 2.命令hdfs dfsadmin 查看(hdfs dfsadmin -report) [root@ma ...
- 【转载保存】java操作HDFS
http://www.cnblogs.com/langgj/p/6595756.html
- HDFS文件系统(含hdfs常用命令,java对hdfs API的简单操作)
HDFS文件系统 HDFS概念 什么是HDFS HDFS的组成 HDFS文件块大小 HFDS命令行操作 基本语法 常用命令 Java操作hdfs 配置编译环境 获取文件系统 上传文件 文件下载 目录创 ...
最新文章
- playsound函数Linux使用,函数PlaySound和sndPlaySound的用法
- CSS实现 全屏 遮罩
- Derby数据库备份
- leetcode887 鸡蛋掉落
- linux 按日期复制文件夹,Linux 按文件日期分类文件
- suricata架构——数据结构和代码流程图解
- 2.18 logistic 损失函数的解释
- 如果孩子早恋是支持还是反对?
- php cgi启动报错,php编译安装,cgi启动,以及memcache扩展编译安装.
- Navicat-mysql 中文破解版下载及基础使用教程
- crackme 004
- 使用FileZilla删除乱码名称文件
- editplus编辑器使用-快速开始(editplus通过sftp协议远程编辑文件)
- empty怎么发音_empty怎么读?empty是什么意思?
- 【搬运及个人处理】联想电脑(Lenovo XiaoXinAir-14IIL 2020)散热模式Fn+Q 失效解决方案
- 这套摄像头方案太适合监控院子了!(附:安装方法+物联卡推荐)
- 从零开始用Python搭建Socket服务器(初篇)
- gravity和layout_gravity的区别(有时使用layout_gravity=center时失效的原因)
- 仙人掌之歌——开发(2)
- 免费、稳定的天气预报API
热门文章
- 解决memcached不能远程访问的问题
- 使用 Feign 调用分页接口报错:Method has too many Body parameters(亲测)
- jar包和war包区别及理解
- python中二维列表的遍历方式(亲测)
- sublime开启vim模式
- php5.6+Redis+Windows7安装 (phpstudy)
- PHP CURL 多线程 GET/POST 类
- 反思走火入魔 急功近利:一步一步的做 一步一步的走 顺其自然 水到渠成
- java开发surface,World Wind Java开发之十――AnalyticSurface栅格渲染
- 微信小程序跳转到其他网页(外部链接)公众号等的实现方法