一种hdfs多线程并行下载方法

文档序号:6636961阅读:1665来源:国知局
一种hdfs多线程并行下载方法
【专利摘要】本发明提供一种HDFS多线程并行下载方法,属于大数据领域,存放到HDFS上文件,采用分块方式存放到整个集群中;当从HDFS上下载文件时,首先获取该文件所有block分块下载地址,针对每个block,启动一个线程来下载,这样可同时启动N个线程同时下载N个数据块,直到所有数据块下载完毕;为了保证下载的文件的一致性,将block[i]数据块写入到客户端文件的67108864*(i-1)~67108864*i(i>1)位置。最大限度的发挥集群的性能,提高下载效率。
【专利说明】一种HDFS多线程并行下载方法

【技术领域】
[0001]本发明涉及大数据下载技术,尤其涉及一种HDFS多线程并行下载方法,用于提高整个集群的吞吐量,进而提高下载效率。

【背景技术】
[0002]Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。HDFS 有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS 放宽了(relax) POSIX 的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
[0003]HDFS文件系统上的文件,是以固定大小(默认64M)的数据块顺序的存放到HDFS中,从HDFS中下载文件,会从HDFS文件系统中顺序下载所有的文件块,直到整个文件下载完毕,这样极大影响下载效率,不能充分发挥整个集群的效能。


【发明内容】

[0004]为解决HDFS文件快速下载问题,本文提出了一种HDFS多线程下载方法。
[0005]一种HDFS多线程并行下载方法,从HDFS下载文件到本地时,针对文件在HDFS上每个block分块,启动一个线程,并行下载,写到本地同一个文件中,一种HDFS多线程并行下载方法设计结构包括:(I)获取文件在HDFS上所有分块下载地址;(2)启动N (可设置)个线程,并行下载N个数据块,写到客户端同一个文件中;当一个线程执行完毕后,再启动一个线程下载下一个数据块,保证客户端同时运行的线程数为N。
[0006]获取要下载的文件所有数据块下载地址;
针对所有的数据块,同时启动N (客户端并行下载性能达到最高时的线程数,可设置)个线程并行下载,写到客户端同一个文件中;在册?3文件系统中,每一个block的大小默认为67108864 (64M)个字节,所以,将block[i]数据块写入到文件的位置67108864* (i_l)^67108864*1 (i>l)(通过java的随机访问对象可以将数据流写入到文件的任意指定位置),保证了文件的一致性;一个线程执行完毕,再启动下一个线程下载下一个block块,直到所有block下载完毕。
[0007]本发明的结构设计主要考虑是,存放到HDFS上文件,采用分块方式存放到整个集群中;当从HDFS上下载文件时,首先获取该文件所有block分块下载地址,针对每个block,启动一个线程来下载,这样可同时启动N个线程同时下载N个数据块,直到所有数据块下载完毕;为了保证下载的文件的一致性,将block[i]数据块写入到客户端文件的67108864* (i_l)?67108864*i (i>l)位置。
[0008]从HDFS下载文件到客户端时,同时启动多个线程并行下载文件的block块,写到客户端同一个文件中,从而提高整个集群的吞吐量,进而提高下载效率。
[0009]本发明的有益效果是:将一个HDFS文件多线程并行下载到客户端,最大限度的发挥集群的性能,提高下载效率。

【专利附图】

【附图说明】
[0010]图1为HDFS多线程并行下载框架图。

【具体实施方式】
[0011]下面对本发明的内容进行更加详细的阐述:
一种HDFS多线程并行下载方法,从HDFS下载文件到本地时,针对文件在HDFS上每个block分块,启动一个线程,并行下载,写到本地同一个文件中,一种HDFS多线程并行下载方法设计结构包括:(I)获取文件在HDFS上所有分块下载地址;(2)启动N (可设置)个线程,并行下载N个数据块,写到客户端同一个文件中;当一个线程执行完毕后,再启动一个线程下载下一个数据块,保证客户端同时运行的线程数为N ;获取要下载的文件所有数据块下载地址;
针对所有的数据块,同时启动N (客户端并行下载性能达到最高时的线程数,可设置)个线程并行下载,写到客户端同一个文件中;在册?3文件系统中,每一个block的大小默认为67108864 (64M)个字节,所以,将block[i]数据块写入到文件的位置67108864* (i_l)^67108864*1 (i>l)(通过java的随机访问对象可以将数据流写入到文件的任意指定位置),保证了文件的一致性;一个线程执行完毕,再启动下一个线程下载下一个block块,直到所有block下载完毕。
[0012]下面根据附图,通过实施例进行阐述:
如图1所示,整个流程为:
(1)客户端通过namenode节点获取要下载文件所有block分块下载地址;
(2)针对每一个block,启动一个线程来读取数据,同时启动N个线程同时下载N个数据块,直到所有数据块下载完毕;为了保证下载的文件的一致性,将block[i]数据块写入到客户端文件的67108864* (i_l)?67108864*i (i>l)位置。
【权利要求】
1.一种HDFS多线程并行下载方法,其特征在于,从HDFS下载文件到本地时,针对文件在HDFS上每个block分块,启动一个线程,并行下载,写到本地同一个文件中。
2.根据权利要求1所述的方法,其特征在于,该方法包括:(I)获取文件在HDFS上所有分块下载地址;(2)启动N个线程,并行下载N个数据块,写到客户端同一个文件中;当一个线程执行完毕后,再启动一个线程下载下一个数据块,保证客户端同时运行的线程数为N。
3.根据权利要求2所述的方法,其特征在于,获取要下载的文件所有数据块下载地址。
4.根据权利要求3所述的方法,其特征在于,针对所有的数据块,同时启动N个线程并行下载,写到客户端同一个文件中;在HDFS文件系统中,每一个block的大小默认为67108864个字节,所以,将block[i]数据块写入到文件的位置67108864* (i_l)^67108864*i (i>l);一个线程执行完毕,再启动下一个线程下载下一个block块,直到所有block下载完毕。
【文档编号】G06F17/30GK104462324SQ201410721324
【公开日】2015年3月25日 申请日期:2014年12月3日 优先权日:2014年12月3日
【发明者】房体盈, 辛国茂 申请人:浪潮电子信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1