网站首页  词典首页

请输入您要查询的论文:

 

标题 基于Hadoop/Hive的气象数据分布式处理研究
范文 陈效杰++张金泉
摘要:分布全球的气象传感器每隔一段时间就会收集大量的气象数据,历史气象数据更为庞大,如何存储和处理这些数据已成为一个难题。Hadoop的出现给人们提供了存储和分析大数据的一个利器,它利用HDFS分布式文件系统进行大数据存储,用户通过编写MapReduce程序完成大数据的分析处理。然而,对于很多用户而言,熟练掌握Java语言并编写MapReduce程序并不容易。鉴于此,利用Hive来存储和处理气象数据集。Hive是构建在Hadoop上的数据仓库框架,它支持SQL接口,可以让精通SQL技能的分析师对存放在HDFS中的大规模数据集进行查询分析。
关键词:大数据;Hadoop;HDFS;Hive
DOIDOI:10.11907/rjdk.151393
中图分类号:TP301
文献标识码:A 文章编号文章编号:16727800(2015)008001103
作者简介作者简介:陈效杰(1989-),男,山东临沂人,山东科技大学信息科学与工程学院硕士研究生,研究方向为云计算、大数据;张金泉(1972-),男,四川南充人,博士,山东科技大学信息科学与工程学院副教授、硕士生导师,研究方向为Petri理论及应用。
0 引言
人们生活在数据大爆炸时代,国际数据公司(IDC)曾经发布报告称,2006年数字世界项目统计得出全球数据总量为0.18ZB,面对数据的爆炸式增长,大数据的存储和处理显然也面临着巨大挑战[1]。Hadoop的出现为人们提供了一个可靠的共享存储和处理分析系统,使人们在存储和分析大数据时更加高效,其HDFS分布式文件系统可以实现数据的分布式存储[2]。MapReduce给出一个编程模型,该模型抽象出这些硬盘的读写问题并将其转换为对一个数据集的处理计算,HDFS和MapReduce是Hadoop的两个核心。
使用Hive对气象数据集进行分析主要是基于如下考虑:①分布在全球各地的气象传感器每隔一个小时收集气象数据并产生大量的日志数据,由于数据量十分巨大,用单机处理气象数据耗时太多,因此人们考虑使用搭建Hadoop的集群来处理这些数据,这些数据通常是半结构化并且是按照记录方式存储,按行并以ASCII码格式存储,每一行是一条记录,因此非常适合编写MapReduce程序进行分析处理[2];②对于大多数用户而言,熟练编写MapReduce程序不容易,所以人们将收集的气象数据导入到
Hive的数据仓库中,利用Hive来处理这些气象数据。Hive是Hadoop下的项目,它是一种分布式、按列存储的
数据仓库[3]。Hive管理HDFS中存储的数据,并提供SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。
1 相关技术
1.1 HDFS分布式文件系统
当数据集的大小超出一台独立物理计算机的存储能力时,就有必要对它进行分区并存储到若干台独立的计算机上,管理网络中跨多台计算机存储的文件系统称为分布式文件系统。HDFS即Hadoop的一个分布式文件系统,即Hadoop Distributed FileSystem,HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。
HDFS有两类节点,一类是namenode(管理者),另一类是datanode(工作者),namenode管理整个文件系统的命名空间,维护着文件系统树及树内的所有文件目录,并将这些信息永久保存在本地磁盘上,namenode也同时记录着每个块及各个块的数据节点信息。datanode负责文件系统中数据的实际存储,根据需要存储和检索数据块,并定期向namenode发送它们所存储块的列表,从而与namenode进行交互。HDFS用来存储底层数据,所有导入Hive中的数据最终都存储在HDFS中。
1.2 Hive
Hive是一个数据仓库框架,它构建于Hadoop之上,其设计初衷是让熟悉SQL但Java编程技能相对较弱的用户能够对存放在HDFS中的大规模数据进行查询分析,它一般在工作站运行。它的本质是将查询分析命令转换为MapReduce程序实现作业运行[1]。因此,Hive的执行效率实际上比直接执行MapReduce程序要低。
人们一般通过Hive外壳程序与Hive进行交互,安装完Hive后可以通过Hive shell方式进入外壳程序,在Hive中人们主要使用HiveQL语言。HiveQL是Hive的查询语言,它和SQL类似,精通SQL的用户可以很快熟悉HQL。
Hive与传统数据库相比,有很多相似之处,比如它们都支持SQL接口,但其底层依赖于HDFS和MapReduce,所以两者之间也存在很多区别。在传统数据库中,表的模式是在加载时确定的,如果发现加载的数据不符合模式,就不会加载,这种模式成为写时模式。但是Hive在数据加载过程中并不执行验证,而是在查询时进行,如果模式有错误,则返回的查询信息有可能是空值,这种模式成为读时模式。写时模式有利于提升查询性能,但是加载数据可能需要更多时间,在很多情况下加载模式尚未确定,因而查询未确定,所以不能决定使用何种索引,这种情况正好适合Hive的读时模式。
2 数据处理
Hive处理数据流程如图1所示。
图1 气象数据处理流程
(1)数据导入部分。将需要进行分析处理的气象数据导入Hive表中,Hive是读时模式加载数据非常快,并且在加载过程中并不对数据进行验证,对于Hive的数据加载而言,该过程仅仅是文件的复制或移动[4]。Hive的存储格式一般分为面向行和面向列的存储,面向行的存储意味着同一行中的字段作为顺序文件的一条记录被存储在一起,面向列的存储表示按列来记录文件,这种方式可以使一个查询跳过那些不必访问的列从而节省时间消耗。
(2)数据底层存储部分。导入数据后,在形式上是将数据导入Hive表中,但是导入的数据真正的存放地是HDFS,每个表可能占用多个HDFS块,也即表中的数据可能存放在集群中若干个节点之上。
(3)查询处理部分。在Hive shell中输入HQL语句,Hive shell会将该查询语句转化为一个MapReduce程序作业并为人们在集群中执行该作业[4]。如果待处理的源气象数据格式不是人们期望处理的格式,则人们可以编写UDF将源数据进行预处理从而得到人们期望处理的数据格式(UDF(user-defined function)即用户定义函数)。Hive可以方便插入用户写的处理代码并在查询中调用它们[4]。由此可以看出,利用Hive执行任务的效率低于直接用MapReduce程序执行任务,但是Hive给广大用户提供了最宝贵的SQL接口,并且避免了编写繁琐的MapReduce程序。
(4)结果反馈部分。经过执行MapReduce作业,可以在控制台观察作业的处理过程,人们可以从控制台输出中得到很多信息,最后会在控制台显示处理结果。
在伪分布式Hadoop/Hive上对一小块样本数据进行处理的过程如下:
(1)op@h1:~$ hadoop fs -put /home/op/sample.txt /input/sample.txt //将样本数据从本地文件系统导入到HDFS分布式文件系统。
(2)op@h1:~$ hadoop fs -cat /input/sample.txt
1921 33 1
1922 23 2
1921 23 1
1932 12 2
1923 12 2
1932 33 2
1934 17 3
//导入完毕后可以在HDFS中查看到样本数据。
(3)hive> create table records(year string,temp int,quality int)
> row format delimited
> fields terminated by 't';//创建hive表records
(4)load data inpath '/input/sample.txt' into table records; //将样本数据从HDFS导入到records的Hive表。
(5)op@h1:~$ hadoop fs -ls /hive/warehouse/records
Found 1 items
-rw-r--r-- 1 op supergroup 50 2015-04-08 15:15 /hive/warehouse/records/sample.txt
//将hive的仓库目录设置在HDFS,所以将数据导入到Hive表之后,表最终还是存储在HDFS中。
(6)hive> select year,max(temp)
> from records
> where(quality=1 or quality=2)
> group by year;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
(7)2015-04-08 15:25:38,220 null map = 100%, reduce = 100%
Ended Job = job_local1530121749_0001
Execution completed successfully
Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
1921 33
1922 23
1923 12
1932 33
//样本数据导入到records表后,可以在Hive shell中查询,查询语言类似于SQL语言。可以看到Hive将SQL查询语言转化为一个MapReduce作业来执行。
3 实验及结果分析
3.1 实验环境
为了进行试验对比,本文将分别在两种环境下进行不同数据测试,一种是单机进行数据集测试,另一种是一个4个节点的集群,其中一个运行namenode进程的master节点和4个运行datanode进程的slave节点。
单机配置:处理器为英特尔第三代酷睿 i5-3470 @
3.20GHz 四核,内存为4G。集群4个节点的硬件配置和单机相同,集群中安装Ubuntu14.04操作系统,Hadoop版本为Hadoop2.2.0,并在master节点安装Hive,Hive版本为Hive-0.12.0(Hadoop版本和Hive版本要匹配以避免不必要的麻烦)
3.2 实验结果及分析
本实验中人们使用8份气象数据集,数据集大小分别为200MB、500MB、1 000MB、1 500MB、2 000MB、2 500MB、3 000MB,分别在单机和Hadoop集群中进行试验。实验结果如图2所示,纵轴为执行任务所需时间,单位为秒。
从实验结果可以看出,起初数据集小时Hadoop/Hive集群处理数据的效率不明显,甚至比单机处理所需时间更长,但是随着数据集的增大,集群处理效果开始显现,并且面对越大的数据集效率越高。
图2 不同大小数据集在两种环境下执行所需时间
4 结语
Hadoop/Hive集群具有很多优点,在处理超大规模数据时效率极高,并且对于集群中的节点硬件配置没有太高要求,尤其是Hive支持SQL接口,可以让熟悉SQL语言的用户更加方便地适用Hadoop。不可避免地,Hadoop/Hive集群也有一些劣势,比如处理小数据集时效果不佳、Hive不支持in的子查询等。总体而言,利用Hadoop/Hive集群处理大数据集可以带来无可比拟的优势,具有极高的实用价值。
参考文献:
[1] 朱珠.基于Hadoop的海量数据处理模型研究和应用[D].北京:北京邮电大学, 2008.
[2] 王宏宇.Hadoop平台在云计算中的应用[J].软件,2011,32(4):3638.
[3] 刘永增,张晓景,李先毅.基于hadoop/hive的web日志分析系统的设计[J].广西大学学报:自然科学版,2011,36(1):168173.
[4] TOM WHITE.hadoop权威指南[M].华东师范大学数据科学与工程学院,译.北京:清华大学出版社,2015.
(责任编辑:孙 娟)
随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/22 10:38:22