Hive小结
首先需要搭建Hadoop,为了Hive能够使用HDFS,过程省略
Hive的搭建过程
1 | $ tar -zxvf hive-x.y.z.tar.gz |
设置环境变量:
1 | export HIVE_HOME=/to/the/hive/path |
Hive配置:
- hive-default.xml使用默认模板即可
- hive-env.sh使用默认模板,其中修改一下HADOOP_HOME的目录
- hive-log4j2.properties使用默认模板即可
- 重点配置hive-site.xml(注释很详细,不再赘述)
1 | <configuration> |
初始化元数据存储:
用mysql会遇到执行失败,一般报错是JDBC组件not found。解决方案是自己去下个mysql-connector-java-8.0.15.jar之类的mysql JDBC jar包放到$HIVE_HOME/lib里。
1 | $ schematool --dbType mysql --initSchema |
注意:
- Mysql中要创建相应配置的JDBC连接用户(如hive用户,也可以使用root用户)
1 | CREATE USER 'hive'@'%' IDENTIFIED BY 'password'; |
- Hiveserver1和Hiveserver2的JDBC区别:
HiveServer version | Connection URL | Driver Class |
---|---|---|
HiveServer2 | jdbc:hive2:// | org.apache.hive.jdbc.HiveDriver |
HiveServer1 | jdbc:hive:// | org.apache.hadoop.hive.jdbc.HiveDriver |
- JDBC连接前需要服务器开启hiveserver/hiveserver2服务才支持JDBC连接
1 | $ nohup hive --service hiveserver2 >> hiveserv.log 2>&1 & |
遇到的问题,有时候jdbc连接问题:
- 首先检查hive机是否已开启hiveserver服务
- 检查hiveserver端口是否被占用(默认为10000,经常被其他进程占用)
- jar包版本是否对应正确
- Driver Class是否对应hive版本正确
JDBC连接hive后,所有执行的命令相当于在hive机直接执行,特别注意文件导入hive表操作,文件应当在hive机
当Hive是EXTERNAL建表时候,命令执行后的meta信息保存在hive-site.xml指定的mysql或者derby中,数据保存在建表语句location指定的hdfs地址中。EXTERNAL建表无法truncate,但可以drop,drop会删除meta信息,但仍然不会删除hdfs中的内容,hdfs的内容仍需手动hadoop命令删除
metastore的使用方法
metastore可以meta server机器起,远程连接meta服务。
假设server1已经通过hive –service metastore -p 9803启动了metastore服务,server2的hive-site.xml只需配置如下,即可远程连接server1的metastore服务。当mysql+metastore为远程服务时可这样配置。
1 | <configuration> |
- 附录资料:
Mysql神器脚本:
1 | -- mysql.fix.utf8.sql |