HDFS架构基础

HDFS采用master/slave架构,即一个namenode(管理者)多个datanode(工作者)。

HDFS文件读取流程

1.客户端调用Distribute File System获取需要读取的数据文件。

2.Distribute File System会远程调用NamdeNode,获取到要读取的数据文件对应的Block存放在那些DataNode节点上。

3.客户端先到位置最近的DataNode节点上调用FSData Input Stream的read方法,通过反复调用将数据从DataNode传到客户端。

4.读取完所有的数据后,会关闭于DataNode连接,继续寻找下一个最近存放数据的DataNode,客户但只需要读取连续的流(疑问貌似Distribute File System不会关闭直接读取下一个节点的数据?)。

5.一旦客户端完成读取,Distribute File System会调用close方法关闭流。

HDFS文件写流程

1.客户端调用Distribute File System的creat方法来创建一个文件。

2.Distribute File System会发起远程请求,在文件系统的命名空间中创建一个新文件,此时会进行检查,如判断是否存在,如不存在就会为新文件创建一条元数据记录。

3.客户都按调用FSData outputStream的write方法将一个数据写到一个内部队列里,假设副本为三,会将数据队列里的数据写到3个副本对应存储的DataNode上。

4.FSData outputStream 维护着一个内部队列,当接收到所有DataNode确认写完的信息,数据才会从队列中删除。

5.当客户端完成数据的写入时,会对数据流调用close方法,关闭资源。

HDFS副本机制

1.副本拜访策略

第一个副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一个状态良好的节点。

第二个副本:放置在与第一个副本不同机架上的节点。

第三个副本:放置在与第二个副本相同机架的不同节点,如果还有更多副本随机放在节点中。

2.副本系数

上传文件到HDFS时,当时的副本系数是多少就会有多少副本,无论以后怎么修改副本系数也不会改变,副本数量是根据上传时设置的副本系数而定的。

replicatiion默认是有客户端决定的,如果客户端未配置才会去配置文件中读取,如果在hdfs-site.xml中设置dsf.replication=1,并不意味着备份数就是1,因为可能没把hdfs-site.xml加入到classPath里,那么程序读取就是hdfs-default.xml的默认配置信息。

HDFS负载均衡

HDFS的架构支持数据均衡策略,如果某个DataNode的空闲低于特定的临界点,按照策略会自动将数据从这这个DataNode移出到其他空闲空间的DataNode,当某个文件请求突然增加,也可能启动一个计划来创建新的副本,同时重新平衡集群中的其他数据,当HDFS的负载不均衡时,需要对HDFS数据进行负载均衡调整,即对各个节点机器上数据的存储副本进行调整。

在Hadoop中,包含一个start-Balancer.sh脚本,运行脚本集本可启动负载均衡

Balancer脚本参数

1.-threshold 默认值10,取值范围0-100,判断集群是否平衡的阈值,理论上该值越小越平衡。

2.dsf-balancer-bandwith,默认设置1048,运行时运行占用的带宽,在hdfs-site.xml中设置。

HDFS机架感知

通产大型的hadoop集群是以机架形式来组织的,同一个机架上的不同节点比不同机架上的节点更为理想,NameNode设法将数据块保存在不同的机架上以提高容错性,HDFS不能自动判断集群中的节点的网络情况,但Hadoop允许管理员通过配置dfs.network.script参数来确定节点所处机架,配置文件提供了IP到rackid的翻译。

Hadoop序列化

Hadoop序列化并不采用Java的序列化,而是采用自己的序列化机制,在Hadoop的序列化中用户可以复用对象,减少了Java分配回收,提高了效率,Hadoop通过write接口实现序列化机制,但没有提供比较的功能,所以和Java的Comparable合并,提供一个WriteComparable接口。

Sequence File

Sequence File时Hadoop提供的一种对二进制文件的支持。二进制文件直接将Key,Value对序列化到文件中,Hadoop适合存储大文件,所以可以通过Sequence File将小文件合并。

特点:支持压缩,可定制基于record和block的压缩。

           本地化任务支持,因为文件可以被切分,因此运行MapReduce任务时数据本地化情况应该是非常好。

           难度低,Hadoop提供API所以业务逻辑修改会比较简单。

           

MapFile

MapFile是排过序的Sequence File,有data,index组成,index作为文件数据的索引,主要记录每个record的key值,以及在该record中的偏移位置,在MapFile被访问的时候,索引文件会先被加载到内存,通过index快速找到文件位置,因此相对Sequence File的查找效率更高的,缺点是会消耗一部分内存来存储Index信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值