Hive由Facebook开源,用于解决海量结构化日志的数据统计。它是基于Hadoop的几个数据仓库工具,可以将结构化的数据映射成一张表,并提供类SQL查询功能。本质是将HQL(类SQL)转化成MapReduce程序。Hive其实是一个客户端,所以安装到一个机器即可(类似于部署网站)。是一种分析工具不是存储(和HBase不一样),HDFS存储。
Hive优势:Hive执行延迟比较高(本质MapReduce),适合大数据,实时性要求高的不适合。Hive支持自定义函数。
Hive缺点:HQL表达能力有限,迭代式算法无法实现(第一次计算结果作为第二次计算结果,MR需要串联,很难做到),数据挖掘不擅长。Hive自动生成的MapReduce作业通常不够智能化。Hive调优比较困难,粒度较粗。
体系架构
Hive架构图如下图:
Meta Store使用的是Apache的Derby数据库(单用户模式),该数据库可以用MySQL代替。
安装与配置
-
下载apache-hive-1.2.1.tar.gz文件,解压。
-
配置HIVE_HOME环境变量,并修改PATH变量。
-
修改conf目录下的hive-env.sh文件。例如:
HADOOP_HOME=/usr/local/hadoop-2.7.6 HIVE_CONF_DIR=/usr/local/hive-1.2.1/conf
-
修改conf目录下的hive-site.xml配置文件。例如:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value><!--指定数据存放路径,这是HDFS路径,这是默认值--> </property> <property> <name>hive.cli.print.header</name> <value>true</value><!--命令行打印列头,默认false--> </property> <property> <name>hive.cli.print.current.db</name> <value>true</value><!--打印数据库名称,默认为false--> </property> </configuration>
hadoop fs -chmod g+w /user/hive/warehouse # 设置组有写权限
-
修改运行日志存放位置,默认在/tmp/username/hive.log(Linux本地路径)下。在conf目录编辑hive-log4j.properties,如下:
hive.log.dir=/usr/local/hive-1.2.1/logs
-
启动HDFS和YARN,Zookeeper也可以启动,有人用startcluster.sh命令启动了上述三个。然后使用hive命令即可打开命令行模式,和MySQL命令行模式类似。常用命令:
hive # hive -hiveconf propertyname=value;,进去之后也可以set propertyname=value; show databases; create table tbname(id int, name string);