HDFS是一种文件系统,存储着Hadoop应用将要处理的数据,类似于普通的Unix和linux文件系统,不同的是他是实现了google的GFS文件系统的思想,是适用于大规模分布式数据处理相关应用的、可扩展的分布式文件系统。它有以下优点:

1、在分布式存储中,经常会出现节点失效的情况,HDFS可以持续监视,错误检查,容错处理,自动恢复;

2、分布式存储的文件都是非常巨大的,HDFS重新规定了每次I/O的块的大小;

3、对于搜索引擎的业务,大部分都只会在文件尾添加新数据,很少修改已有数据。HDFS做了优化;

4、与应用一起设计的文件系统API对整个系统的弹性和适用性有很大好处;

5、有效的支持多个客户端并行添加同一个文件。

虽然HDFS实现了这么多的功能,但是因为它已经实现为一个开源框架,所以对于程序开发者来说,并不需要了解其底层的文件操作,我们可以通过其提供的一套与linux文件命令类似的命令行工具来进行文件操作。

基本文件命令:

格式为:hadoop fs -cmd <args>

cmd的命名通常与unix对应的命令名相同。例如,文件列表命令: hadoop fs -ls

1、添加目录和文件

HDFS有一个默认的工作目录 /user/$USER,其中$USER是你的登录用户名。不过目录不会自动建立,我们现在用mkdir建立它,我使用的是jared作为用户名。

hadoop fs -mkdir /user/jared

(hadoop的mkdir命令会自动创建父目录,类似于带-p的unix命令)

我们现在放本地文件系统的一个文件进去。

hadoop fs -put example.txt .

最后一个参数是句点,相当于放入了默认的工作目录,等价于 hadoop fs -put example.txt /user/jared

当你把文件放入HDFS上后,你就可以运行Hadoop程序来处理它。

2、检索文件

get命令与put命令相反,它从HDFS复制文件回到本地文件系统。

hadoop fs -get example.txt .

复制到本地的当前工作目录中。

另一种是显示数据,用cat

hadoop fs -cat example.txt

3、删除文件

rm命令

hadoop fs -rm example.txt

也可以用来删除空目录

编程读写HDFS

利用HDFS给我们提供的API,我们同样可以访问它。

在Hadoop中用作文件操作的主类位于org.apache.hadoop.fs软件包中。包括常见的open、read、write、close。Hadoop文件的API起点是FileSystem类,这是一个与文件系统交互的抽象类,我们通过调用factory的方法FileSystem.get(Configuration conf)来取得所需的FileSystem实例,如下我们可以获得与HDFS接口的FileSystem对象:

Configuration conf = new Configuration();

FileSystem hdfs = FileSystem.get(conf);//获得HDFS的FileSystem对象

如果我们要实现HDFS与本地文件系统的交互,我们还需要获取本地文件系统的FileSystem对象

FileSystem local = FileSystem.getLocal(conf);//获得本地文件系统的FileSystem对象

以下代码讲解了一个例子,我们开发一个PutMerge程序,用于合并本地文件后放入HDFS,因为大文件HDFS处理起来比较容易,所以这个程序经常会在以后的开发中用到

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class PutMerge {

public static void main(String[] args) throws IOException {

Configuration conf = new Configuration();

FileSystem hdfs =FileSystem.get(conf); //获得HDFS文件系统的对象

FileSystem local = FileSystem.getLocal(conf);//获得本地文件系统的对象

Path inputDir = new Path(args[0]);//设定输入目录

Path hdfsFile = new Path(args[1]);//设定输出目录

try{

FileStatus[] inputFiles = local.listStatus(inputDir);//FileStatus的listStatus()方法获得一个目录中的文件列表

FSDataOutputStream out = hdfs.create(hdfsFile);//生成HDFS输出流

for(int i = 0; i < inputFiles.length; i ++){

System.out.println(inputFiles[i].getPath().getName());

FSDataInputStream in = local.open(inputFiles[i].getPath());//打开本地输入流

byte[] buffer = new byte[256];

int bytesRead = 0;

while((bytesRead = in.read(buffer))>0){

out.write(buffer,0,bytesRead);//通过一个循环来写入

}

in.close();

}

out.close();

}catch (IOException e) {

e.printStackTrace();

}

}

转载于:https://blog.51cto.com/ganlanqing/1388700

HDFS文件系统的操作相关推荐

  1. Java操作HDFS文件系统

    对于操作HDFS文件系统,需要有一个入口,对于Hadoop来说,编程入口就是FileSystem. 例如我们要使用API创建一个文件夹: /*** @author vincent* @time 201 ...

  2. HDFS文件系统的JAVA-API操作(一)

    HDFS文件系统的JAVA-API操作(一) 要点导航 实例1:使用java.net.URL访问HDFS文件系统 实例2:使用FileSystem访问HDFS文件系统 实例3:创建HDFS目录 实例4 ...

  3. HDFS文件系统(含hdfs常用命令,java对hdfs API的简单操作)

    HDFS文件系统 HDFS概念 什么是HDFS HDFS的组成 HDFS文件块大小 HFDS命令行操作 基本语法 常用命令 Java操作hdfs 配置编译环境 获取文件系统 上传文件 文件下载 目录创 ...

  4. 2021年大数据Hadoop(十二):HDFS的API操作

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS的API操作 ...

  5. 使用HDFS API实现hadoop HDFS文件系统的基本操作

    下面介绍使用hadoop的HDFS分布式文件系统的java API实现基本的文件操作,比如:创建文件.修给文件.创建目录或者文件夹.从本地系统上传文件到HDFS系统中.从HDFS文件系统中下载文件到本 ...

  6. HDFS文件系统基本文件命令、编程读写HDFS

    HDFS是一种文件系统,存储着Hadoop应用将要处理的数据,类似于普通的Unix和linux文件系统,不同的是他是实现了google的GFS文件系统的思想,是适用于大规模分布式数据处理相关应用的.可 ...

  7. 学习笔记Hadoop(十)—— Hadoop基础操作(2)—— HDFS常用Shell操作

    三.HDFS常用Shell操作 3.1.HDFS文件系统 HDFS Shell 指的是可以使用类似shell的命令来直接和Hadoop分布式文件系统(HDFS)进行交互. 使用命令: bin/hado ...

  8. Hadoop 核心编程之 HDFS 的文件操作

    前言 本文并没有打算介绍 HDFS 的读写流程,虽然这是一块比较重要的内容.如果你感兴趣,可以去搜索相关资料.如果一遍没有看懂,请看第二遍. 本文还是以代码为主,并附以简短的说明,帮助你理解代码的逻辑 ...

  9. HDFS的API操作-获取FileSystem方式

    HDFS 的 API 操作 导入 Maven 依赖 <repositories><repository><id>cloudera</id><url ...

  10. hdfs如何查找指定目录是否文件_hadoop实战教程-HDFS文件系统如何查看文件对应的block...

    问题导读: 1.文件与block的信息被保存在什么文件中? 2.如何查看整个目录树? 3.可以通过什么方式查看文件与block的对应关系? (1)文件分割后,会有一个 文件 --> block的 ...

最新文章

  1. 计算机领域中随处可见的抽象
  2. 如何在Eclipse里方便地进行markdown文件编辑
  3. 【python】去除字符串头尾的多余符号
  4. 能代表个人水平的c语言程序,求全国高等学校计算机水平考试级C程序设计的免费..._报关水平_帮考网...
  5. Netflix OSS、Spring Cloud还是Kubernetes? 都要吧!
  6. jsp为什么被淘汰了?
  7. 尚硅谷宋红康JVM资料笔记1 --- JVM与Java体系结构
  8. html格式蠕虫病毒,蠕虫病毒Win32.Womble.B
  9. SAP DELETE ADJACENT DUPLICATES FROM语句的深入研究及应用
  10. 电脑水冷,论电脑到底有没有必要装水冷
  11. iOS 创建 pch 文件
  12. 总结 62 种在深度学习中的数据增强方式
  13. STM32F103C8T6串口通信
  14. Delphi中多库关联查询
  15. C 语言的fseek()
  16. laravel 邮件发送
  17. R语言高维数据的pca、 t-SNE算法降维与可视化分析案例报告
  18. python爬虫实战之多线程爬取前程无忧简历
  19. 错题本——数据库系统工程师 2010
  20. QPSK解调过程中的抽样判决

热门文章

  1. PHP批量插入多条数据到Mysql报错:Mysql Prepared statement contains too many placeholders
  2. Git 输入命令git branch -a 后怎么返回
  3. python如何定义一个空列表1s_如何在Python中创建多个(但单独的)空列表?
  4. 老显卡都涨价了,所以我把坏的显卡拿出来修
  5. 在MAC系统上,重新编译了一次OpenJDK8
  6. 由古书看,古人应该知道地球是圆的
  7. JAVA中RGB字串转换为颜色
  8. SHELL使用sudo echo x 时提示权限不够,怎么办?
  9. 什么年代了,买硬盘不论T?
  10. 手机拍照普及,相机依然拥有不可替代的优势