HDFS的Java API
HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据
为了以编程方式与HDFS进行交互,首先需要得到当前配置文件系统的句柄,实例化一个Configuration对象,并获得一个Hadoop环境中的FileSystem句柄,它将指向当前环境的HDFS NameNode
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FileSystem.create(filepath);方法会在指定的路径创建一个新的文件,并提供一个到新创建的文件的FSDataOutputStream对象;FSDataOutputStream封装了java.io.DataOutputStream,并允许程序向文件中写入基本Java数据类型;如果该文件存在FileSystem.create()方法会覆盖该文件
Path file = new Path("demo.txt");
FSDataOutputStream outStream = fs.create(file);
outStream.writeUTF("Welcome to HDFS Java API !!!");
outStream.close();
在该例子中,该文件将在HDFS中相对于用户的主目录进行创建,产生类似/user/user_name/demo.txt的路径
FileSyste.open(filePath)打开给定文件的FSDataInputStream,FSDataInputStream封装了java.io.DataInputStream,允许程序从文件中读取基本Java数据类型
FSDataInputStream inStream = fs.open(file);
String data = inStream.readUTF();
System.out.println(data);
inStream.close();
配置文件系统对象
可以在Hadoop的环境之外使用HDFS的Java API,这样做必须显示配置HDFS的NameNode和端口,以下是几种进行该项配置的方法:
在获得FileSystem对象之前加载Configuration对象的配置文件,需要确保所有的Hadoop和依赖库都添加在类路径中
Configuration conf = new Configuration();
conf.addResource(new Path(".../hadoop/conf/core-site.xml"));
conf.addResource(new Path(".../hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
通过指定NameNode和端口,将NAMENODE_HOSTNAME和PORT替换为HDFS安装的NameNode的主机名和端口
Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://NAMENODE_HOSTNAME:PORT");
FileSystem fs = FileSystem.get(conf);
HDFS的文件系统API是一种支持多个文件系统的抽象,如果上述程序无法找到有效的HDFS配置,它将会指向本地文件系统,而不是HDFS,可以使用getUri()函数识别FileSystem对象的当前文件系统,在使用正确的HDFS配置文件的情况下,返回hdfs://your_namenode:port,在使用本地文件系统的情况下,则返回file:///
FileSystem fs = FileSystem.get(conf);
fs.getUri();
获取文件的数据块列表
FileSystem对象的getFileBlockLocations()函数,可以用来获取存储在HDFS中的文件数据块的列表,同时可以获取存储块的主机名和块的偏移量,如果计划使用Hadoop MapReduce之外的其他框架执行文件数据的任何数据本地化操作,那么这些信息非常有用
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path file = new Path("demo.txt");
FileStatus fileStatus = fs.getFileStatus(file);
eBlockLocations[]= blocks = fs.getFileBlockLocations(fileStatus,,fileStatus.getLen());
HDFS的Java API的更多相关文章
- HDFS中JAVA API的使用
HDFS中JAVA API的使用 HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...
- 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中的文件进行操作的过程. 对分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 ...
- 使用HDFS客户端java api读取hadoop集群上的信息
本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupI ...
- HDFS的java api操作
hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...
- IDEA 创建HDFS项目 JAVA api
1.创建quickMaven 1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中 2.写一个repostory将依赖加载到本地仓库中 这是加载完成 ...
随机推荐
- htaccess文件中RewriteRule 规则参数介绍
.htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...
- swift - 利用UIDatePicker实现定时器的效果
效果图如下: 可以通过UIDatePicker调整倒计时的时间,然后点击UIButton开始倒计时,使用NSTimer进行倒计时的时间展示,我是声明了一个label也进行了标记, 然后点击按钮开始倒计 ...
- [转载]2014年10月26完美世界校招两道java题
public class VolitileTest { volatile static int count=0; public static void main(String args[]){ for ...
- windows cmd命令大全/cmd命令提示符大全
刚接触电脑的时候是从DOS系统开始,DOS时代根本就没有Windows这样的视窗操作界面,只有一个黑漆漆的窗口,让你输入命令.所以学DOS系统操作,cmd命令提示符是不可或缺的.可以告诉大家,大多数的 ...
- STM32学习之路之入门篇
2006年ARM公司推出了基于ARMV7架构的cortex系列的标准体系结构,以满足各种技术得不同性能要求,包含了A,R,M三个分工明确的系列 其中A系列面向复杂的尖端应用程序,用于运行开放式的复杂操 ...
- 在js中通过call或者apply实现继承
通过call或者apply可以实现函数里面this的改变,利用这一特点,可以实现继承 代码如下所示: /*父类*/ function Parent(add,net,no,teacher) { this ...
- java基础---->多线程之yield(三)
yield方法的作用是放弃当前的CPU资源,将它让给其它的任务去占用CPU执行时间.但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片.今天我们通过实例来学习一下yield()方法的使用.最是 ...
- Codeforces 603E Pastoral Oddities
传送门:http://codeforces.com/problemset/problem/603/E [题目大意] 给出$n$个点,$m$个操作,每个操作加入一条$(u, v)$长度为$l$的边. 对 ...
- nginx proxy模块
环境: user:192.168.100.169 nginx代理:192.168.100.175 tomcat:192.168.100.175 域名:www.vijay.com --->192 ...
- Dcloud开发-- 打开蓝牙
这样打开APP就会直接提示是否要打开蓝牙: <script type="text/javascript"> mui.init(); mui.plusReady(func ...