HDFS文件读取和写入

来源:互联网 发布:ubuntu 16.04 samba 编辑:程序博客网 时间:2024/05/17 01:58


读取文件:
一:读取方式一


写入哪个DataNode是不确定的,主要寻找读取速度较快的DataNode;
怎么找到这种DataNode,从以下几个方面:是否有本机位置,本机架位置,本机房位置;
依次重试读取文件,直到读取文件成功;
二:读取方式二:backUpRead

每次读取时,client会并行试着读取两个或三个DataNode,接受读取成功信息后,会通知其他魏都区的DataNode结束读取。

写入数据:
一:链式写入:


连式出现错误:假如DataNode2出现网络问题。
解决方法:(1)直接跳过DataNode2的写入,也就是写入两台机器,比默认数量少一,带来了数据安全的问题;
(2)seal and New方式:DataNode1向2写入时,发现故障,会通过client向NameNode回执错误信息;然后从新分配写入的DataNode,假设选中了DataNode4,然后向1,3,4练市写入数据。
二:主从模式:


客户端或者系统出现故障时,可能会引起数据的丢失。这就需要一直模式保障数据的完整性。
方法一例如:
Path p = new Path("p");
OutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.flush();
out.sync();
out.flush():
当写入的数据超过一个块后,对新的数据块就可以进行读操作。但正在写入的数据块对外不可见,也就是不能进行读操作。
out.sync():对于已经写入的数据可读。无论数据块有没有被写满。
但这两个方法会对数据的吞吐量有所影响,所以用时要在鲁棒性和吞吐量做出权衡。


具体的读写步骤详细说明可以参考hadoop权威指南。


原创粉丝点击