CN104050290B - 读取和写入用于hadoop计算的数据的方法和系统 - Google Patents
读取和写入用于hadoop计算的数据的方法和系统 Download PDFInfo
- Publication number
- CN104050290B CN104050290B CN201410305744.4A CN201410305744A CN104050290B CN 104050290 B CN104050290 B CN 104050290B CN 201410305744 A CN201410305744 A CN 201410305744A CN 104050290 B CN104050290 B CN 104050290B
- Authority
- CN
- China
- Prior art keywords
- hdfs
- methods
- hadoop
- data
- class
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供一种读取和写入用于HADOOP计算的数据的方法和系统。一种从非HADOOP分布式文件系统(HDFS)读取用于HADOOP计算的输入数据的方法,其特征在于,所述方法包括:定义用于从所述非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类;实现在HADOOP分布式计算模型中的InputFormat类中的getRecordReader方法和getSplits方法。其中,在实现的getRecordReader方法中,创建定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。本发明剥离了HADOOP对HDFS的强烈依赖,减少了数据的读取次数、复制次数并且节省了存储空间和处理时间。
Description
技术领域
本发明涉及一种用于分布式计算的技术,尤其涉及一种处理用于分布式计算的数据的方法和系统。
背景技术
分布式计算平台是基于分布式存储平台之上存在的,用于处理分布式存储平台中的数据。近年来较盛行的MapReduce计算模型能够利用分布式的计算能力处理大数据,这一便利性也激发了数据的计算需求。
然而,MapReduce计算模型也存在例如分布式的计算平台和存储平台强绑定的制约性。以作为一种MapReduce计算模型的具体实现的HADOOP为例,HADOOP计算平台要求其所计算的数据必须存储于与之强绑定的存储平台(即HDFS)上。这就给HADOOP的具体应用带来了不便:有大量的数据存储在HDFS之外的已有存储系统之上,这些数据有计算的需求,却缺乏计算的资源。
在这种情况下,目前通常的做法是,从一个存储系统上将数据传输到HDFS上,然后在HDFS上触发计算,计算完成后再将计算结果传输回原有的存储系统上。这就带来了巨大的消耗,浪费了大量的存储空间(例如需要存储2份以上的数据)、传输带宽(大量的数据传输占用带宽)和处理时间(因为在处理中存在很多单点,造成整体耗时较大)。
发明内容
本发明的实施例提供一种读取和写入用于HADOOP计算的数据的方法和系统,在HADOOP计算模型的应用中提供与非HDFS存储系统的存取接口,在分布式计算中可直接存取非HDFS存储系统中的数据,剥离HADOOP对HDFS的强烈依赖,从而节省存储空间和处理时间。
为达到上述目的,本发明的实施例采用如下技术方案:
一种从非HADOOP分布式文件系统(HDFS)读取用于HADOOP计算的输入数据的方法,其特征在于,所述方法包括:定义用于从所述非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类;实现在HADOOP分布式计算模型中MapReduce框架的InputFormat类中的getRecordReader方法和getSplits方法。其中,在实现的getRecordReader方法中,创建定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。
一种将HADOOP计算的输出数据写入非HDFS的方法,其特征在于,所述方法包括:定义用于将所述输出数据写入所述非HDFS的数据写入类,所述数据写入类继承RecordWriter类;实现在HADOOP分布式计算模型中OutputFormat类中的getRecordWriter方法。其中,在实现的getRecordWriter方法中,创建定义的数据写入类的实例或对象并返回所述实例或对象。
一种从非HDFS读取用于HADOOP计算的输入数据的系统,其特征在于,所述系统包括:读取类定义模块,用于定义用于从所述非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类;读取方法实现模块,用于实现在HADOOP分布式计算模型中的InputFormat类中的getRecordReader方法和getSplits方法。其中,在实现的getRecordReader方法中,读取方法实现模块创建读取类定义模块定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,读取方法实现模块将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。
一种将HADOOP计算的输出数据写入非HDFS的系统,其特征在于,所述系统包括:写入类定义模块,用于定义用于将所述输出数据写入所述非HDFS的数据写入类,所述数据写入类继承RecordWriter类;写入方法实现模块,用于实现在HADOOP分布式计算模型中的OutputFormat类中的getRecordWriter方法。其中,在实现的getRecordWriter方法中,写入方法实现模块创建定义的数据写入类的实例或对象并返回所述实例或对象。
本发明的从非HDFS读取用于HADOOP计算的输入数据的方法、将HADOOP计算的输出数据写入非HDFS的方法以及使用所述方法的系统提供HADOOP与非HDFS存储系统的软件接口,当用户程序使用 HADOOP执行分布式计算时,定制实现的InputFormat和/或OutputFormat类的方法被调用,返回定制的数据读取类和/或数据写入类的对象或实例,从而HADOOP可通过所述数据读取类和/或数据写入类的对象或实例执行非HDFS上的数据读取和/或写入。这样,剥离了HADOOP对HDFS的强烈依赖,减少了数据的读取次数、复制次数并且节省了存储空间和处理时间。
附图说明
图1为现有技术与根据本发明的方法处理非HDFS存储系统上的数据的对比示意图;
图2为根据本发明的示例性实施例从非HDFS读取用于HADOOP计算的输入数据的方法的流程图;
图3为根据本发明的示例性实施例将HADOOP计算的输出数据写入非HDFS的方法的流程图;
图4为根据本发明的示例性实施例从非HDFS读取用于HADOOP计算的输入数据的系统的逻辑框图;
图5为根据本发明的示例性实施例将HADOOP计算的输出数据写入非HDFS的系统的逻辑框图。
具体实施方式
下面结合附图对本发明实施例读取和写入用于HADOOP计算的数据的方法和系统进行详细描述。
图1为现有技术与根据本发明的方法处理非HDFS存储系统上的数据的对比示意图。在图1中,以网络文件系统(NFS)作为非HDFS的示例,但是本发明的普通技术人员通过以下参照图1~图5对本发明的实施例的描述可以理解,本发明的总体构思适用于任何HDFS以外的数据存储系统。
图1上端示出根据现有技术用于处理非HDFS存储系统上的数据的数据流向。如图所示,当利用HADOOP计算模型需要处理存储在非HDFS(如NFS)上的数据时,需要操作的客户端从NFS读取所述NFS上的数据,然后再将所述数据复制到HDFS上,这期间所述数据经过读取、复制两次处理,并且由于客户端需要通过其上的网卡从NFS执行数据读取,其成为单机节点的瓶颈。此后,HADOOP对复制到HDFS 上的数据执行分布式计算。在完成计算后,操作的客户端还需将结果数据传输到NFS上,其间所述数据同样经过复制、写入两次处理,客户端同样成为单机节点的瓶颈。因此,在现有技术的处理方案中,对非HDFS存储系统上的数据的处理需要经过六次处理,并且其中有四次处理存在单机瓶颈。
图1下端示出根据本发明的方法处理非HDFS存储系统上的数据的数据流向。在HADOOP分布式计算模型的MapReduce框架中,通过InputFormat类从HDFS上读取数据并输入到用户程序中,另一方面,通过OutputFormat类将用户程序的输出数据写入到HDFS。通过定制InputFormat类和OutputFormat类的方法,使得用户程序可直接从NFS读取计算所需的数据进行处理,并且可将计算所得的输出数据直接写入NFS。这样,对非HDFS存储系统上的数据仅执行两次处理,并且不存在单机瓶颈。
图2为根据本发明的示例性实施例从非HDFS读取用于HADOOP计算的输入数据的方法的流程图。
参照图2,在步骤S210,定义用于从非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类。例如,在C++程序中,定义数据读取类classNfsLineRecordReader:public RecordReader;或者在Java程序中,定义数据读取类classNfsLineRecordReader extends RecordReader。在所述数据读取类中,还定义用于访问某种非HDFS上的数据的数据变量和方法/函数成员。本领域普通技术人员可容易地定义用于访问某种非HDFS上的数据的所述数据读取类。
在步骤S220,实现在HADOOP分布式计算模型中MapReduce框架的InputFormat类中的getRecordReader方法和getSplits方法。在开源HADOOP中的InputFormat类中,定义了getRecordReader()和getSplits()两个抽象方法。为了将在步骤S210定义的数据读取类与HADOOP接口,在实现的getRecordReader方法中,创建定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。
通过步骤S210和S220的处理,当用户程序使用HADOOP执行分布式计算时,在步骤S220实现的InputFormat类的getRecordReader方 法和getSplits方法被调用,并且当getRecordReader方法被调用时,返回定制的数据读取类的对象或实例,从而HADOOP可通过所述数据读取类的对象或实例执行非HDFS上的数据读取。这样,剥离了HADOOP对HDFS的强烈依赖,并且节省存储空间和处理时间。
根据本发明的可选实施例,所述非HDFS为NFS。
根据本发明的优选实施例,所述方法还包括:配置HADOOP应用从所述非HDFS上指定的位置读取所述输入数据。例如,如下配置HADOOP的运行脚本:
./hadoop fs–rmr/home/disk0/mapreducenfs/client/mnt/testoutput10
rm–rf/home/disk0/mapreducenfs/client/mnt/testoutput10
./hadoop hce-mapper runner.sh-reducer./wordcount-demo-file runner.sh–file./wordcount-demo–input file:///home/disk0/mapreducenfs/client/mnt/hadoop-intern al-output/home/disk0/mapreducenfs/client/mnt/testoutput10-jobconfkeep.failed.task.files=true-jobconf mapred.reduce.tasks=1
通过上述配置,指定从/mnt/hadoop-internal文件读取输入数据,并且将输出数据写入NFS系统上的/mnt/testoutput,由此可动态地指定输入数据和输出数据的位置。
图3为根据本发明的示例性实施例将HADOOP计算的输出数据写入非HDFS的方法的流程图。
参照图3,在步骤S310,定义用于将所述输出数据写入所述非HDFS的数据写入类,所述数据写入类继承RecordWriter类。例如,在C++程序中,定义数据数据写入类classNfsLineRecordWriter:public RecordWriter;或者在Java程序中,定义数据写入类classNfsLineRecordWriter extends RecordWriter。在所述数据写入类中,还定义用于访问某种非HDFS上的数据的数据变量和方法/函数成员。本领域普通技术人员可容易地定义用于访问某种非HDFS上的数据的所述数据写入类。
在步骤S320,实现在HADOOP分布式计算模型中MapReduce框架的OutputFormat类中的getRecordWriter方法。在开源HADOOP中的OutputFormat类中,定义了getRecordWriter()抽象方法。为了将在步骤S310定义的数据写入类与HADOOP接口,在实现的getRecordWriter方法中,创建定义的数据写入类的实例或对象并返回所述实例或对象。
通过步骤S310和S320的处理,当用户程序使用HADOOP执行分 布式计算时,在步骤S320实现的OutputFormat类的getRecordWriter方法被调用,并且当getRecordWriter方法被调用时,返回定制的数据写入类的对象或实例,从而HADOOP可通过所述数据写入类的对象或实例执行非HDFS上的数据写入。这样,剥离了HADOOP对HDFS的强烈依赖,并且节省存储空间和处理时间。
根据本发明的可选实施例,所述非HDFS为NFS。
根据本发明的优选实施例,所述方法还包括:配置HADOOP应用将所述输出输入写入所述非HDFS上指定的位置。例如,如下配置HADOOP的运行脚本:
./hadoop fs–rmr/home/disk0/mapreducenfs/client/mnt/testoutput10
rm–rf/home/disk0/mapreducenfs/client/mnt/testoutput10
./hadoop hce-mapper runner.sh-reducer./wordcount-demo-file runner.sh–file./wordcount-demo–input file:///home/disk0/mapreducenfs/client/mnt/hadoop-intern al-output/home/disk0/mapreducenfs/client/mnt/testoutput10-jobconfkeep.failed.task.files=true-jobconf mapred.reduce.tasks=1
通过上述配置,指定从/mnt/hadoop-internal文件读取输入数据,并且将输出数据写入NFS系统上的/mnt/testoutput,由此可动态地指定输入数据和输出数据的位置。
所述从非HDFS读取用于HADOOP计算的输入数据的方法和将HADOOP计算的输出数据写入非HDFS的方法可在同一系统中实现。
图4为根据本发明的示例性实施例从非HDFS读取用于HADOOP计算的输入数据的系统的逻辑框图。
参照图4,所述从非HDFS读取用于HADOOP计算的输入数据的系统包括读取类定义模块410和读取方法实现模块420。
读取类定义模块410用于定义用于从所述非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类。
读取方法实现模块420用于实现在HADOOP分布式计算模型中MapReduce框架的InputFormat类中的getRecordReader方法和getSplits方法。其中,在实现的getRecordReader方法中,读取方法实现模块420创建读取类定义模块410定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,读取方法实现模块420将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。
根据本发明的优选实施例,所述系统还包括应用配置模块(未示出),应用配置模块用于配置HADOOP应用从所述非HDFS上指定的位置读取所述输入数据。
所述非HDFS可以是NFS。
图5为根据本发明的示例性实施例将HADOOP计算的输出数据写入非HDFS的系统的逻辑框图。
参照图5,所述将HADOOP计算的输出数据写入非HDFS的系统包括写入类定义模块510和写入方法实现模块520。
写入类定义模块510用于定义用于将所述输出数据写入所述非HDFS的数据写入类,所述数据写入类继承RecordWriter类。
写入方法实现模块520用于实现在HADOOP分布式计算模型中MapReduce框架的OutputFormat类中的getRecordWriter方法。其中,在实现的getRecordWriter方法中,写入方法实现模块520创建定义的数据写入类的实例或对象并返回所述实例或对象。
根据本发明的优选实施例,所述系统还包括应用配置模块(未示出),所述应用配置模块用于配置HADOOP应用将所述输出输入写入所述非HDFS上指定的位置。
所述非HDFS可以是NFS。
所述从非HDFS读取用于HADOOP计算的输入数据的系统和将HADOOP计算的输出数据写入非HDFS的系统可在同一系统中实现。
通过前述参照附图描述的本发明的示例性实施例可以看出,本发明的从非HDFS读取用于HADOOP计算的输入数据的方法、将HADOOP计算的输出数据写入非HDFS的方法以及使用所述方法的系统提供HADOOP与非HDFS存储系统的软件接口,当用户程序使用HADOOP执行分布式计算时,定制实现的InputFormat和/或OutputFormat类的方法被调用,返回定制的数据读取类和/或数据写入类的对象或实例,从而HADOOP可通过所述数据读取类和/或数据写入类的对象或实例执行非HDFS上的数据读取和/或写入。这样,剥离了HADOOP对HDFS的强烈依赖,减少了数据的读取次数、复制次数并且节省了存储空间和处理时间。在线下测试中,根据本发明的技术方案对50G数据的数据处理在性能上提高100倍以上,并且所述性能的 提高随着数据量的增加呈指数增长。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种从非HADOOP分布式文件系统HDFS读取用于HADOOP计算的输入数据的方法,其特征在于,所述方法包括:
定义用于从所述非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类;
实现在HADOOP分布式计算模型中的InputFormat类中的getRecordReader方法和getSplits方法,
其中,在实现的getRecordReader方法中,创建定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:配置HADOOP应用从所述非HDFS上指定的位置读取所述输入数据。
3.根据权利要求2所述的方法,其特征在于,所述非HDFS为网络文件系统NFS。
4.一种将HADOOP计算的输出数据写入非HDFS的方法,其特征在于,所述方法包括:
定义用于将所述输出数据写入所述非HDFS的数据写入类,所述数据写入类继承RecordWriter类;
实现在HADOOP分布式计算模型中的OutputFormat类中的getRecordWriter方法,
其中,在实现的getRecordWriter方法中,创建定义的数据写入类的实例或对象并返回所述实例或对象。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:配置HADOOP应用将所述输出输入写入所述非HDFS上指定的位置。
6.根据权利要求5所述的方法,其特征在于,所述非HDFS为NFS。
7.一种从非HDFS读取用于HADOOP计算的输入数据的系统,其特征在于,所述系统包括:
读取类定义模块,用于定义用于从所述非HDFS读取数据的数据读取类,所述数据读取类继承RecordReader类;
读取方法实现模块,用于实现在HADOOP分布式计算模型中的InputFormat类中的getRecordReader方法和getSplits方法,
其中,在实现的getRecordReader方法中,读取方法实现模块创建读取类定义模块定义的数据读取类的实例或对象并返回所述实例或对象,并且在实现的getSplits方法中,读取方法实现模块将从调用的getRecordReader方法返回的RecordReader实例或对象确认为定义的数据读取类的实例或对象。
8.根据权利要求7所述的系统,其特征在于,所述系统还包括:应用配置模块,用于配置HADOOP应用从所述非HDFS上指定的位置读取所述输入数据。
9.根据权利要求8所述的系统,其特征在于,所述非HDFS为NFS。
10.一种将HADOOP计算的输出数据写入非HDFS的系统,其特征在于,所述系统包括:
写入类定义模块,用于定义用于将所述输出数据写入所述非HDFS的数据写入类,所述数据写入类继承RecordWriter类;
写入方法实现模块,用于实现在HADOOP分布式计算模型中的OutputFormat类中的getRecordWriter方法,
其中,在实现的getRecordWriter方法中,写入方法实现模块创建定义的数据写入类的实例或对象并返回所述实例或对象。
11.根据权利要求10所述的系统,其特征在于,所述系统还包括:应用配置模块,用于配置HADOOP应用将所述输出输入写入所述非HDFS上指定的位置。
12.根据权利要求11所述的系统,其特征在于,所述非HDFS为NFS。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410305744.4A CN104050290B (zh) | 2014-06-30 | 2014-06-30 | 读取和写入用于hadoop计算的数据的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410305744.4A CN104050290B (zh) | 2014-06-30 | 2014-06-30 | 读取和写入用于hadoop计算的数据的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104050290A CN104050290A (zh) | 2014-09-17 |
CN104050290B true CN104050290B (zh) | 2018-03-02 |
Family
ID=51503122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410305744.4A Active CN104050290B (zh) | 2014-06-30 | 2014-06-30 | 读取和写入用于hadoop计算的数据的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104050290B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064670A (zh) * | 2012-12-18 | 2013-04-24 | 清华大学 | 基于位置网的创新平台数据管理方法及系统 |
-
2014
- 2014-06-30 CN CN201410305744.4A patent/CN104050290B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064670A (zh) * | 2012-12-18 | 2013-04-24 | 清华大学 | 基于位置网的创新平台数据管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104050290A (zh) | 2014-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230246811A1 (en) | Method for compiling from a high-level scripting language to a blockchain native scripting language | |
CN110506260B (zh) | 用于神经网络环境中的增强数据处理的方法、系统和介质 | |
CN109542399B (zh) | 软件开发方法、装置、终端设备及计算机可读存储介质 | |
KR101645052B1 (ko) | 디버깅 파이프라인 | |
CN109976761A (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
CN105765534A (zh) | 虚拟计算系统和方法 | |
CN111194437B (zh) | 使用存储中代码执行的数据处理卸载 | |
KR101941641B1 (ko) | 동일한 타입의 다수의 메타데이터 표현을 효율적으로 제공하는 기법 | |
CN112765023A (zh) | 测试用例生成方法、装置 | |
CN110908837B (zh) | 应用程序异常处理方法、装置、电子设备及存储介质 | |
US10387124B2 (en) | System and method for creating domain specific language | |
CN113703862A (zh) | 基于配置的接口调用方法、装置、设备及存储介质 | |
CN116541336B (zh) | 多核芯片、协处理器的软件运行方法 | |
CN110312990A (zh) | 配置方法及系统 | |
CN104050290B (zh) | 读取和写入用于hadoop计算的数据的方法和系统 | |
CN113254888B (zh) | 获取硬件信息的方法、授权控制系统及计算设备 | |
CN112764729B (zh) | 应用软件开发方法、装置、计算机设备及可读存储介质 | |
CN109815116A (zh) | 一种软件测试方法和设备平台及计算机可读存储介质 | |
CN115599401A (zh) | 自定义模型的发布方法、装置、设备及介质 | |
US11797277B2 (en) | Neural network model conversion method server, and storage medium | |
Corre et al. | Fast template-based heterogeneous mpsoc synthesis on fpga | |
CN114679491A (zh) | 微前端服务应用方法、装置、存储介质及电子设备 | |
CN113238715A (zh) | 智能文件系统、及其配置方法、智能辅助计算设备和介质 | |
CN112612531A (zh) | 应用程序启动方法、装置、电子设备及存储介质 | |
US20240296047A1 (en) | Cross-platform plug-in development methods, apparatuses, and electronic devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |