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的更多相关文章

  1. HDFS中JAVA API的使用

    HDFS中JAVA API的使用   HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...

  2. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  3. Hadoop(五):HDFS的JAVA API基本操作

    HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...

  4. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  5. Sample: Write And Read data from HDFS with java API

    HDFS: hadoop distributed file system 它抽象了整个集群的存储资源,可以存放大文件. 文件采用分块存储复制的设计.块的默认大小是64M. 流式数据访问,一次写入(现支 ...

  6. 熟练掌握HDFS的Java API接口访问

    HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

  7. 使用HDFS客户端java api读取hadoop集群上的信息

    本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupI ...

  8. HDFS的java api操作

    hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...

  9. IDEA 创建HDFS项目 JAVA api

    1.创建quickMaven 1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中 2.写一个repostory将依赖加载到本地仓库中 这是加载完成 ...

随机推荐

  1. 【MFC】OnInitDialog

    OnInitDialog OnInitDialog是MFC的面向对象编程语言的类CDialog中的初始化成员函数名(虚函数).相当于对对话框进行初始化处理.   属    性 初始化成员函数名 处   ...

  2. VC++实现编辑框输入提示效果

    编辑框在第一次输入时最好给出一个虚拟的输入提示信息文本,这样的效果更佳友好.,我在编辑框添加灰色提示字(html+VC)一文中简单介绍了一些方法,但是效果欠佳. 原始的编辑框CEdit类没有这样的功能 ...

  3. C#设计模式系列:抽象工厂模式(AbstractFactory)

    出自:http://www.cnblogs.com/libingql/archive/2012/12/09/2809754.html 1. 抽象工厂模式简介 1.1 定义 抽象工厂(Abstract ...

  4. [笔试题]MS 2014

    http://blog.csdn.net/xiaoerlyl/article/details/12126807 别人写的答案: http://blog.csdn.net/zhou2214/articl ...

  5. C语言近程型(near)和远程型(far)的区别是什么?

    DOS用一种分段结构来寻址计算机的内存,每一个物理存储位置都有一个可以用段一偏移量方式来访问的相关地址.例如,下面就是一个典型的段式地址:     A000:1234 冒号左边的部分代表段地址(A00 ...

  6. mount: block device /dev/cdrom is write-protected, mounting read-only 解决方法

    [root@localhost ~]# mount /dev/cdrom /mnt/cdrom/ mount: block device /dev/sr0 is write-protected, mo ...

  7. 【mysql】mysql front 提示Access violation at address 010C9CD0 in module ‘mysql-front.exe’

    1 错误描述: 利用mysql-front 工具新建数据库.提示了一下错误 2 解决办法: 内存越界问题,最好重新注册下Windows的动态链接库 首先“开始”—“cmd” 在打开的dos窗口中运行

  8. java基础---->多线程之Runnable(一)

    java线程的创建有两种方式,这里我们通过简单的实例来学习一下.一切都明明白白,但我们仍匆匆错过,因为你相信命运,因为我怀疑生活. java中多线程的创建 一.通过继承Thread类来创建多线程 pu ...

  9. 【黑金ZYNQ7000系列原创视频教程】06.ZYNQ来自FPGA的中断——按键中断实验

    黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36640&extra=page%3D1 爱奇艺地址: http: ...

  10. 微信小游戏 egret.getDefinitionByName获取不到

    使用getDefinitionByName获取类定义 输出为null,获取不了 增加window["LoadingUI"] = LoadingUI 获取成功 总结: 这样无论是游戏 ...