基于Hadoop云盘系统1:上传和下载效率优化

 一、读写机制

首先来看文件读取机制:尽管DataNode实现了文件存储空间的水平扩展和多副本机制,但是针对单个具体文件的读取,Hadoop默认的API接口并没有提供多DataNode的并行读取机制。基于Hadoop提供的API接口实现的云盘客户端也自然面临同样的问题。Hadoop的文件读取流程如下图所示:

  1. 使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求;
  2. Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;
  3. 客户端开发库会选取离客户端最接近的datanode来读取block;
  4. 读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找最佳的datanode;
  5. 当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
  6. 读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读取。

这里需要注意的关键点是:多个Datanode顺序读取。

其次再看文件的写入机制:

  1. 使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求;
  2. Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;
  3. 当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表, 列表的大小根据在Namenode中对replication的设置而定。
  4. 开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个 datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个 datanode,这种写数据的方式呈流水线的形式。
  5. 最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。
  6. 如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的 pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的 datanode,保持replicas设定的数量。

关键词:开发库把packet以流的方式写入第一个datanode,该datanode将其传递给pipeline中的下一个datanode,知道最后一个Datanode,这种写数据的方式呈流水线方式。

二、解决方案

1.下载效率优化

通过以上读写机制的分析,我们可以发现基于Hadoop实现的云盘客户段下载效率的优化可以从两个层级着手:

1.文件整体层面:采用并行访问多线程(多进程)份多文件并行读取。

2.Block块读取:改写Hadoop接口扩展,多Block并行读取。

2.上传效率优化

上传效率优化只能采用文件整体层面的并行处理,不支持分Block机制的多Block并行读取。

时间: 2013-03-07

基于Hadoop云盘系统1:上传和下载效率优化的相关文章

基于Hadoop的云盘系统客户端技术难点之一 上传和下载效率优化

作者:张子良  声明:版权所有,转载请注明出处 一.概述 基于任何平台实现的云盘系统,面临的首要的技术问题就是客户端上传和下载效率优化问题.基于Hadoop实现的云盘系统,受到Hadoop文件读写机制的影响,采用Hadoop提供的API进行HDFS文件系统访问,文件读取时默认是顺序.逐block读取:写入时是顺序写入. 二.读写机制 首先来看文件读取机制:尽管DataNode实现了文件存储空间的水平扩展和多副本机制,但是针对单个具体文件的读取,Hadoop默认的API接口并没有提供多DataNo

百度云Android版避免上传和下载文件消耗流量方法

给各位百度云软件的用户们来详细的解析分享一下百度云Android版避免上传和下载文件消耗流量的方法. 方法分享: 百度云Android版上传下载会消耗流量,因此请尽量选择在Wi-Fi环境下进行操作.您也可以在设置界面中选择"仅在Wi-Fi下上传下载"选项,当您的网络环境在非Wi-Fi环境下,不会对传输列表中的文件进行传输,请您放心.   好了,以上的信息就是小编给各位百度云的这一款软件的用户们带来的详细的百度云Android版避免上传和下载文件消耗流量的方法解析分享的全部内容了,各位看

乐视云盘为什么不能上传视频了

  乐视云盘不能上传视频怎么办?乐视云盘不能上传视频怎么回事?下面小编就给大家具体介绍下. 由于目前云盘存在大量的涉黄以及盗版信息,乐视云盘目前正在配合国家有关部门的关于利用云盘传播色情信息专项整治活动,针对乐视云盘进行了暂停使用,用户在暂停使用期无法上传视频哟.

乐视云盘上传视频失败怎么办,乐视云盘为什么不能上传视频了

乐视云盘为什么上传视频失败 由于目前云盘存在大量的涉黄以及盗版信息,乐视云盘目前正在配合国家有关部门的关于利用云盘传播色情信息专项整治活动,针对乐视云盘进行了暂停使用,用户在暂停使用期无法上传视频. 当然还在网络原因或你的帐号被封了我们可以从这几个方面来分析解决办法,上面介绍的只是一种了哦.

百度云管家如何避免上传和下载文件消耗流量?

  上传下载会消耗流量,因此请尽量选择在Wi-Fi环境下进行操作.您也可以在设置界面中选择"仅在Wi-Fi下上传下载"选项,当您的网络环境在非Wi-Fi环境下,不会对传输列表中的文件进行传输,请您放心.

百度云管家WP版上传和下载文件是否会消耗流量?

  上传下载会消耗流量,请尽量选择在Wi-Fi环境下进行操作.您也可以选择"仅在Wi-Fi下上传下载"选项,当您的网络环境在非Wi-Fi环境下,不会对传输列表中的文件进行传输,请您放心.

基于Hadoop开发网络云盘系统架构设计方案第一稿

引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己的网络云盘系统,方案为初步设计方案,不断完善中. 一.总体架构 二.方案说明 2.1 系统切分 从用户角度,整个系统划分为ECDisk客户端.ECDisk运营管理平台.HDFS分布式文件存储集群和账户数据应用平台四部分. 2.2 功能需求 文件管理:浏览.文件上传.文件下载.文件删除 用户管理:用户注册.用户登录.用户注销.账户充值.账户查询 三.技

基于Hadoop开发网络云盘系统客户端界面设计初稿

前言: 本文是<基于Hadoop开发网络云盘系统架构设计方案>的第二篇,针对界面原型原本考虑有两个方案:1.类windows模式,文件夹.文件方式,操作习惯完全按照Windows方式进行,提供右键菜单管理命令.2.浏览列表式,提供常规界面按钮式命令.本文采用的方式是文件清单列表式,至于第一种方式,另列专题进行说明. 一.界面原型 二.设计说明 连接管理:建立连接.断开连接.设置连接参数 文件操作:浏览文件.上传文件.下载文件.删除文件.导入文件(批量).刷新列表 用户管理:查看用户信息.修改用

基于Hadoop的云盘系统客户端技术选型说明

伴随云计算技术的发展,云盘系统不断涌现,百度.360.金山等都推出了各自的云盘产品,而云盘存储的模式也越来越被用户所接受,也有越来越多的公司跃跃欲试,想在云存储领域大展拳脚,有一番作为.但是开源Hadoop平台实现语言Java和操作系统Linux的限制,Windows用户桌面版云盘客户端的开发成为了一道不可逾越的屏障. 传统桌面软件开发最适合的语言是C/C++体系(不排斥非主流VB.Delphi.C#,有兴趣的可自行研究),云盘系统的客户端也是针对最广大的Windows桌面用户设计,最基本的要求