Hive安装地址
- Hive官网地址
http://hive.apache.org/ - 文档查看地址
https://cwiki.apache.org/confluence/display/Hive/GettingStarted - 下载地址
http://archive.apache.org/dist/hive/ - github地址
https://github.com/apache/hive 
Hive安装部署
Hive安装及配置
- 把apache-hive-1.2.1-bin.tar.gz上传到linux的/opt/software目录下
 - 解压apache-hive-1.2.1-bin.tar.gz到/opt/module/目录下面
 
1  | [root@hadoop102 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/  | 
- 修改apache-hive-1.2.1-bin.tar.gz的名称为hive
 
1  | [root@hadoop102 module]$ mv apache-hive-1.2.1-bin/ hive  | 
- 修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh
 
1  | [root@hadoop102 conf]$ mv hive-env.sh.template hive-env.sh  | 
- 配置hive-env.sh文件
 
1  | 配置HADOOP_HOME路径  | 
1  | 配置HIVE_CONF_DIR路径  | 
Hadoop集群配置
- 必须启动hdfs和yarn
 
1  | [root@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh  | 
- 在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写
 
1  | [root@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir /tmp  | 
1  | [root@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /tmp  | 
- Hive基本操作
 
1  | 启动hive  | 
1  | 查看数据库  | 
1  | 打开默认数据库  | 
1  | 显示default数据库中的表  | 
1  | 创建一张表  | 
1  | 显示数据库中有几张表  | 
1  | 查看表的结构  | 
1  | 向表中插入数据  | 
1  | 查询表中数据  | 
1  | 退出hive  | 
将本地文件导入Hive案例
需求
将本地/opt/module/datas/student.txt这个目录下的数据导入到hive的student(id int, name string)表中
数据准备
在/opt/module/datas这个目录下准备数据
1  | 在/opt/module/目录下创建datas  | 
1  | 在/opt/module/datas/目录下创建student.txt文件并添加数据,注意以tab键间隔。  | 
Hive实际操作
- 启动Hive
 
1  | [root@hadoop102 hive]$ bin/hive  | 
- 显示数据库
 
1  | hive> show databases;  | 
- 使用default数据库
 
1  | hive> use default;  | 
- 显示default数据库中的表
 
1  | hive> show tables;  | 
- 删除已创建的student表
 
1  | hive> drop table student;  | 
- 创建student表, 并声明文件分隔符’\t’
 
1  | hive> create table student(id int, name string) row format delimited fields terminated by '\t';  | 
- 加载/opt/module/datas/student.txt 文件到student数据库表中。
 
1  | hive> load data local inpath '/opt/module/datas/student.txt' into table student;  | 
- Hive查询结果
 
1  | hive> select * from student;  | 
遇到的问题
再打开一个客户端窗口启动hive,会产生java.sql.SQLException异常1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException:
 Unable to instantiate
 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:86)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132)
        at
原因是,Metastore默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore;
安装MySql
Hive元数据配置到MySql
驱动拷贝
- 在/opt/software/mysql-libs目录下解压mysql-connector-java-5.1.27.tar.gz驱动包
 
1  | [root@hadoop102 mysql-libs]# tar -zxvf mysql-connector-java-5.1.27.tar.gz  | 
- 拷贝/opt/software/mysql-libs/mysql-connector-java-5.1.27目录下的mysql-connector-java-5.1.27-bin.jar到/opt/module/hive/lib/
 
1  | [root@hadoop102 mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/  | 
配置Metastore到MySql
- 在/opt/module/hive/conf目录下创建一个hive-site.xml
 
1  | [root@hadoop102 conf]$ touch hive-site.xml  | 
- 根据官方文档配置参数,拷贝数据到hive-site.xml文件中
 
1  | <?xml version="1.0"?>  | 
- 配置完毕后,如果启动hive异常,可以重新启动虚拟机。(重启后,别忘了启动hadoop集群)
 
多窗口启动Hive测试
- 先启动MySQL
 
1  | [root@hadoop102 mysql-libs]$ mysql -uroot -p  | 
查看有几个数据库
1  | mysql> show databases;  | 
- 再次打开多个窗口,分别启动hive
 
1  | [root@hadoop102 hive]$ bin/hive  | 
- 启动hive后,回到MySQL窗口查看数据库,显示增加了metastore数据库
 
1  | mysql> show databases;  | 
HiveJDBC访问
启动hiveserver2服务
1  | [root@hadoop102 hive]$ bin/hiveserver2  | 
启动beeline
1  | [root@hadoop102 hive]$ bin/beeline  | 
连接hiveserver2
1  | beeline> !connect jdbc:hive2://hadoop102:10000(回车)  | 
Hive常用交互命令
1  | [root@hadoop102 hive]$ bin/hive -help  | 
- “-e”不进入hive的交互窗口执行sql语句
 
1  | [root@hadoop102 hive]$ bin/hive -e "select id from student;"  | 
- “-f”执行脚本中sql语句
 
1  | 在/opt/module/datas目录下创建hivef.sql文件  | 
1  | 执行文件中的sql语句  | 
1  | 执行文件中的sql语句并将结果写入文件中  | 
其他命令操作
- 退出hive窗口:
 
1  | hive(default)>exit;  | 
在新版的hive中没区别了,在以前的版本是有的:
exit:先隐性提交数据,再退出;
quit:不提交数据,退出;
- 在hive cli命令窗口中如何查看hdfs文件系统
 
1  | hive(default)>dfs -ls /;  | 
- 在hive cli命令窗口中如何查看本地文件系统
 
1  | hive(default)>! ls /opt/module/datas;  | 
- 查看在hive中输入的所有历史命令
 
1  | [root@hadoop102 ~]$ cat .hivehistory  | 
Hive常见属性配置
Hive数据仓库位置配置
- Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下。
 - 在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。
 - 修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)
 
1  | <property>  | 
查询后信息显示配置
- 在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。
 
1  | <property>  | 
- 重新启动hive,对比配置前后差异。
 

Hive运行日志信息配置
- Hive的log默认存放在/tmp/root/hive.log目录下(当前用户名下)
 - 修改hive的log存放日志到/opt/module/hive/logs
 
1  | 修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为hive-log4j.properties  | 
1  | 在hive-log4j.properties文件中修改log存放位置  | 
参数配置方式
- 查看当前所有的配置信息
 
1  | hive>set;  | 
- 参数的配置三种方式
 
1  | 配置文件方式  | 
1  | 命令行参数方式  | 
1  | 参数声明方式  | 
上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。
