hive简介
hive是一个基于hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于hadoop文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用HQL(类SQL)语言对这些数据进行自动化管理和处理。我们可以把hive中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在HDFS中的。Hive经过对语句进行解析和转换,最终生成一系列基于hadoop的map/reduce任务,通过执行这些任务完成数据处理。
Hive诞生于facebook的日志分析需求,面对海量的结构化数据,hive以较低的成本完成了以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,应用开发灵活而高效。
Hive自2009.4.29发布第一个官方稳定版0.3.0至今,不过一年的时间,正在慢慢完善,网上能找到的相关资料相当少,尤其中文资料更少,本文结合业务对hive的应用做了一些探索,并把这些经验做一个总结,所谓前车之鉴,希望读者能少走一些弯路。
Hive的官方wiki请参考这里:
官方主页在这里:
hive-0.5.0源码包和二进制发布包的下载地址
二、部署
由于Hive是基于hadoop的工具,所以hive的部署需要一个正常运行的hadoop环境。以下介绍hive的简单部署和应用。
部署环境:
操作系统:Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
Hadoop:hadoop-0.20.2,正常运行
部署步骤如下:
1、下载最新版本发布包,传到hadoop的namenode节点上,解压得到hive目录。假设路径为:/opt/hadoop/hive-0.5.0-bin
2、设置环境变量HIVE_HOME,指向hive根目录/opt/hadoop/hive-0.5.0-bin。由于hadoop已运行,检查环境变量JAVA_HOME和HADOOP_HOME是否正确有效。
3、切换到$HIVE_HOME目录,hive配置默认即可,运行bin/hive即可启动hive,如果正常启动,将会出现“hive>”提示符。
4、在命令提示符中输入“show tables;”,如果正常运行,说明已部署成功,可供使用。
常见问题:
1、执行“show tables;”命令提示“FAILED: Error in metadata: java.lang.IllegalArgumentException: URI: does not have a scheme”,这是由于hive找不到存放元数据库的数据库而导致的,修改conf/hive-default.xml配置文件中的hive.metastore.local为true即可。由于hive把结构化数据的元数据信息放在第三方数据库,此处设置为true,hive将在本地创建derby数据库用于存放元数据。当然如果有需要也可以采用mysql等第三方数据库存放元数据,不过这时hive.metastore.local的配置值应为false。
2、如果你已有一套nutch1.0系统正在跑,而你不想单独再去部署一套hadoop环境,你可以直接使用nutch1.0自带的hadoop环境,但这样的部署会导致hive不能正常运行,提示找不到某些方法。这是由于nutch1.0使用了commons-lang-2.1.jar这个包,而hive需要的是commons-lang-2.4.jar,下载一个2.4版本的包替换掉2.1即可,nutch和hive都能正常运行。
三、应用场景
本文主要讲述使用hive的实践,业务不是关键,简要介绍业务场景,本次的任务是对搜索日志数据进行统计分析。
集团搜索刚上线不久,日志量并不大。这些日志分布在5台前端机,按小时保存,并以小时为周期定时将上一小时产生的数据同步到日志分析机,统计数据要求按小时更新。这些统计项,包括关键词搜索量pv,类别访问量,每秒访问量tps等等。
基于hive,我们将这些数据按天为单位建表,每天一个表,后台脚本根据时间戳将每小时同步过来的5台前端机的日志数据合并成一个日志文件,导入hive系统,每小时同步的日志数据被追加到当天数据表中,导入完成后,当天各项统计项将被重新计算并输出统计结果。
以上需求若直接基于hadoop开发,需要自行管理数据,针