基于Hadoop的云盘系统客户端技术难点之一 上传和下载效率优化
作者:张子良
声明:版权所有,转载请注明出处
一、概述
基于任何平台实现的云盘系统,面临的首要的技术问题就是客户端上传和下载效率优化问题。基于Hadoop实现的云盘系统,受到Hadoop文件读写机制的影响,采用Hadoop提供的API进行HDFS文件系统访问,文件读取时默认是顺序、逐block读取;写入时是顺序写入。
二、读写机制
首先来看文件读取机制:尽管DataNode实现了文件存储空间的水平扩展和多副本机制,但是针对单个具体文件的读取,Hadoop默认的API接口并没有提供多DataNode的并行读取机制。基于Hadoop提供的API接口实现的云盘客户端也自然面临同样的问题。Hadoop的文件读取流程如下图所示:
- 使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求;
- Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;
- 客户端开发库会选取离客户端最接近的datanode来读取block;
- 读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找最佳的datanode;
- 当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
- 读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读取。
这里需要注意的关键点是:多个Datanode顺序读取。
其次再看文件的写入机制:
- 使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求;
- Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;
- 当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表, 列表的大小根据在Namenode中对replication的设置而定。
- 开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个 datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个 datanode,这种写数据的方式呈流水线的形式。
- 最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。
- 如果传输过程中,有某个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并行读取。
作者:张子良
出处:http://www.cnblogs.com/hadoopdev
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
hadoop开发库webhdfs使用介绍
Hadoop1.0版本已经提供了对Web方式访问的全面支持,包括读写和文件管理,用户可以使用curl模拟Http消息进行测试,下面是WebHDFS提供的操作列表功能清单: HTTP GET• OPEN (see FileSystem.open)• GETFILESTATUS (see FileSystem.getFileStatus)• LISTSTATUS (see FileSystem.listStatus)• GETCONTENTSUMMARY (see FileSystem.getContentSummary)• GETFILECHECKSUM (see FileSystem.getFileChecksum)• GETHOMEDIRECTORY (see FileSystem.getHomeDirectory)• GETDELEGATIONTOKEN (see FileSystem.getDelegationToken)• HTTP PUT• CREATE (see FileSystem.create)• MKDIRS (see FileSystem.mkdirs)• RENA...
- 下一篇
基于Hadoop的云盘系统客户端技术难点之二 HDFS文件访问控制
作者:张子良 版权所有,转载请注明出处 一、概述 Hadoop开源技术框架在实际业务应用中,其早期的安全机制饱受诟病,具体到HDFS应用方面的问题,主要包括以下几个方面: 1.用户到服务器的认证问题 (1)Namenode上没有用户认证:用户只要知道NameNode服务地址和端口信息,就可以访问HDFS,并获取文件namespace信息。 (2)Datanode上没有认证机制:Datanode对读入输出并没有认证,导致如果客户端知道Blockid,就可以任意的访问Datanode上的Block数据。 2.服务器到服务器的认证信息 (1)Namenode对Datanode没有认证机制:非法用户可以伪装成Datanode,去接收Namenode的文件存储任务。 二、hadoop的Security 针对用户到服务器的认证问题,Hadoop在1.0.0版本以后增加了Security认证机制。该机制采用类Unix用户管理机制,文件的创建用户和超级用户拥有对文件的所有权限,包括读和写,其他用户拥有访问权,无写权限。具体来讲就是,连接到hadoop 集群的用户/组信息取决于客户端环境,即客户端主机中...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启