基于 hive 的日志数据统计实战
一、 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 请参考这里 :
http://wiki.apache.org/hadoop/Hive
官方主页在这里:
http://hadoop.apache.org/hive/
hive-0.5.0 源码包和二进制发布包的下载地址
http://labs.renren.com/apache-mirror/hadoop/hive/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、 下载最新版本发布包 hive-0.5.0-dev.tar.gz ,传到 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 将在本地创建