CN102521367B - 面向海量数据的分布式处理方法 - Google Patents

面向海量数据的分布式处理方法 Download PDF

Info

Publication number
CN102521367B
CN102521367B CN 201110424530 CN201110424530A CN102521367B CN 102521367 B CN102521367 B CN 102521367B CN 201110424530 CN201110424530 CN 201110424530 CN 201110424530 A CN201110424530 A CN 201110424530A CN 102521367 B CN102521367 B CN 102521367B
Authority
CN
China
Prior art keywords
variable
data
array
file
tuple
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
CN 201110424530
Other languages
English (en)
Other versions
CN102521367A (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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN 201110424530 priority Critical patent/CN102521367B/zh
Publication of CN102521367A publication Critical patent/CN102521367A/zh
Application granted granted Critical
Publication of CN102521367B publication Critical patent/CN102521367B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及海量数据的分布式处理技术领域,公开了一种面向海量数据的分布式处理方法,包括以下步骤:S1:根据SQL命令以及数组文件内的变量信息计算输出变量和条件变量集合中的主变量,如果主变量存在,执行S2;S2:判断是否进行条件变量的选择优化;S3:判断数组是否合并存储;S4:SQL引擎根据SQL命令以及表中定义的各列的数据类型生成MapReduce任务接收到的数据元组,并生成结果数据元组;S5:对于生成的结果数据元组,判断是否需要将其以数组文件存储。本发明设计了一种基于MapReduce的、对于以数组形式存储的海量数据的分布式处理方法,使得用户可以使用SQL命令对以数组形式存储的海量数据进行分布式处理,该方法具有使用简单、运行高效,可容错的特点。

Description

面向海量数据的分布式处理方法
技术领域
本发明涉及海量数据的分布式处理技术领域,尤其涉及一种面向以数组形式存储的海量数据的分布式处理方法。
背景技术
随着互联网的快速发展,网络产生的数据越来越多,如何存储和处理这些海量数据,是一个亟待解决的问题。MapReduce是由Google提出的分布式处理框架,用户只要编写“Map”和“Reduce”中的处理过程,MapReduce系统就可以使用户实现对海量数据的分布式并行处理,并提供自动的任务容错和负载均衡。结合Google的分布式文件系统(GFS),MapReduce可以充分利用数据的局部性,从而大大减少网络传输的数据量。Hadoop是MapReduce和GFS架构的开源实现,被Yahoo!、Facebook等许多公司使用。由于MapReduce框架的高效易用、可容错和可扩展,它被广泛应用于文档聚类、机器学习、日志分析等应用程序中。
随着仪器精度,数据采集和研究方法的快速发展,科学研究收集和生成的数据也越来越多。这些数据大多以数据的形式(如NetCDF、HDF文件格式)存储在网络文件系统(NFS)和并行文件系统上,用户可以编写串行程序用单机进行处理,但是显然单机的处理能力无法应对海量的科学数据;用户可以编写MPI程序来进行多机处理,但是MPI的调试、容错和负载均衡使得完成一个简单的处理程序都非常费时费力。
MapReduce的分布式处理框架可以克服MPI多机处理的缺点,但是MapReduce并行处理框架最初是针对Web数据而设计的,并不能简单地应用到以数组方式存储的科学数据上。另外,科学家使用MapReduce框架处理数据的时候需要自己编写相应的MapReduce处理程序,虽然相比MPI多机程序,已经减少了很多工作量,但还是有一定的学习门槛和工作量。
Hive是架设于MapReduce之上的开源SQL引擎,提供数据查询和分析功能。Hive能够提供SQL语义,并将SQL语义转化为MapReduce任务进行执行。但是Hive并不能直接应用于科学数据处理,因为Hive中的处理都是基于表的列和行进行的,而以数组形式存储的科学数据没有表的列和行的概念。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何设计一种对于以数组形式存储的海量数据的分布式处理方法。
(二)技术方案
为解决上述技术问题,本发明提供了一种面向海量数据的分布式处理方法,包括以下步骤:
S1:根据SQL命令以及数组文件内的变量信息计算输出变量和条件变量集合中的主变量,如果主变量存在,执行步骤S2,其中,所述数组文件是以数组形式存储的数据文件;
S2:判断是否进行条件变量的选择优化,如果否,那么在读取数据时,遍历数组文件中的主变量的整个索引范围;如果是,那么先根据条件变量的选择范围计算输出变量的维度范围,并根据该维度范围读取数据;
S3:判断数组是否合并存储,如果否,那么读取数组组成数据元组;如果是,那么不展开读取的数据,且生成另一个数据元组,所生成的数据元组中每一个单元都包含该列对应变量的数据值的集合;
S4:SQL引擎根据SQL命令以及表中定义的各列的数据类型生成MapReduce任务接收到的数据元组,并生成结果数据元组;
S5:对于生成的结果数据元组,判断是否需要将其以数组文件存储,如果否,那么就按照保存为其他文件格式的方法处理该结果数据元组;如果是,那么判断结果数据元组中的数组是否被合并存储,如果未被合并存储,则遍历结果数据的行,每一列生成一个变量的数组,并按照表中定义的列的数据类型将数组存储到数组文件,如果已被合并存储,那么将结果数据元组中每个单元的内容取出作为一个变量数组,并按照表中定义的列的数据类型将数组存储到数组文件。
优选地,步骤S3中,如果数据不进行合并存储,则所述数据元组的个数取决于主变量的维度范围,每个数据元组包含输出变量和条件变量在当前主变量索引处的值。
优选地,所述海量数据包括多个所述数据文件。
(三)有益效果
本发明设计了一种基于MapReduce的、对于以数组形式存储的海量数据的分布式处理方法,使得用户可以使用SQL命令对以数组形式存储的海量数据进行分布式处理,该方法具有使用简单、运行高效,可容错的特点。
附图说明
图1为本发明实施例的方法流程图;
图2为多维数组到数据库表的行和列的相互映射例示图;
图3为对条件变量进行选择优化的例示图;
图4为在表格单元中合并数组存储的例示图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
首先需要说明的是,由于以数组形式存储的科学数据文件格式比较多,本发明实施例中以常用的NetCDF文件格式为例。NetCDF文件示例如下:
example1.nc文件中存储了x[x]、y[y]、time[time]、var1[time,y]、var2[time,y]、val3[time][y][x],6个变量,定义如下所示:
Figure BDA0000121279740000041
下面对本发明实施例中所用到的一些名词进行说明:
输出变量:指SQL查询中select语句中作用到的变量;
条件变量:指SQL查询中where语句中作用到并进行条件判断的变量;
维度变量:指变量名称和维度名称相同的变量,如x(x);
主变量:如果在一组变量中,其他变量都是某一变量a的维度变量或者是与该变量a每一个维度都相同的变量,则该变量a为主变量。例如变量集合{time(time),y(y),var 1(time,y),var2(time,y)}中,var1(time,y)、var2(time,y)都是主变量。在一组变量中,有可能不存在主变量,如{time(time),var1(time,y),var3(time,y,x)},因为var1不是var3的维度变量且varl的维度和var3不同。
下面结合图1对本发明实施例的方法流程进行详细说明,该图1也是图2所示的数组和表的相互映射方法以及图3所示的优化方法在MapReduce和其SQL引擎系统实现的具体流程。本发明实施例的方法包括以下步骤:
S1:根据SQL命令以及数组文件内的变量信息计算输出变量和条件变量集合中的主变量,如果主变量不存在,那么返回SQL命令有误的命令,并停止执行本流程;否则执行步骤S2。其中,所述数组文件是以数组形式存储的数据文件。本发明中并行处理很多数据文件,所以称为“海量数据”。
S2:判断是否进行条件变量的选择优化,如果否,那么在读取数据时,遍历数组文件中的主变量的整个索引范围;如果是,那么先根据条件变量的选择范围计算输出变量的维度范围,并根据该维度范围读取数据(而不是遍历数组文件中的主变量的整个索引范围)。
S3:判断数组是否合并存储,如果否,那么读取数组组成数据元组(该数据元组的个数取决于主变量的维度范围,每个数据元组包含输出变量和条件变量在当前主变量索引处的值);如果是,那么不展开读取的数据,且生成另一个数据元组,所生成的数据元组中每一个单元都包含该列对应变量的数据值的集合。
S4:SQL引擎根据SQL命令以及表(表包含两个意思,一个是表的结构,另外一个是表的数据,这里指表的结构)中定义的各列的数据类型来生成MapReduce任务接收到的数据元组,并生成结果数据元组;
S5:对于生成的结果数据元组,判断是否需要将其以数组文件存储。如果否,那么就按照保存为其他文件格式的方法处理该结果数据元组;如果是,那么判断结果数据元组中的数组是否被合并存储,如果未被合并存储,则遍历结果数据的行,每一列生成一个变量的数组,并按照表中定义的列的数据类型将数组存储到数组文件,如果被合并存储了,那么将结果数据元组中每个单元的内容取出来作为一个变量数组,并按照表中定义的列的数据类型将数组存储到数组文件。其中,给MapReduce的输入数据和结果数据都是很多数据元组,一个数据元组对应所述表中一行的数据。
关于输入文件格式、优化方法、以及输出文件格式的选择,可以由用户指定,也可由系统根据SQL命令和数据属性自动判断。
由于要使用SQL命令来处理数据,就必须把这些数据映射到数据库表的行和列。
图2示出了多维数组到数据库表的行和列的相互映射方法,这里的相互是指读文件时,将数组转化为行和列,写结果文件时,将行和列转化为数组,这里的相互映射是指从数组文件变成和数据库表对应的数据元组,经过MapReduce处理后,再由数组元组变成数组文件的过程,包含在整个步骤S1~S5中。在读取输入文件时,将多维数组按主变量展开,然后将其排列成数据库表的行和列的方式,表中的列是对应变量的单个值,表中的行是每个主变量和其维度变量的值。之后根据SQL语义的处理命令处理相应的行和列,在将结果写入输出文件时,遍历表的行,并将对应的列转化为数组进行存储。
图2所示的方法的缺点是对于数据的范围查询和处理,很有可能读取和展开了不必要的数据,图2对条件变量进行了选择优化,在读取输入文件时,先根据条件变量的查询范围条件计算对应维度的范围,然后根据维度的范围读取需要的变量。能这样优化的前提是条件变量的选择的范围是一段连续的范围,不能是离散的或是多个连续范围。一般来说这要求条件变量的值是递增或递减的。之后根据SQL语义的处理命令处理相应的行和列,在将结果写入输出文件时,遍历表的行,并将对应的列转化为数组进行存储。
图2,图3所示的方法中会将变量展开,为了减少中间数据的大小,同时为了保留变量之间的维度关系,可以在表格单元中合并数组存储。图3示出了在图2的基础上进行合并数组存储。在读取输入文件时,先根据条件变量的查询范围条件计算对应维度的范围,然后根据维度的范围读取需要的变量,并将每个变量对应到表的一列,为了避免变量展开后的数据膨胀,这里没有按照主变量进行展开,而是一行中每个单元的内容包含该单元对应变量的符合计算范围的值的集合,之后根据SQL语义的处理命令,处理相应的行和列。这样优化一般都是针对简单的范围抽取查询,因为除了范围抽取,其他对合并存储的变量处理,还是需要对其进行展开。在将结果写入输出文件时,将每一行中的单元取出,由于一个单元中是对应变量的值的集合,可以直接按照数组进行存储,最后变量之间的维度关系仍然能够保留。
下面介绍用户使用本发明的方法对海量数据进行分布式处理的操作流程:
由于以数组形式存储的科学数据文件格式比较多,这里以比较常用的NetCDF文件格式为例。
NetCDF文件中,数据以数组的形式进行存储,比如Hadoop的HDFS文件系统上′/user/yifeng/example′下一个examplel.nc文件中存储了x[x]、y[y]、time[time]、varl[time,y]、var2[time,y]、val3[time][y][x]6个变量。
第一步要创建表来映射NetCDF文件中的变量:
create table example(int x,int y,double time,int val1,int val2,intval3)
ROW FORMAT SERDE
′org.apache.hadoop.hive.contrib.serde2.NcFileSerDe′STORED ASINPUTFORMAT
′org.apache.hadoop.hive.contrib.fileformat.netcdf.NcFileInputFormat′OUTPUTFORMAT′
org.apache.hadoop.hive.contrib.fileformat.netcdf.NcFileOutputFormat′
这里创建了一个表,表的名称为example,其中包含6个变量和examplel.nc中变量类型和名称是一致的。这里指定了SERDE为org.apache.hadoop.hive.contrib.serde2.NcFileSerDe,INPUTFORMAT为org.apache.hadoop.hive.contrib.fileformat.netcdf.NcFileInputFormat,OUTPUTFORMAT为
org.apache.hadoop.hive.contrib.fileformat.netcdf.NcFileOutputFormat。
SERDE是Hive中用来对数据进行变换操作以及序列化和反序列化,INPUTFORMAT是文件的Hive中文件的输入格式,这里是以NetCDF文件格式输入,OUTPUTFORMAT是Hive中文件的输出格式,这里以NetCDF文件格式输出。用户可以指定不同的INPUTFORMAT和SERDE来选择不同的优化方法,系统也可以根据用户的查询和数据属性来判断。
第二步是将整个数据集和表对应起来:LOAD DATA INPATH′/user/yifeng/example′OVERWRITE INTO TABLE example;这样Hadoop文件系统HDF S上/user/yifeng/example目录下所有的NetCDF文件都映射到这个表了,这里要求NetCDF文件的结构都和example1.nc相同(包含相同的维度和变量),数据可以不同,由于大多数数据都是按照某一维度(如时间)分片存储,所以能够满足结构相同的要求。
第三步是用户输入SQL命令,系统会根据SQL命令动态映射并对相关变量进行数据处理并产生结果文件。
下面举例说明:
例1:
SQL命令为:select time,var1,var2from examplewhere y>=3andy<=9;
(1)未进行条件变量选择优化和数组合并存储的情况
NcFileInputFormat从查询命令中得知要使用3个变量time,y,var1,其中输出变量为time,var1,y为条件变量,根据NetCDF文件头信息得知var1,var2为主变量,time,y都是var1和var2的维度变量。NcFileInputFormat从NetCDF文件中遍历输出数据元组{time,y,var1,var2},如第一个数据元组为{1000.0,3,1,2},数据元组的个数取决于主变量var1或var2的维度,这里为6x2=12,NcFileSerDe从NcFileInputFormat得知要使用的变量为time,y,var1,var2,并根据表中变量的类型来反序列化NcFileInputFormat输出的数据元组{time为double类型,y为int类型,var1为int类型,var2为int类型},之后就交给Hive的SQL引擎去在执行MapReduce任务了。MapReduce从12个数据元组中过滤出y>=3和y<=9的元组,共3x2个。OUTPUTFORMAT将其写到NetCDF文件,结果如下:
可以看到var1,var2和time之间的维度关系无法保留。
(2)进行条件变量选择优化和数组合并存储的情况
NcFileInputFormat从查询命令中得知要使用3个变量time,y,var1,其中输出变量为time,var1,y为条件变量,根据NetCDF文件头信息得知var1为主变量,time,y都是var1的维度变量。NcFileInputFormat从根据判断条件y>=3and y<=9得到var1[0-1][0-2],生成一个数组元组{[1000.0,1001.0],{[1,2,3,7,8,9],[2,3]},[2,4,6,14,16,18],3},var1中的[2,3]说明主变量var1(var2同var1)的time维度长度为2,y维度长度为3.Hive的SQL引擎生成MapReduce任务不会过滤该元组,因为y=3符合y>=3andy<=9的条件,最后生成的NetCDF文件如下:
Figure BDA0000121279740000102
可以看到var1,var2和time之间的维度关系仍然保留,并且传输的数据量和生成的文件大小比未进行条件选择优化的方法要小。
例2:
SQL命令为:select time,y,x,var3,from example where y=6andx>=6and x<=8;
(1)未进行条件选择优化和数组合并存储的情况
{time,y,x,var3}中主变量为var3.总的生成的数据元组为为2x6x4=48个,经过过滤符合条件数据元组的共有2x1x2=4个,具体如下:{1000.0,6,6,6},{1000.0,6,8,8},{1001.0,6,6,30},{1001.0,6,8,32},最后生成的NetCDF文件如下:
Figure BDA0000121279740000112
(2)进行条件选择优化的情况
作为条件变量的x变量的x>=6and x>=8的选择范围[1,3]不是连续的,无法使用条件选择优化。
由以上实施例可以看出,本发明设计了一种基于MapReduce的、对于以数组形式存储的海量数据的分布式处理方法,使得用户可以使用SQL命令对以数组形式存储的海量数据进行分布式处理,该方法具有使用简单、运行高效,可容错的特点。
以上所述仅是本发明的实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。

Claims (3)

1.一种面向海量数据的分布式处理方法,其特征在于,包括以下步骤:
S1:根据SQL命令以及数组文件内的变量信息计算输出变量和条件变量集合中的主变量,如果主变量存在,执行步骤S2;如果主变量不存在,那么返回SQL命令有误的命令,并停止执行本流程;其中,所述数组文件是以数组形式存储的数据文件;
S2:判断是否进行条件变量的选择优化,如果否,那么在读取数据时,遍历数组文件中的主变量的整个索引范围;如果是,那么先根据条件变量的选择范围计算输出变量的维度范围,并根据该维度范围读取数据;
S3:判断数组是否合并存储,如果否,那么读取数组组成数据元组;如果是,那么不展开读取的数据,且生成另一个数据元组,所生成的数据元组中每一个单元都包含一个输出变量或条件变量的数据值的集合;
S4:SQL引擎根据SQL命令以及表中定义的各列的数据类型生成MapReduce任务接收到的数据元组,并生成结果数据元组;其中,表是在执行SQL命令前用户根据数组文件内变量信息创建好的二维表,表中列的名称和存储的数据类型和数组文件中的变量的名称和数据类型一一对应;
S5:对于生成的结果数据元组,判断是否需要将其以数组文件存储,如果否,那么就按照保存为其他文件格式的方法处理该结果数据元组;如果是,那么判断结果数据元组中的数组是否被合并存储,如果未被合并存储,则遍历结果数据的行,每一列生成一个变量的数组,并按照表中定义的列的数据类型将数组存储到数组文件,如果已被合并存储,那么将结果数据元组中每个单元的内容取出作为一个变量数组,并按照表中定义的列的数据类型将数组存储到数组文件。
2.如权利要求1所述的方法,其特征在于,步骤S3中,如果数据不进行合并存储,则所述数据元组的个数取决于主变量的维度范围,每个数据元组包含输出变量和条件变量在当前主变量索引处的值。
3.如权利要求1或2所述的方法,其特征在于,所述海量数据包括多个所述数据文件。
CN 201110424530 2011-12-16 2011-12-16 面向海量数据的分布式处理方法 Active CN102521367B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110424530 CN102521367B (zh) 2011-12-16 2011-12-16 面向海量数据的分布式处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110424530 CN102521367B (zh) 2011-12-16 2011-12-16 面向海量数据的分布式处理方法

Publications (2)

Publication Number Publication Date
CN102521367A CN102521367A (zh) 2012-06-27
CN102521367B true CN102521367B (zh) 2013-09-04

Family

ID=46292280

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110424530 Active CN102521367B (zh) 2011-12-16 2011-12-16 面向海量数据的分布式处理方法

Country Status (1)

Country Link
CN (1) CN102521367B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902614B (zh) * 2012-12-28 2018-05-04 中国移动通信集团公司 一种数据处理方法、设备和系统
CN103761080B (zh) * 2013-12-25 2017-02-15 中国农业大学 一种基于SQL的MapReduce作业生成方法及系统
CN104951286B (zh) * 2014-03-25 2018-07-06 阿里巴巴集团控股有限公司 一种将MapReduce转换为SQL的方法和装置
CN109829757B (zh) * 2019-01-18 2021-02-26 泰康保险集团股份有限公司 一种最优营销方案的选择方法及装置
CN113791742B (zh) * 2021-11-18 2022-03-25 南湖实验室 一种高性能的数据湖系统及数据存储方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101567006A (zh) * 2009-05-25 2009-10-28 中兴通讯股份有限公司 一种数据库系统及分布式sql语句执行计划重用方法
CN102073742A (zh) * 2011-01-31 2011-05-25 清华大学 一种海量对象的存储系统及其运行方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7487172B2 (en) * 2006-01-20 2009-02-03 International Business Machines Corporation Three-dimensional data structure for storing data of multiple domains and the management thereof

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101567006A (zh) * 2009-05-25 2009-10-28 中兴通讯股份有限公司 一种数据库系统及分布式sql语句执行计划重用方法
CN102073742A (zh) * 2011-01-31 2011-05-25 清华大学 一种海量对象的存储系统及其运行方法

Also Published As

Publication number Publication date
CN102521367A (zh) 2012-06-27

Similar Documents

Publication Publication Date Title
Doulkeridis et al. A survey of large-scale analytical query processing in MapReduce
Lin et al. Log analysis in cloud computing environment with Hadoop and Spark
Ji et al. Big data processing in cloud computing environments
Ji et al. Big data processing: Big challenges and opportunities
Floratou et al. Column-oriented storage techniques for MapReduce
Bruno et al. Advanced join strategies for large-scale distributed computation
CN102521367B (zh) 面向海量数据的分布式处理方法
CN103440288A (zh) 一种大数据存储方法及装置
US8868576B1 (en) Storing files in a parallel computing system based on user-specified parser function
Liang et al. Express supervision system based on NodeJS and MongoDB
Dede et al. Processing Cassandra datasets with Hadoop-streaming based approaches
CN106970929A (zh) 数据导入方法及装置
CN103440246A (zh) 用于MapReduce的中间结果数据排序方法及系统
Sinthong et al. Aframe: Extending dataframes for large-scale modern data analysis
CN104317899A (zh) 一种大数据分析与处理系统及访问方法
Chen et al. Providing scalable database services on the cloud
Mesmoudi et al. Benchmarking SQL on MapReduce systems using large astronomy databases
Kannan Beyond hadoop mapreduce apache tez and apache spark
Zhou et al. SparkSCAN: a structure similarity clustering algorithm on spark
Sinthong et al. AFrame: Extending DataFrames for large-scale modern data analysis (Extended Version)
Ravindra et al. Efficient processing of RDF graph pattern matching on MapReduce platforms
CN108319604A (zh) 一种hive中大小表关联的优化方法
MahmoudiNasab et al. AdaptRDF: adaptive storage management for RDF databases
Xu et al. Sparkrdf: In-memory distributed rdf management framework for large-scale social data
Huang et al. A review of various optimization schemes of small files storage on Hadoop

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant