如何使用Java API访问HDFS为目录设置配额

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Java API访问HDFS为目录设置配额相关的知识,希望对你有一定的参考价值。

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
参考技术A Api里面应该有相关的调用接口或者方法,实在不行,用Java调用linux命令去配磁盘限额试试呢

如何使用Java API读写HDFS

//流读入和写入
InputStream in=null;
//获取HDFS的conf
//读取HDFS上的文件系统
FileSystem hdfs=FileSystem.get(conf);
//使用缓冲流,进行按行读取的功能
BufferedReader buff=null;
//获取日志文件的根目录
Path listf =new Path("hdfs://10.2.143.5:9090/root/myfile/");
//获取根目录下的所有2级子文件目录
FileStatus stats[]=hdfs.listStatus(listf);
//自定义j,方便查看插入信息
int j=0;
for(int i = 0; i < stats.length; i++)
//获取子目录下的文件路径
FileStatus temp[]=hdfs.listStatus(new Path(stats[i].getPath().toString()));
for(int k = 0; k < temp.length;k++)
System.out.println("文件路径名:"+temp[k].getPath().toString());
//获取Path
Path p=new Path(temp[k].getPath().toString());
//打开文件流
in=hdfs.open(p);
//BufferedReader包装一个流
buff=new BufferedReader(new InputStreamReader(in));
String str=null;
while((str=buff.readLine())!=null)

System.out.println(str);

buff.close();
in.close();

参考技术A HDFS API详解

  Hadoop中关于文件操作类基本上全部是在"org.apache.hadoop.fs"包中,这些API能够支持的操作包含:打开文件,读写文件,删除文件等。

Hadoop类库中最终面向用户提供的接口类是FileSystem,该类是个抽象类,只能通过来类的get方法得到具体类。get方法存在几个重载版本,常用的是这个:

static FileSystem get(Configuration conf);

  该类封装了几乎所有的文件操作,例如mkdir,delete等。综上基本上可以得出操作文件的程序库框架:

operator()



得到Configuration对象

得到FileSystem对象

进行文件操作



6.1 上传本地文件

  通过"FileSystem.copyFromLocalFile(Path src,Patch dst)"可将本地文件上传到HDFS的制定位置上,其中src和dst均为文件的完整路径。具体事例如下:

package com.hebut.file;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class CopyFile

public static void main(String[] args) throws Exception

Configuration conf=new Configuration();

FileSystem hdfs=FileSystem.get(conf);

//本地文件

Path src =new Path("D:\\HebutWinOS");

//HDFS为止

Path dst =new Path("/");

hdfs.copyFromLocalFile(src, dst);

System.out.println("Upload to"+conf.get("fs.default.name"));

FileStatus files[]=hdfs.listStatus(dst);

for(FileStatus file:files)

System.out.println(file.getPath());





以上是关于如何使用Java API访问HDFS为目录设置配额的主要内容,如果未能解决你的问题,请参考以下文章

HDFS配额指南

HDFS——配额

HDFS的配额管理

hdfs配额查询

HDFS 配额(Quotas)指南 -- Apache Hadoop 2.9.0

如何使用 AWS API Gateway 为 CORS 预检请求设置配额