hdfs: 数据流(二)
大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。
一个文件一旦创建、写入、关闭之后就不需要修改了。这个假定简单化了数据一致的问题和并使高吞吐量的数据访问变得可能。
1. 读文件

从上图可以看出,客户端读取数据时,
首先从namenode获取如下信息(这些元数据信息是在内存中,所以查询速度很快,这个过程对客户端是透明的):
a. 该文件有哪些数据块
b.这些数据块都放在哪里或者说是取哪个节点上的什么数据块
然后,客户端直接从datanode中以文件流的方式读取数据
最后,关闭这个文件流
一个问题:因为每个数据块都有三个备份,那么取哪个比较好?
选取读取代价最小的节点,首先会在同一个节点中选取(如果客户端也是datanode时),其次在同一个机架上的datanode中选取,最后再同一个机房中选取
hadoop会根据网络拓扑给每一个冗余数据块打分,原则就是考虑是否在同一个节点上,是否在相同的机架上,是否在同一个机房(目前hadoop不能跨机房部署)

2. 写文件

首先,客户端通知namenode:我要写文件了,确认客户端权限和没有相同的文件后,namenode创建一个新的文件记录
然后,将文件分成一个一个的数据块(默认大小是64M),通过文件流的方式往datanode中写数据,写数据时注意是会写冗余数据,冗余数据块的个数默认是3个
最后,只有冗余数据块全部写完,datanode再向客户端发出确认,然后客户端向namenode发出结束消息,并将文件的块信息存储在namenode中
一个问题:如何选datanode用来存储冗余数据块
这是一个权衡的问题:备份的可靠性,网络IO的代价,其实如果都存在不同的机房,这样的可靠性最高,但是网络IO的代价就会很高,因为跨机房的网络IO代价很大,如果都存储在一个节点上,则不需要网络IO,但是数据可靠性就会打折扣
所以hadoop默认的布局策略是:第一个随机在机房中选择一个负载较小的节点,然后在不同的机架上(例如选择了机架A)选择一个节点,再在相同的机架上随机选择一个节点(还是在机架A上)

hdfs: 数据流(二)的更多相关文章
- Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理
一. 概述 上一篇我们介绍了如何将数据从mysql抛到kafka,这次我们就专注于利用storm将数据写入到hdfs的过程,由于storm写入hdfs的可定制东西有些多,我们先不从kafka读取,而先 ...
- HDFS数据流-剖析文件读取及写入
HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...
- 浅谈HDFS(二)之NameNode与SecondaryNameNode
NN与2NN工作机制 思考:NameNode中的元数据是存储在哪里的? 假设存储在NameNode节点的硬盘中,因为经常需要随机访问和响应客户请求,必然效率太低,所以是存储在内存中的 但是,如果存储在 ...
- Hadoop之HDFS文件系统(二)
HDFS客户端 通过IO流操作HDFS HDFS文件上传 @Test public void putFileToHDFS() throws Exception{ // 1 创建配置信息对象 Confi ...
- Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs6; import java.io.IOException;import jav ...
- 脑波设备mindwave数据流二次开发示例
数据流开发神念科技提供了两个文件ThinkGearStreamParse.h和ThinkGearStreamParse.cpp两个文件,主要接口为: 宏定义: /* Data CODE definit ...
- Hadoop HDFS (3) JAVA訪问HDFS之二 文件分布式读写策略
先把上节未完毕的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法能够列出一 ...
- HDFS(二)
HDFS的I/O主要是三个方面: 一致性 HDFS在一致性上面主要是通过校验和(checksum)来实现:从client发起写入的时候会校验一下文件内容,但是发生在pipeline的最后一个节点的时候 ...
- Hadoop之HDFS(二)HDFS基本原理
HDFS 基本 原理 1,为什么选择 HDFS 存储数据 之所以选择 HDFS 存储数据,因为 HDFS 具有以下优点: 1.高容错性 数据自动保存多个副本.它通过增加副本的形式,提高容错性. 某一 ...
随机推荐
- bzoj 2229 [Zjoi2011]最小割(分治+最小割)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2229 [题意] 回答若干个关于割不超过x的点对数目的询问. [思路] [最小割最多有n ...
- Classes and Objects :类和对象(2)
类内部可以有另一个类,也就是内部类,如果带static则为静态内部类静态内部类当然不能直接访问实例变量内部类修饰符可以有四种,而外部类只有两种 内部类的意义:这个内部类只适用于这个外部类因为外部类的某 ...
- nodejs + socket.io + redis 新手上路
最近要更新网站架构了,决定转入 nodejs + socket.io + redis 方式. 战斗刚开始: 网上的文章太松散,我根据各个网友的分享进行整理 ,让大家可以方便上手. 进入node.js之 ...
- Oracle 表数据去重
Oracle数据库中重复数据怎么去除?使用数据表的时候经常会出现重复的数据,那么要怎么删除呢?下面我们就来说一说去除Oracle数据库重复数据的问题.今天我们要说的有两种方法. 一.根据rowid来去 ...
- javascript中sleep等待实现
function sleep(milliSeconds) { var startTime = new Date().getTime(); while (new Date().getTime() < ...
- MVC神韵---你想在哪解脱!(十八)
数据的修改视图 首先打开Movie控制器,添加一个返回数据修改视图的Edit()方法与一个对该视图中的表单提交进行处理的Edit()方法,代码如下所示: // GET: /Movies/Edit pu ...
- tomcat中的webapps
使用IDE方便开发,使用文本编辑器建立Web工程,有助于理解工程的各个文件组成及底层原理.需搭建好服务器(常用tomcat),当然需要Java运行环境了. 一.建立JSP文件,如helloworld. ...
- javascript --执行上下文,作用域
执行上下文 顾名思意就知道他是动态的,只在代码运行的时候产生 作用域 顾名思意就知道它是一个"领域",并且这个"领域"在一开始就规划好, 不会在改, var d ...
- wiki1169-传纸条(dp)
http://wikioi.com/problem/1169/ 四维数组和三维数组: #include<iostream> #include<cstdio> #include& ...
- IIS下的身份验证方式管理
设置.查看身份验证方式 #导航到某站点下: cd IIS:\Sites\DemoSite\DemoApp #启用站点test01下的Windows身份验证 Set-WebConfigurationPr ...