Hadoop HDFS Basic JAVA API
- DistributedFileSystem:访问分布式环境中的HDFS文件
- LocalFileSystem: 访问本地系统中的HDFS文件
- FTPFileSystem: To access HDFS file FTP client
- WebHdfsFileSystem: 访问整个互联上的HDFS文件
hdfs://localhost:9000/user/joe/TestFile.txt
URI uri = URI.creat("hdfs://host:port/path")
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
Path实例由URI实例构造,可以避免URI的OS依赖性,如Windows在路径中使用\\path 然而Linxu使用//。可以避免父子依赖性。
Path path=new Path (uri); //It constitute URI
Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://localhost:9000");
FileSystem
public static FileSystem get(Configuration conf);
public static FileSystem get(URI uri, Configuration conf);
public static FileSystem get(URI uri, Configuration conf, String user);
public static LocalFileSystem getLocal(Configuration conf);
FSDataInputStream类
URI uri = URI.create("hdfs://host:port/file Path");
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(rui, conf);
FSDataInputStream in = fs.open(new Path(uri));
以上方法得到的FSDataInputStream是默认缓冲空间4096byte。我们可以在创建输入流的时候指定缓冲空间大小,如下:
public abstract FSDataInputStream open(Path path, int sizeBuffer)
public interface Seekable{
void seek(long pos) throws IOException;
long getPos() throws IOException;
boolean seekToNewSource(long targetPos) throws IOException;
}
seek()方法搜寻给定的offset偏移量的文件位置,从而使read()方法可以从给定的文件位置开始读取。getPos()方法返回输入流当前的文件位置。一个小例子:
FileSystem fs = FileSystem.get(uri, conf);
FSDataInputStream in = fs.open(new Path(uri));
byte[] buffer = new byte[5];
in.seek(5); // sent to 5th position
in.read(buffer, 0, 5);//从输入流的第5个位置开始读取5个字节到buffer
System.out.println(new String(buffer));//打印从第5个位置开始的连续5个字节。(相对与输入流而言的!)
in.read(10, buffer, 0, 5);//从第10个位置开始读取5个字节到buffer
FSDataInputStream 也实现了PositionedReadable接口,从而提供了read和readFully方法来从seek的位置开始读取部分字节数据。如下:
read(long position, byte[] buffer, int offset, int length);
FSDataOutputStream
public FSDataOutputStream create(Path f) // 创建空文件
public FSDataOutputStream append(Path f)//在已存在文件后追加
Creat()方法还可以传递Progressable接口参数,用来追踪文件创建状态,如下:
public FSDataOutputStream create(Path f, Progressable progress);
FileStatus
URI uri = URI.create(strURI);
FileSystem fileSystem = FileSystem.get(uri, conf);
FileStatus fileStatus = fileSystem.getFileStatus(new Path(uri));
System.out.println("AccessTime:" + fileStatus.getAccessTime());
System.out.println("Len:"+fileStatus.getLen());
System.out.println("ModificationTime:"+fileStatus.getModificationTime());
System.out.println("Path:"+fileStatus.getPath());
如果uri是一个目录而不是文件,则listStatus()会返回一个FileStatus数组。如下:
public FileStatus[] listStatus(Path f)
Directories
public boolean mkdirs(Path f);
Delete file
public boolean delete(Path f, boolean recursive) throws IOException
Hadoop HDFS Basic JAVA API的更多相关文章
- Hadoop HDFS 用java API 进行读写
public class HdfsApp { public static FileSystem getFileSystem() throws Exception { Configuration con ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
- Hadoop(五):HDFS的JAVA API基本操作
HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...
- HDFS中JAVA API的使用
HDFS中JAVA API的使用 HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...
- HDFS的Java API
HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...
- 使用HDFS客户端java api读取hadoop集群上的信息
本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupI ...
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
- Sample: Write And Read data from HDFS with java API
HDFS: hadoop distributed file system 它抽象了整个集群的存储资源,可以存放大文件. 文件采用分块存储复制的设计.块的默认大小是64M. 流式数据访问,一次写入(现支 ...
- 熟练掌握HDFS的Java API接口访问
HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...
随机推荐
- ahjesus Ubuntu配置svn服务器
转载自http://www.cnblogs.com/ximu/articles/2119136.html 亲测可用 一.SVN安装1.安装包$ sudo apt-get install subvers ...
- PHP内核探索之变量(4)- 数组操作
上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪. ...
- Java 经典实例: Unicode字符和String之间的转换
在Java诞生之际,Unicode码是一个16位的字符集,因此char值似乎顺其自然为16位宽,多年来一个char变量几乎可以表示任何Unicode字符. /** * Created by Frank ...
- Linux学习笔记17--Linux系统启动详解
多数操作系统的启动流程: BIOS启动自检 ->MBR引导->执行引导程序GRUB->加载内核->执行init->runlevel BIOS(Basic Input ...
- WPF钟表效果实现
WPF在样式定义和UI动画上面相对于以前的技术有了不少的提升,下面给出WPF技术实现钟表的效果: 1.Visual Studio新建一个WPF应用程序,命名为WpfClock,新建一个images文件 ...
- 定制Eclipse IDE之界面篇
为什么要定制IDE? 在工作时候,当公司有了自己的框架,给自己开放人员用,甚至是可以卖的时候,我们可以做成一个产品,而这个产品将包括框架本身.文档.工具.教程等等.工具之中最重要的莫过于开发 ...
- 详细解读XMLHttpRequest(一)同步请求和异步请求
本文主要参考:MDN XMLHttpRequest 让发送一个HTTP请求变得非常容易.你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求.当传输完毕后,结果的HTTP状态以及返回的 ...
- windows.open()、close()方法详解
windows.open()方法详解: window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- Ubuntu 安装系统资源托盘监视应用
安装 sudo apt-get install indicator-multiload 打开 indicator-multiload 设置开机启动 sudo gedit /etc/rc.loca ...