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相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。