@BrandonLin
2016-07-30T10:38:33.000000Z
字数 2634
阅读 4144
Hive
Hadoop
Hive是由Facebook最初开发的基于Hadoop的数据仓库工具,提供了类SQL的查询语言Hive SQL(HQL)。
在内部,Hive将用户的SQL语句转化为一系列的MapReduce作业,并提交到集群中运行。
在Hive中,数据通过表来组织,提供了一种将表结构附加(attaching)到HDFS中的数据的一种方式。诸如表的Schema等元数据存放在一个称为metastore的数据库中。默认情况下,metastor存放在本地,但是可以配置在远程共享,这通常在生成环境中使用。
Hive总体架构如下:
下载稳定版本,留意与Hadoop版本的兼容:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.0.0/apache-hive-2.0.0-bin.tar.gz
tar -zxvf apache-hive-2.0.0-bin.tar.gz
mv apache-hive-2.0.0-bin /home/hive-2.0.0
vim /etc/profile
export HIVE_HOME=/home/hive-2.0.0
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
创建数据库用作metastore:
create database hive;
hive-site.xml
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.132:3306/hive?characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>yourpasssword</value>
</property>
</configuration>
把MySQL JDBC驱动上传到hive的lib目录下。
初始化:
schematool -initSchema -dbType mysql
启动Hive:
% hive
Hive的配置文件采用类似于Hadoop的XML格式,为$HIVE_HOME/conf/hive-site.xml。配置文件目录可以通过运行时参数--config或者HIVE_CONF_DIR环境变量来修改。
会话(session)级别的参数可以在运行hive命令时使用-hiveconf指定。在Hive交互式窗口使用SET也可以设置参数。因此Hive参数有如下4级:
Hive默认使用MapReduce作为执行引擎,对Apache Tez和Spark的支持也正在进行中。后两者都是通用的DAG引擎,在性能上比MapReduce有较大的改善。执行引擎通过hive.execution.engine
属性来配置,默认为mr,代表MapReduce。可以在每次会话时设置引擎,例如:
hive> SET hive.execution.engine=tez;
(注意Tez首先要安装在Hadoop集群上)。
在Hive2中,已经不推荐使用MapReduce作为执行引擎,因此经常会收到一些警告信息。推荐Spark或者Tez作为执行引擎。
默认情况下,hive的错误日志保存在```{user.name}/hive.log目录下,java.io.tmpdir通常是/tmp。也可以在启动hive的时候设置:
hive -hiveconf hive.log.dir='/tmp/${user.name}'
日志配置在HIVE_HOME/comg/hive-log4j.properties.修改该文件可以配置日志相关参数,也可以在启动的时候设置气质参数:
hive -hiveconf hive.root.logger=DEBUG,console
create table records(year string , temperature int ,quality int) row format delimited fields terminated by '\t'
成功之后,我们可以在mysql的元数据中看到这个表的信息,在hive.TBLS表中:
将HDFS的文件导入Hive:
load data inpath "/input/ncdc/micro-tab/sample.txt"
overwrite into table records;
在/user/hive/warehouse目录下可以看到下面的文件:
Hive跟语法跟MySQL非常像,如下查询表中所有数据:
select * from records;
来一个分组查询:
select year , max(temperature)
from records
where temperature != 9999 and quality in ( 0,1,4,5,9)
group by year;
可以看到Hive启动了一个MapReduce作业,计算得到最终结果。YARN管理界面可以看到该作业:
启动HiveServer2
hiveserver2
此时在默认的10020端口可以访问的hive界面: