hadoop详解(三) hdfs数据流

1.拓扑距离

这里简单讲下hadoop的网络拓扑距离的计算

在大数量的情景中,带宽是稀缺资 源,如何充分利用带宽,完美的计算代价开销以及限制因素都太多。hadoop给出了这样的解决方案:

计算两个节点间的间距,采用 最近距离的节点进行操作,如果你对数据结构比较熟悉的话,可以看出这里是距离测量算法的一个实例。

如果用数据结构表示的话,这里可以表示为tree,两个节点的距离计算就是寻找公共祖先的计算。

在现实情况下比较典型的情景如下,

tree结构的节点由数据中心data center,这里表示为d1 ,d2,机架rack,这里表示为r1,r2,r3,还有服务器节点node,这里表示为n1,n2,n3, n4

1.distance(d1/r1/n1,d1/r1/n1)=0 (相同节点)

2.distance(d1/r1/n1,d1/r1/n2)=2 (相 同机架不同节点)

3.distance(d1/r1/n1,d1/r2/n3)=4 (相同数据中心不同机架)

4.distance(d1/r1/n1,d2/r3/n4)=6 (不同数据中心)

2.副本存放

先来定义一下, namenode节点选择一个datanode节点去存储block副本得过程就叫做副本存放,这个过程的策略其实就是在可 靠性和读写带宽间得权衡。那么我们来看两个极端现象:

1.把所有的副本存放在同一个节点上,写带 宽是保证了,但是这个可靠性是完全假的,一旦这个节点挂掉,数据就全没了,而且跨机架的读带宽也很低。

2.所有副本打散在不同的节点上,可靠性提高了,但是带宽有成了问题。

即使在同一个数据中 心也有很多种副本存放方案,0.17.0版本中提供了一个相对较为均衡的方案,1.x之后副本存放方案已经是可 选的了。

我们来讲下hadoop默认的方案:

1.把第一副本放在和客户端同一个节点上,如果客户 端不在集群中,那么就会随即选一个节点存放。

2.第二个副本会在和第一个副本不同的机架上随机选 一个

3.第三个副本会在第二个副本相同的机架上随机选一个不同的节点

4.剩余的副本就完全随 机节点了。

时间: 2024-11-27 11:16:09

hadoop详解(三) hdfs数据流的相关文章

hadoop详解(六) HDFS数据完整性

数据完整性 IO操作过程中难免会出现数据丢失或脏数据,数据传输得量越大出错得几率越高.校验 错误最常用得办法就是传输前计算一个校验和,传输后计算一个校验和,两个校验和如果不相同就说明数据存 在错误,比较常用得错误校验码是CRC32. hdfs数据完整性 hdfs写入的时候计算出校验和, 然后每次读的时候再计算校验和.要注意的一点是,hdfs每固定长度就会计算一次校验和,这个值由 io.bytes.per.checksum指定,默认是512字节.因为CRC32是32位即4个字节,这样校验和占用的空

hadoop详解(一) hdfs介绍

hdfs设计原则 1.非常大的文件: 这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可 以存储PB级别的数据 2.流式数据访问: 基于一次写,多次读. 3.商用硬件:       hdfs的高可用是用软件来解决,因此不需要昂贵的硬件来保障高可用性,各个生产商 售卖的pc或者虚拟机即可. hdfs不适用的场景 1.低延迟的数据访问 hdfs的强项在于大量的数据传输 ,递延迟不适合他,10毫秒以下的访问可以无视hdfs,不过hbase可以弥补这个缺陷. 2.太多小文件      

Masonry自动布局详解三:remake约束

Masonry自动布局详解三:remake约束 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万大量代码的冗余,对维护和开发的效率都很低. 笔者在这里介绍纯代码自动布局的第三方库:Masonry.这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的. 支持原创,请阅读原文 效果图 本节详解Masonry的以动画的形式更新约束的

第七篇Bootstrap表单布局实例代码详解(三种表单布局)_javascript技巧

Bootstrap提供了三种表单布局:垂直表单,内联表单和水平表单.下面逐一给大家介绍,有兴趣的朋友一起学习吧. 创建垂直或基本表单: •·向父 <form> 元素添加 role="form". •·把标签和控件放在一个带有 class .form-group 的 <div> 中.这是获取最佳间距所必需的. •·向所有的文本元素 <input>.<textarea> 和 <select> 添加 class .form-cont

hadoop详解(二) java访问hdfs

所有源码在github上,https://github.com/lastsweetop/styhadoop 读数据使用hadoop url读取 比较简单的读取hdfs数据的方法就是通过java.net.URL打开一个流,不过在这之前先要预先调用它的 setURLStreamHandlerFactory方法设置为FsUrlStreamHandlerFactory(由此工厂取解析hdfs协议),这个方 法只能调用一次,所以要写在静态块中.然后调用IOUtils类的copyBytes将hdfs数据流拷

Netty4详解三:Netty架构设计

     读完这一章,我们基本上可以了解到Netty所有重要的组件,对Netty有一个全面的认识,这对下一步深入学习Netty是十分重要的,而学完这一章,我们其实已经可以用Netty解决一些常规的问题了. 一.先纵览一下Netty,看看Netty都有哪些组件?      为了更好的理解和进一步深入Netty,我们先总体认识一下Netty用到的组件及它们在整个Netty架构中是怎么协调工作的.Netty应用中必不可少的组件: Bootstrap or ServerBootstrap EventLo

hadoop详解(十三) 序列化框架

框架简介 MapReduce仅仅可以支持Writable做key,value吗?答案是否定的.事实上,一切类型都是支 持的,只需满足一个小小的条件:每个类型是以二进制流的形式传输.为此Hadoop提供了一个序列化框架来支 持,他们在org.apache.hadoop.io.serializer包中,Writable可以作为MapReduce支持的类型也是因为实现了 这个框架,类不多,我们从几个接口说起. Serializer 定义了一组接口,打开流,序列化,关闭流 public interfac

hadoop详解(十) 序列化与Writable接口

简介 序列化和反序列化就是结构化对象和字节流之间的转换,主要用在内部进程的通讯和持久化存储方 面. 通讯格式需求 hadoop在节点间的内部通讯使用的是RPC,RPC协议把消息翻译成二进制字节流发 送到远程节点,远程节点再通过反序列化把二进制流转成原始的信息.RPC的序列化需要实现以下几点: 1. 压缩,可以起到压缩的效果,占用的宽带资源要小. 2.快速,内部进程为分布式系统构建了高速链路,因 此在序列化和反序列化间必须是快速的,不能让传输速度成为瓶颈. 3.可扩展的,新的服务端为新的客户 端增

hadoop详解(五) Archives

简介 我们在hadoop深入研究:(一)--hdfs介绍里已讲过,hdfs并不擅长存储小文件,因为每个文件最 少一个block,每个block的元数据都会在namenode节点占用内存,如果存在这样大量的小文件,它们会吃掉 namenode节点的大量内存. hadoop Archives可以有效的处理以上问题,他可以把多个文件归档成为一个文 件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入. 用法 hadoop Archives可以使用archive工具创