一、上传数据

二、下载数据

三、读写时的节点位置选择

1.网络节点距离(机架感知)

下图中:
client 到 DN1 的距离为 4
client 到 NN 的距离为 3
DN1 到 DN2 的距离为 2

2.Block 的副本放置策略

NameNode 通过 Hadoop Rack Awareness 确定每个 DataNode 所属的机架 ID

简单但非最优的策略

将副本放在单独的机架上

这可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用来自多个机架的带宽。
此策略在群集中均匀分布副本,平衡组件故障的负载。
但是此策略会增加写入消耗,因为写入时会将块传输到多个机架。

常见情况策略(HDFS 采取的策略)

当复制因子为 3 时,HDFS 的放置策略是:
若客户端位于 datanode 上,则将一个副本放在本地计算机上,否则放在随机 datanode 上
在另一个(远程)机架上的节点上放置另一个副本,最后一个在同一个远程机架中的另一个节点上。 机架故障的可能性远小于节点故障的可能性。
此策略可以减少机架间写入流量,从而提高写入性能,而不会影响数据可靠性和可用性(读取性能)。
这样减少了读取数据时使用的聚合网络带宽,因为块只放在两个唯一的机架,而不是三个。

如果复制因子大于 3,则随机确定第 4 个及后续副本的放置,同时保持每个机架的副本数量低于上限(基本上是(副本 - 1)/机架+ 2)。

由于 NameNode 不允许 DataNode 具有同一块的多个副本,因此创建的最大副本数是此时DataNode的总数。

原文(Replica Placement: The First Baby Steps 章节): http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

3.下载时副本的选择

为了最大限度地减少全局带宽消耗和读取延迟,HDFS 会选择最接客户端的节点中的副本来响应读取请求。

如果客户端与 DataNode 节点在同一机架上,且存在所需的副本,则该副本会首读用来响应取请求。

如果 HDFS 群集跨越多个数据中心,则驻留在本地数据中心的副本优先于任何远程副本。

原文(Replica Selection 章节): http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

HDFS 读写数据流程的更多相关文章

  1. 大数据:Hadoop(HDFS 读写数据流程及优缺点)

    一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode ...

  2. HDFS读写数据流程

    HDFS的组成 1.NameNode:存储文件的元数据,如文件名,文件目录结构,文件属性(创建时间,文件权限,文件大小) 以及每个文件的块列表和块所在的DataNode等.类似于一本书的目录功能. 2 ...

  3. HDFS读写数据块--${dfs.data.dir}选择策略

    最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...

  4. Hadoop(8)-HDFS的读写数据流程以及机架感知

    1. HDFS的写数据流程 1.客户端通过fs模块向NameNode申请文件上传,NameNode检查请求是否合法,如用户权限,目标文件是否已存在,父目录是否存在等等 2.NameNode返回是否可以 ...

  5. Hadoop -- HDFS 读写数据

    一.HDFS读写文件过程 1.读取文件过程 1)       初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件 2)       FileSyst ...

  6. HDFS读写数据过程

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...

  7. Hdfs读写数据出错

    1.Hdfs读数据出错:若在读数据的过程中,客户端和DataNode的通信出现错误,则会尝试连接下一个 包含次文件块的DataNode.同时记录失败的DataNode,此后不再被连接. 2.Hdfs在 ...

  8. HDFS读写文件流程

    读取: 写入:https://www.imooc.com/article/70527

  9. HDFS写数据和读数据流程

    HDFS数据存储 HDFS client上传数据到HDFS时,首先,在本地缓存数据,当数据达到一个block大小时.请求NameNode分配一个block. NameNode会把block所在的Dat ...

随机推荐

  1. oracle总结--增删改查

    oracle的执行计划SQL> EXPLAIN PLAN FOR SELECT * FROM emp;已解释.SQL> SELECT plan_table_output FROM TABL ...

  2. 51Nod 1381 硬币游戏

    参考自:https://www.cnblogs.com/ECJTUACM-873284962/p/6445369.html 1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值 ...

  3. CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板

    经过研究可以发现,每一位的贡献是C(n-2,k-1)+C(n-3,k-1)...C(k-1,k-1) 同时还要注意加号全部在左边的情况. 这里还用了O(n)预处理O(1)组合数的模板.//妙啊..妙. ...

  4. 一个模拟——抢票部分功能的 简单版(主要实例化一下 Lock 的使用)

    """ 抢票! 多个用户在同时读写同一个数据 """ from multiprocessing import Process,Lock im ...

  5. 来一波全套向量运算(C++)

    //头文件要求 #include <cmath> struct P{long long x, y;}p[N]; //加法 P operator +(P x, P y){return (P) ...

  6. opencontrail-vrouter命令

    vif命令 vrouter需要vrouter接口(vif)来转发流量.使用vif命令查看vrouter已知的接口. 注意: 仅在OS(Linux)中使用接口不足以进行转发.相关接口必须添加到vrout ...

  7. 使用item pipeline处理保存数据

    一个Item Pipeline 不需要继承特定基类,只需要实现某些特定方法,面向接口. class MyPipeline(object): def __init__(self): "&quo ...

  8. VMware配置centos虚拟机静态ip

    1. 安装centos,这个自己安装就好了 2. 配置配置虚拟机静态ip桥接器 配置ip地址 2. 配置网络共享中心 这里面的默认网关填写之前我们配置的网络网关ip默认为192.168.6.2 3. ...

  9. 编写高质量代码:改善Java程序的151个建议 --[98~105]

    建议的采用顺序是List中泛型顺序依次为T.?.Object (1).List是确定的某一个类型 List表示的是List集合中的元素都为T类型,具体类型在运行期决定:List<?>表示的 ...

  10. js jquery select 操作 获取值,选中选项,增加,修改,删除

    select示例: <select id="sel"> <option value="1">one</option> < ...