写hdfs的API
2016-06-21 22:03
302 查看
HDFS设计之处并不支持给文件追加内容,这样的设计是有其背景的(如果想了解更多关于HDFS的append的曲折实现,可以参考《FileAppendsinHDFS》:http://blog.cloudera.com/blog/2009/07/file-appends-in-hdfs/),但从HDFS2.x开始支持给文件追加内容,可以参见https://issues.apache.org/jira/browse/HADOOP-8230。可以再看看http://www.quora.com/HDFS/Is-HDFS-an-append-only-file-system-Then-how-do-people-modify-the-files-stored-on-HDFS。正如HADOOP-8230所述,只需要将hdfs-site.xml中的以下属性修改为true就行。
目前如何在命令行里面给HDFS文件中追加内容我还没找到相应的方法。但是,我们可以通过Hadoop提供的API实现文件内容追加,如何实现?这里我写了一个简单的测试程序:
将上面的代码打包成jar(这里我取名为hdfs.jar)文件,然后上传到机器中,比如我上传到我的home目录,在程序运行前,我们来看看HDFS中wyp.txt文件中的内容有什么
好,我们再来看看/home/wyp/append.txt文件中的内容:
看完代码中所涉及到的两个文件之后,我们再运行hdfs.jar
运行完之后,看看wyp.txt内容
好了,wyp.txt文件已经追加了append.txt文件中的内容了。
参考:http://www.aboutyun.com/thread-10305-1-1.html
1 | <property> |
2 | <name>dfs.support.append</name> |
3 | <value> true </value> |
4 | </property> |
01 | package com.wyp; |
02 |
03 | import org.apache.hadoop.conf.Configuration; |
04 | import org.apache.hadoop.fs.FileSystem; |
05 | import org.apache.hadoop.fs.Path; |
06 | import org.apache.hadoop.io.IOUtils; |
07 |
08 | import java.io.*; |
09 | import java.net.URI; |
10 |
11 | /** |
12 | * |
13 | * |
14 | * |
15 | */ |
16 | public class
|
17 | public static void
|
18 | String "hdfs://mycluster/home/wyp/wyp.txt" ;//文件路径 |
19 | Configuration new Configuration(); |
20 | conf.setBoolean( "dfs.support.append" , true ); |
21 |
22 | String "/home/wyp/append.txt" ; |
23 | FileSystem null ; |
24 | try { |
25 | fs |
26 | //要追加的文件流,inpath为文件 |
27 | InputStream new |
28 | BufferedInputStream( new FileInputStream(inpath)); |
29 | OutputStream new Path(hdfs_path)); |
30 | IOUtils.copyBytes(in, 4096 , true ); |
31 | } catch
|
32 | e.printStackTrace(); |
33 | } |
34 | } |
35 | } |
1 | [wyp @iteblog ~]$/home/q/hadoop- 2.2 . 0 /bin/hadoop |
2 | -cat /home/wyp/wyp.txt |
3 | 123456 |
4 | [wyp @iteblog ~]$ |
1 | [wyp @iteblog ~]$vimappend.txt |
2 | wyp |
1 | [wyp @iteblog ~]$/home/q/hadoop- 2.2 . 0 /bin/hadoop |
2 | hdfs.jar com.wyp.AppendContent |
1 | [wyp @iteblog ~]$/home/q/hadoop- 2.2 . 0 /bin/hadoop |
2 | -cat /home/wyp/wyp.txt |
3 | 123456 |
4 | wyp |
参考:http://www.aboutyun.com/thread-10305-1-1.html
相关文章推荐
- hadoop的hdfs文件操作实现上传文件到hdfs
- java连接hdfs ha和调用mapreduce jar示例
- java实现将ftp和http的文件直接传送到hdfs
- Java访问Hadoop分布式文件系统HDFS的配置说明
- 在Hadoop2.5.0下利用Java读写HDFS
- HDFS 文件操作
- Spark中将对象序列化存储到hdfs
- 读<王垠:一种新的操作系统设计>
- hadoop中RPC通信文件上传原理
- 测试Hadoop的hdfs的问题?
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
- hadoop特性讲解
- HDFS 恢复某时刻删除的文件
- #Note# Analyzing Twitter Data with Apache Hadoo...
- tachyon与hdfs,以及spark整合
- CentOS6.5安装Hadoop2.7.1
- HDFS Federation(HDFS 联盟)介绍
- HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
- HDFS文件系统和OpenStack swift对象存储有何不同
- Hadoop分布式文件系统和OpenStack对象存储有何不同