CN105049524B - 一种基于hdfs的大规模数据集装载的方法 - Google Patents

一种基于hdfs的大规模数据集装载的方法 Download PDF

Info

Publication number
CN105049524B
CN105049524B CN201510507090.8A CN201510507090A CN105049524B CN 105049524 B CN105049524 B CN 105049524B CN 201510507090 A CN201510507090 A CN 201510507090A CN 105049524 B CN105049524 B CN 105049524B
Authority
CN
China
Prior art keywords
data file
small data
file
merging
hdfs
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510507090.8A
Other languages
English (en)
Other versions
CN105049524A (zh
Inventor
陈晓莉
祝天鹏
常亮
张廷乐
柴永恒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Ponshine Information Technology Co Ltd
Original Assignee
Zhejiang Ponshine Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Ponshine Information Technology Co Ltd filed Critical Zhejiang Ponshine Information Technology Co Ltd
Priority to CN201510507090.8A priority Critical patent/CN105049524B/zh
Publication of CN105049524A publication Critical patent/CN105049524A/zh
Application granted granted Critical
Publication of CN105049524B publication Critical patent/CN105049524B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及互联网技术领域,一种基于HDFS的大规模数据集装载的方法,包括以下步骤:(1)文件分散存储:采用传输工具将数据文件分散存储在本地主机的多个磁盘上,产生小数据文件;(2)小数据文件的合并:判断上述多个磁盘上的小数据文件是否读取,将为读取的小数据文件,判断单个线程中所有小数据文件大小是否达到预定值,如果达到进行小数据文件合并,产生合并数据文件;(3)合并数据文件的转载:采用多生产者和多消费者模式将合并数据文件装载到HDFS的集群上。本发明采用多生产者多消费者的设计模式,解决了将大规模小数据集装载到HDFS时时间消耗巨大的问题。

Description

一种基于HDFS的大规模数据集装载的方法
技术领域
本发明涉及互联网技术领域,一种基于HDFS的大规模数据集装载的方法。
背景技术
随着计算机技术、互联网技术的迅猛发展,Blog、RSS、视频共享、图片共享、社交应用的不断加入,使得海量数据的存储、管理和处理已经成为当今互联网公司面临的严峻问题。传统的数据存储与管理方式已经很难足海量数据存储在在容量、性能、存储效率和安全性等方面的要求。目前比较成熟的海量数据存储方法是在存储集群上部署分布式文件系统对数据进行分布式存储和管理。国内外常见的分布式文件系统有GFS、HDFS、Lustre、Ceph、GridFS、MogileFS、TFS、FastDFS等,各自适用于不同的领域。其中HDFS是基于Hadoop的分布式文件系统,具有高容错性的特点,设计用来部署在低廉的硬件上,提供高吞吐量访问应用程序的数据,适合有超大数据集的应用程序。
HDFS自带的copyFromLocalFile方法可以将客户端的文件装载到HDFS上,该方法循环遍历用户指定的文件(若指定的是文件夹,则递归遍历该文件夹下的所有文件),将读取的每一个文件以文件流的形式写入HDFS集群。
然而,HDFS自带的copyFromLocalFile方法,使用的是单线程技术,每次只能读取一个文件,读取单个文件时每次是将文件的流缓存一部分再传送到HDFS上,使用的是单生产者单消费者模式,读取文件的时候,网络是空闲的;网络传输的时候,磁盘的读写是空闲的,这种方法更适合小文件的传输。但是,HDFS在进行小文件处理时,名称节点需要耗费大量的内存来保存小文件的元数据信息,而且小文件的上传和下载的效率并不理想,对于大规模的小文件的传输来说并不合适,会使得传输时间大幅度增加。
发明内容
本发明采用多生产者多消费者的设计模式,解决了将大规模小数据集装载到HDFS时时间消耗巨大的问题。
本发明所采用的技术方案为:
一种基于HDFS的大规模数据集装载的方法,包括以下步骤:
(1)文件分散存储
采用传输工具将数据文件分散存储在本地主机的多个磁盘上,产生小数据文件;
(2)小数据文件的合并
判断上述多个磁盘上的小数据文件是否读取,将为读取的小数据文件,判断单个线程中所有小数据文件大小是否达到预定值,如果达到进行小数据文件合并,产生合并数据文件;
(3)合并数据文件的转载
采用多生产者和多消费者模式将合并数据文件装载到HDFS的集群上。
所述的(1)文件分散存储:
为使用FTP、Sqoop、KafKa、Flume等工具将数据文件分散地储存在本地主机的多个磁盘上,产生小数据文件。
所述的(2)小数据文件的合并:
为在文件合并的起始点上,paths对象储存了所有需要装载到HDFS上的小数据文件地址,通过调用processFileItems方法,根据每个小数据文件的md5值判断该小数据文件是否曾经读取过,将没有读取过的小数据文件放到targets对象中储存。targets对象储存了单个线程单次所要处理的小数据文件集合,可以设置单个线程单次所有处理的小数据文件集合中所有小数据文件大小的阈值filemerge,当单个线程拿到了总大小超过设定的阀值filemerge时,这个时候就会进行小数据文件合并操作,产生合并数据文件。
所述的(3)合并数据文件的转载:
为采用多生产者和多消费者模式将合并数据文件装载到HDFS的集群上,生成者线程负责将读取到的合并数据文件写入到内存中;在生产者线程Load方法中,定义一个内存流对象的实例pureOut,将pureOut封装成压缩流,经过IOUtils的copyBytes方法就可以将读取到的合并数据文件以流的形式压缩存储到内存流pureOut中,最后使用ConcurrentLinkedQueue实例化的对象outputStreamQueue来储存写入到内存中的pureOut;消费者线程负责将内存中的流一一通过网络运输到HDFS的集群上;当内存队列中有数据的时候,作为消费者线程池中的线程就开始去读取内存队列中的流,将其装载到HDFS上。
读取文件流的多生产者线程可以不停的往内存中写数据,读取内存流的多消费者线程可以不停的往HDFS集群传输数据,磁盘的读写和网络的传输可以保证高使用率,极大的提高了整个装载效率。
附图说明
图1:单台机器分散存储数据文件示意图;
图2:小文件合并流程示意图;
图3:大文件装载流程示意图;
图4:装载前的本地部分数据截图;
图5:装载后的HDFS集群中部分数据截图;
具体实施方式
以下结合说明书附图对本发明做出具体阐述:
(1)文件分散存储:
为使用FTP、Sqoop、KafKa、Flume等工具将数据文件分散地储存在本地主机的多个磁盘上,产生小数据文件。
(2)小数据文件的合并:
为在文件合并的起始点上,paths对象储存了所有需要装载到HDFS上的小数据文件地址,通过调用processFileItems方法,根据每个小数据文件的md5值判断该小数据文件是否曾经读取过,将没有读取过的小数据文件放到targets对象中储存。targets对象储存了单个线程单次所要处理的小数据文件集合,可以设置单个线程单次所有处理的小数据文件集合中所有小数据文件大小的阈值filemerge,当单个线程拿到了总大小超过设定的阀值filemerge时,这个时候就会进行小数据文件合并操作,产生合并数据文件。
(3)合并数据文件的转载:
为采用多生产者和多消费者模式将合并数据文件装载到HDFS的集群上,生成者线程负责将读取到的合并数据文件写入到内存中;在生产者线程Load方法中,定义一个内存流对象的实例pureOut,将pureOut封装成压缩流,经过IOUtils的copyBytes方法就可以将读取到的合并数据文件以流的形式压缩存储到内存流pureOut中,最后使用ConcurrentLinkedQueue实例化的对象outputStreamQueue来储存写入到内存中的pureOut;消费者线程负责将内存中的流一一通过网络运输到HDFS的集群上;当内存队列中有数据的时候,作为消费者线程池中的线程就开始去读取内存队列中的流,将其装载到HDFS上。
更具体的:
如图1所示,单台机器通过FTP、Sqoop、KafKa、Flume等工具将数据文件分散地存储在其所有挂载的多个磁盘上,产生小数据文件。这样,在往HDFS装载数据时,生产者线程池中的线程读取合并数据文件,就可以在所有磁盘上同时读取合并数据文件,避免了多线程在单个磁盘上读取合并数据文件时因磁盘的读取能力受限而阻塞。
如图2所示,小数据文件的合并流程。由于HDFS存储大量小数据文件的时候,HDFS的主结点会在内存中储存全部的小数据文件信息,会消耗大量的内存,因此HDFS不适合储存大量小数据文件。因此,我们在文件装载前,首先会进行小文件的合并,产生合并数据文件。具体的小文件合并流程为:
1)在合并小数据文件的起始点上,通过paths对象储存所有需要装载到HDFS上的本地小数据文件地址;
2)然后调用processFileItems方法,根据文件集中的每个小数据文件的md5值判断该小数据文件是否曾经读取过;
3)将没有读取过的小数据文件放到targets对象中储存。targets对象储存了单个线程单次所要处理的小数据文件集合,可以设置单个线程单次所有处理的小数据文件集合中所有小数据文件大小的阈值filemerge,filemerge的默认值为128MB;
4)当单个线程拿到了总大小超过设定的阀值filemerge时,这个时候就会进行小数据文件合并操作,把小文数据件集合中的文件合并为一个较大的合并数据文件。
如图3所示,合并数据文件的装载流程。在合并数据文件和网络传输上,采用多生产多消费者模式。生成者线程负责将读取到的合并数据文件写入到内存中,消费者线程负责将内存中的流一一通过网络运输到HDFS的集群上。
具体的实现流程如下:
a)首先需要在生产者线程中的Load方法中定义一个可以使用的空闲内存流对象(ByteArrayOutputStream)的实例pureOut;
b)然后将pureOut封装成压缩流(CompressionOutputStream)对象;
c)通过使用IOUtils的copyBytes方法,将读取到的合并好的合并数据文件以流的形式压缩存储到内存流pureOut中;
d)再使用ConcurrentLinkedQueue实例化的对象outputStreamQueue来储存写入到内存中的pureOut;
e)当内存队列中有数据的时候,作为消费者线程池中的线程就开始去读取内存队列中的流,将其装载到HDFS上。
这样,读取文件流的多生产者线程可以不停的往内存中写数据,读取内存流的多消费者线程可以不停的往HDFS集群传输数据,磁盘的读写和网络的传输可以保证高使用率,极大的提高了整个装载效率。
如图4所示,装载前的本地部分数据截图。通过Linux操作系统自带的操作命令ls-lt|more可以查看小文件的列表信息,从中可以看到装载前的小数据文件数量为84292964个。
如图5所示,装载后的HDFS集群中部分数据截图。通过Hadoop的操作命令hadoopfs-lshdfs://master:9000/629g_compress_1|more可以查看压缩后的大文件列表信息,从中可以看到装载到629g_compress_1目录下压缩后的大文件数量为796个。

Claims (3)

1.一种基于HDFS的大规模数据集装载的方法,其特征在于,包括以下步骤:
(1)文件分散存储
采用传输工具将数据文件分散存储在本地主机的多个磁盘上,产生小数据文件;
(2)小数据文件的合并
判断上述多个磁盘上的小数据文件是否读取,若为读取了的小数据文件,判断单个线程中所有小数据文件大小是否达到预定值,如果达到则进行小数据文件合并,产生合并数据文件;
(3)合并数据文件的转载
采用多生产者和多消费者模式将合并数据文件装载到HDFS的集群上;
所述的(3)合并数据文件的装载:
为采用多生产者和多消费者模式将合并数据文件装载到HDFS的集群上,生产者线程负责将读取到的合并数据文件写入到内存中;在生产者线程Load方法中,定义一个内存流对象的实例pureOut,将pureOut封装成压缩流,经过IOUtils的copyBytes方法就可以将读取到的合并数据文件以流的形式压缩存储到内存流pureOut中,最后使用ConcurrentLinkedQueue实例化的对象outputStreamQueue来储存写入到内存中的pureOut;消费者线程负责将内存中的流一一通过网络运输到HDFS的集群上;当内存队列中有数据的时候,作为消费者线程池中的线程就开始去读取内存队列中的流,将其装载到HDFS上。
2.如权利要求1所述的一种基于HDFS的大规模数据集装载的方法,其特征在于,所述的(1)文件分散存储:
为使用FTP、Sqoop、KafKa、Flume工具将数据文件分散地储存在本地主机的多个磁盘上,产生小数据文件。
3.如权利要求1所述的一种基于HDFS的大规模数据集装载的方法,其特征在于,所述的(2)小数据文件的合并:
为在文件合并的起始点上,paths对象储存了所有需要装载到HDFS上的小数据文件地址,通过调用processFileItems方法,根据每个小数据文件的md5值判断该小数据文件是否曾经读取过,将没有读取过的小数据文件放到targets对象中储存;targets对象储存了单个线程单次所要处理的小数据文件集合,可以设置单个线程单次所有处理的小数据文件集合中所有小数据文件大小的阈值filemerge,当单个线程达到了总大小超过设定的阈值filemerge时,这个时候就会进行小数据文件合并操作,产生合并数据文件。
CN201510507090.8A 2015-08-13 2015-08-13 一种基于hdfs的大规模数据集装载的方法 Active CN105049524B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510507090.8A CN105049524B (zh) 2015-08-13 2015-08-13 一种基于hdfs的大规模数据集装载的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510507090.8A CN105049524B (zh) 2015-08-13 2015-08-13 一种基于hdfs的大规模数据集装载的方法

Publications (2)

Publication Number Publication Date
CN105049524A CN105049524A (zh) 2015-11-11
CN105049524B true CN105049524B (zh) 2019-02-05

Family

ID=54455727

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510507090.8A Active CN105049524B (zh) 2015-08-13 2015-08-13 一种基于hdfs的大规模数据集装载的方法

Country Status (1)

Country Link
CN (1) CN105049524B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106843763A (zh) * 2017-01-19 2017-06-13 北京神州绿盟信息安全科技股份有限公司 一种基于hdfs系统的文件合并方法及装置
CN108446150B (zh) * 2018-03-23 2021-11-26 武汉斗鱼网络科技有限公司 对象的重复使用方法、装置及终端设备
CN108710550B (zh) * 2018-08-16 2021-09-28 北京易华录信息技术股份有限公司 一种用于公安交管稽查布控系统的双数据中心容灾系统
CN109831485A (zh) * 2018-12-29 2019-05-31 芜湖哈特机器人产业技术研究院有限公司 一种激光雷达的数据通信与解析方法
CN111026768A (zh) * 2019-10-16 2020-04-17 武汉达梦数据库有限公司 一种可实现数据快速装载的数据同步方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102902716A (zh) * 2012-08-27 2013-01-30 苏州两江科技有限公司 基于Hadoop分布式计算平台的存储系统
CN104142937A (zh) * 2013-05-07 2014-11-12 深圳中兴网信科技有限公司 一种分布式数据存取方法、装置和系统
CN104408147A (zh) * 2014-12-02 2015-03-11 浪潮(北京)电子信息产业有限公司 一种多线程数据上传方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120182891A1 (en) * 2011-01-19 2012-07-19 Youngseok Lee Packet analysis system and method using hadoop based parallel computation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102902716A (zh) * 2012-08-27 2013-01-30 苏州两江科技有限公司 基于Hadoop分布式计算平台的存储系统
CN104142937A (zh) * 2013-05-07 2014-11-12 深圳中兴网信科技有限公司 一种分布式数据存取方法、装置和系统
CN104408147A (zh) * 2014-12-02 2015-03-11 浪潮(北京)电子信息产业有限公司 一种多线程数据上传方法

Also Published As

Publication number Publication date
CN105049524A (zh) 2015-11-11

Similar Documents

Publication Publication Date Title
CN105049524B (zh) 一种基于hdfs的大规模数据集装载的方法
CN107169083B (zh) 公安卡口海量车辆数据存储与检索方法及装置、电子设备
CN104537076B (zh) 一种文件读写方法及装置
US9619430B2 (en) Active non-volatile memory post-processing
US20160034205A1 (en) Systems and/or methods for leveraging in-memory storage in connection with the shuffle phase of mapreduce
CN103310460A (zh) 图像特征提取的方法及系统
CN111324427B (zh) 一种基于dsp的任务调度方法及装置
CN101957863A (zh) 数据并行处理方法、装置及系统
CN102867035B (zh) 一种分布式文件系统集群高可用方法和装置
CN102752387B (zh) 数据存储处理系统和数据存储处理方法
CN110472102A (zh) 一种数据处理方法、装置、设备和存储介质
CN102142032B (zh) 一种分布式文件系统的数据读写方法及系统
CN107153643B (zh) 数据表连接方法及装置
CN103020255A (zh) 分级存储方法和装置
US9836516B2 (en) Parallel scanners for log based replication
CN102521014A (zh) 虚拟机的部署方法及装置
CN104123237A (zh) 海量小文件分级存储方法及系统
CN103412929A (zh) 一种海量数据的存储方法
CN103023996A (zh) 一种云数据存储系统
CN107391544A (zh) 列式存储数据的处理方法、装置、设备及计算机储存介质
Liu et al. An improved hadoop data load balancing algorithm
CN103984528A (zh) 基于飞腾处理器平台的多线程并发数据压缩方法
Premchaiswadi et al. Optimizing and tuning MapReduce jobs to improve the large‐scale data analysis process
Dai et al. Research and implementation of big data preprocessing system based on Hadoop
Mukhopadhyay et al. Addressing name node scalability issue in Hadoop distributed file system using cache approach

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 311100 Hangzhou District, Yuhang City, the former warehouse street, Zhejiang, yearning for Street No. 1008, 9-10 floor, 14

Applicant after: ZHEJIANG PONSHINE INFORMATION TECHNOLOGY CO., LTD.

Address before: Wan Tang Road Hangzhou City, Zhejiang province 310012 No. 317 Xihu District Huaxing century building room 1005

Applicant before: ZHEJIANG PONSHINE INFORMATION TECHNOLOGY CO., LTD.

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant