使用实例:

1.项目结构(引入包hadoop-0.20.2-core.jar和commons-logging.jar)

2.代码

HdfsCommon.java

public class HdfsCommon {private Configuration conf;private FileSystem fs;public HdfsCommon() throws IOException{conf=new Configuration();fs=FileSystem.get(conf);}/*** 上传文件,* @param localFile 本地路径* @param hdfsPath 格式为hdfs://ip:port/destination* @throws IOException*/public void upFile(String localFile,String hdfsPath) throws IOException{InputStream in=new BufferedInputStream(new FileInputStream(localFile));OutputStream out=fs.create(new Path(hdfsPath));IOUtils.copyBytes(in, out, conf);}/*** 附加文件* @param localFile* @param hdfsPath* @throws IOException*/public void appendFile(String localFile,String hdfsPath) throws IOException{InputStream in=new FileInputStream(localFile);OutputStream out=fs.append(new Path(hdfsPath));IOUtils.copyBytes(in, out, conf);}/*** 下载文件* @param hdfsPath* @param localPath* @throws IOException*/public void downFile(String hdfsPath, String localPath) throws IOException{InputStream in=fs.open(new Path(hdfsPath));OutputStream out=new FileOutputStream(localPath);IOUtils.copyBytes(in, out, conf);}/*** 删除文件或目录* @param hdfsPath* @throws IOException*/public void delFile(String hdfsPath) throws IOException{fs.delete(new Path(hdfsPath), true);}
}

core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- global properties --><property><name>hadoop.tmp.dir</name><value>/home/whuqin/tmp</value></property><!-- file system properties --><property><name>fs.default.name</name><value>hdfs://localhost:9000</value></property>
</configuration>

测试代码Test.java

public class Test {public static void main(String[] args) throws IOException {HdfsCommon hdfs=new HdfsCommon();
//      hdfs.upFile("/home/whuqin/file01", "hdfs://localhost:9000/user/whuqin/input/file01copy1");
//      hdfs.downFile("hdfs://localhost:9000/user/whuqin/input/file01copy", "/home/whuqin/fileCopy");
//      hdfs.appendFile("/home/whuqin/file01", "hdfs://localhost:9000/user/whuqin/input/file01copy");hdfs.delFile("hdfs://localhost:9000/user/whuqin/input/file01copy1");}
}

3.直接点击项目,右键运行即可(在eclipse下)

4. 在终端下,使用hadoop命令行测试结果。

读文件流程:

1.client调用FileSystem.open()方法:

FileSystem通过RPC与namenode通信,namenode返回该文件的部分或全部block列表(含有block拷贝的datanode地址)。

选取距离客户端最近的datanode建立连接,读取block,返回FSDataInputStream。

2.client调用输入流的read()方法:

当读到block结尾时,FSDataInputStream关闭与当前datanode的连接,并为读取下一个block寻找最近datanode。

读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。

如果block列表读完后,文件还未结束,FileSystem会继续从namenode获取下一批block列表。

这些操作对client透明,client感觉到的是连续的流。

3.关闭FSDataInputStream

写文件流程:

1.client调用FileSystem的create()方法:

FileSystem向namenode发出请求,在namenode的namespace里面创建一 新文件,但是并不关联任何块。

Namenode检查文件是否已存在、操作权限。如果检查通过,namenode记录新文件信息,并在某一个datanode上创建数据块。

返回FSDataOutputStream,将client引导至该数据块执行写入操作。

2.client调用输出流的write()方法:HDFS默认将每个数据块放置3份。FSDataOutputStream将数据首先写到第一节点,第一节点将数据包传送并写入第二节点,第二节点=》第三节点。

3.client调用流的close()方法:flush缓冲区的数据包,block完成复制份数后,namenode返回成功消息。

补:1.客户端可以独立于Hadoop的集群。2.hadoop的底层传输协议为RPC。3.写数据备份放置策略:如果客户端在集群上,第一份在客户端,否则随机;第二份与第一份不在同一机架;第三份与第二份在同一机架,不同节点;其余放在随机节点,但避免一个机架多份备份。

转载于:https://www.cnblogs.com/whuqin/archive/2011/08/29/4982058.html

HDFS读写文件实例与解析相关推荐

  1. pyspark —— spark dataframe 从hdfs读写文件:按照指定文件格式读写文件(读写csv、json、text文件,读取hive表,读取MySQL表)、按照指定分隔符读写文件

    spark有3种数据结构--RDD.DataFrame.DataSet.这里展示的文件读写方式,都是针对dataFrame数据结构的,也就是文件读进来之后,是一个spark dataFrame. 0. ...

  2. python读写文件实例_python读写文件的简单示例

    这篇文章主要为大家详细介绍了python读写文件的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 首先看一个例子: # 来自www.512 ...

  3. linux读写文件实例,Linux在应用层读写寄存器的方法及实现实例

    Linux在应用层读写寄存器的方法 可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,直接在应用层对寄存器进行操作,示例如下: #include #include ...

  4. wav音频文件实例详细解析

    1.WAV格式 Waveform Audio File Format ( WAV ,又或者是因为 WAV 后缀而被大众所知的),它采用 RIFF (Resource Interchange File ...

  5. 生产者消费者代码_生产者消费者模型:Kotlin 多线程读写文件实例

    计算机科学中的所有问题,都可以通过添加一个间接层来解决. 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题. 生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产 ...

  6. C/C++读写文件实例

    2019独角兽企业重金招聘Python工程师标准>>> // OptFile.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" ...

  7. HDFS Truncate文件截断

    前言 在linux操作系统的使用中,有的时候我们可能想对某个现有的文件做尾部的截取(比如为了保留头部关键信息),但同时又不想重新写一个新的文件出来,这个时候我们其实可以采用系统提供的truncate命 ...

  8. python pandas读取excel-Python使用Pandas读写Excel实例解析

    这篇文章主要介绍了Python使用Pandas读写Excel实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pandas是python的一个 ...

  9. python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...

    本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如: open ( ...

最新文章

  1. Linux/Unix好书推荐
  2. Tensorflow C++ 编译和调用图模型
  3. SAP QM初阶事务代码QA11对检验批做UD时出现很多UD Code的选择集?
  4. spring boot 下载
  5. 苹果雪豹操作系统正式版_苹果文件泄密?3 款新 iPhone 正式命名曝光
  6. JTable调整列宽
  7. 【交互】【随机】Lost Root(CF1061F)
  8. 57岁博士,第三次出征太空...
  9. JQuery Datatables editor 本地编辑功能
  10. Python 字符串、时间、日期、时间戳的相互转换(时间戳转换)
  11. Koa2 洋葱模型 —— compose 串联中间件的四种实现
  12. 公司收银系统要不要服务器,一套收银系统要多少成本
  13. 敏捷教练----敏捷项目管理-史诗、故事、主题
  14. 基于Java的网上商城系统
  15. 第十一章 文件操作_C语言插入、删除、更改文件内容
  16. 【saltstack】配置salt-master端REDIS_RETURN
  17. 输入法出现异常???输入英文字母分隔很大???你真的会使用输入法了吗???如何高效使用输入法???微软自带输入法切换
  18. 制作html5页面的软件,制作h5页面的软件
  19. 电机的matlab仿真实例,电机控制Matlab仿真模型
  20. python将中文转换成utf8_如何在python中从unicode转换成utf8?

热门文章

  1. windows 命令行远程连接_CentOS系列001:windows远程桌面连接CentOS
  2. c语言回溯算法骑士周游,191-骑士周游回溯算法代码实现(1)
  3. 支持向量机python代码_支持向量机及python实现(一)
  4. 数据仓库工具箱:维度建模权威指南3
  5. HBASE ERROR: Table already exists: FileTable! list时候却查不到表
  6. jdbctype 对应java_MyBatis配置Mapping,JavaType和JDBCType的对应关系
  7. java 枚举使用例子_Java枚举详解及使用实例(涵盖了所有典型用法)
  8. mysql 中报1062_mysql error 1062 问题解决
  9. Java十大排序算法总结,Java排序算法总结之冒泡排序
  10. 可以用计算机进行模拟实验,随着信息技术的发展,包括核实验在内的许多科学研究都可以用计算机进行模拟实验, - 问答库...