赞
踩
安装环境与前提:
1.三台虚拟机,已经进行了映射关系建立(/etc/hosts目录)
2.Hadoop集群已经完成安装
3.主节点(node1)MySQL环境安装完成
若上方工作未完成,请移步我之前的文章进行安装。
ps:并不需要zookeeper和ha高可用集群,有也不影响。
关于hive与hadoop版本的兼容性问题: Downloadsdhttps://hive.apache.org/downloads.html在下载页面有相关的描述
这里本人的hadoop版本为3.1.4,于是选择hive3.1.2,这里去国内镜像下载速度更快。
将文件下载后上传到服务器,解压
tar -xzvf apache-hive-3.1.2-bin.tar.gz -C ../servers/
配置集群的环境文件
- vi /etc/profile
- 2. 在最后添加如下内容
- 3. #HIVE环境变量配置
- 4. export HIVE_HOME=/export/servers/apache-hive-3.1.3-bin/
- 5. export PATH=$PATH:$HIVE_HOME/bin
- 6.
- 7. 保存退出,并使环境变量起作用
- 8. source /etc/profile
如果没有替换guava,会出现
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
Hadoop的guava在hadoop-3.1.4/share/hadoop/common/lib下
先删除hive的lib路径下的guava 然后发送hadoop到hive/lib路径下即可
scp guava-27.0-jre.jar /export/servers/apache-hive-3.1.3-bin/lib/
默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许⼀个会话连接,只适合简单的测试。实际⽣产环境中不适⽤, 为了⽀持多⽤户会话,则需要⼀个独⽴的元数据库,使⽤ MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的⽀持。内置的derby主要问题是并发性能很差,可以理解为单线程操作。
首先要安装MySQL环境,安装过程可移步个人博客:
https://blog.csdn.net/m0_52940881/article/details/128218389?spm=1001.2014.3001.5501
安装完成后,要在hive的lib文件夹中上传MySQL jdbc的连接驱动
进入hive的conf文件夹下
使用命令
- 1. cp hive-default.xml.template hive-site.xml
- 然后在添加如下内容:
- 1. <configuration>
- 2. <!-- WARNING!!! This file is auto generated for documentation purposes ONLY! -->
- 3. <!-- WARNING!!! Any changes you make to this file will be ignored by Hive. -->
- 4. <!-- WARNING!!! You must make your changes in hive-site.xml instead. -->
- 5. <!-- Hive Execution Parameters -->
- 6. <!---->
- 7. <property>
- 8. <name>hive.exec.scratchdir</name>
- 9. <value>/hive/tmp</value>
- 10. </property>
- 11. <!--Hive作业的HDFS根目录创建写权限 -->
- 12. <property>
- 13. <name>hive.scratch.dir.permission</name>
- 14. <value>733</value>
- 15. </property>
- 16. <!--hdfs上hive工作位置 -->
- 17. <property>
- 18. <name>hive.metastore.warehouse.dir</name>
- 19. <value>/hive/warehouse</value>
- 20. </property>
- 21. <!--连接数据库地址,名称 -->
- 22. <property>
- 23. <name>javax.jdo.option.ConnectionURL</name>
- 24. <value>jdbc:mysql://虚拟机的名:3306/metastore?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8</value>
- 25. </property>
- 26. <!--连接数据库驱动 -->
- 27. <property>
- 28. <name>javax.jdo.option.ConnectionDriverName</name>
- 29. <value>com.mysql.cj.jdbc.Driver</value>
- 30. </property>
- 31. <!--连接数据库用户名称 -->
- 32. <property>
- 33. <name>javax.jdo.option.ConnectionUserName</name>
- 34. <value>用户名称</value>
- 35. </property>
- 36. <!--连接数据库用户密码 -->
- 37. <property>
- 38. <name>javax.jdo.option.ConnectionPassword</name>
- 39. <value>密码</value>
- 40. </property>
- 41. <!--客户端显示当前查询表的头信息 -->
- 42. <property>
- 43. <name>hive.cli.print.header</name>
- 44. <value>true</value>
- 45. </property>
- 46. <!--客户端显示当前数据库名称信息 -->
- 47. <property>
- 48. <name>hive.cli.print.current.db</name>
- 49. <value>true</value>
- 50. </property>
- 51. <!--元数据存储授权-->
- 52. <property>
- 53. <name>hive.metastore.event.db.notification.api.auth</name>
- 54. <value>false</value>
- 55. </property>
- 56. <!-- Hive 元数据存储版本的验证 -->
- 57. <property>
- 58. <name>hive.metastore.schema.verification</name>
- 59. <value>false</value>
- 60. </property>
- 61. <!-- 指定 hiveserver2 连接的 host -->
- 62. <property>
- 63. <name>hive.server2.thrift.bind.host</name>
- 64. <value>node1</value>
- 65. </property>
- 66. <!-- 指定 hiveserver2 连接的端口号 -->
- 67. <property>
- 68. <name>hive.server2.thrift.port</name>
- 69. <value>10000</value>
- 70. </property>
- 71. </configuration>
- 1. create database metastore;
- 2. quit;
- 3. 之后初始化hive元数据库
- 4. schematool -initSchema -dbType mysql -verbose
- 1. <property>
- 2. <name>hive.metastore.uris</name>
- 3. <value>thrift://node1:9083</value>
- 4. </property>
然后前台启动metastore服务
hive --service metastore
- 1. <!-- 指定 hiveserver2 连接的 host -->
- 2. <property>
- 3. <name>hive.server2.thrift.bind.host</name>
- 4. <value>node1</value>
- 5. </property>
- 6. <!-- 指定 hiveserver2 连接的端口号 -->
- 7. <property>
- 8. <name>hive.server2.thrift.port</name>
- 9. <value>10000</value>
- 10. </property>
若出现以下错误
User: root is not allowed to impersonate root (state=08S01,code=0)
在 hadoop的core-site.xml配置文件 中添加如下部分,重启服务即可:
- 1. <property>
- 2. <name>hadoop.proxyuser.root.hosts</name>
- 3. <value>*</value>
- 4. </property>
- 5. <property>
- 6. <name>hadoop.proxyuser.root.groups</name>
- 7. <value>*</value>
- 8. </property>
启动和关闭hive服务需要运行两次代码,很麻烦,因此我们编写一个启停脚本。
在hive的bin目录下 运行
vim hive-script.sh
输入以下内容
- #!/bin/bash
- HIVE_LOG_DIR=$HIVE_HOME/logs
- if [ ! -d $HIVE_LOG_DIR ]
- then
- mkdir -p $HIVE_LOG_DIR
- fi
- #检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
- function check_process()
- {
- pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
- ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
- echo $pid
- [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
- }
- function hive_start()
- {
- metapid=$(check_process HiveMetastore 9083)
- cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
- [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
- server2pid=$(check_process HiveServer2 10000)
- cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
- [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
- }
- function hive_stop(){
- metapid=$(check_process HiveMetastore 9083)
- [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
- server2pid=$(check_process HiveServer2 10000)
- [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
- }
- case $1 in
- "start")
- hive_start
- ;;
- "stop")
- hive_stop
- ;;
- "restart")
- hive_stop
- sleep 2
- hive_start
- ;;
- "status")
- check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行正常" || echo "Metastore 服务运行异常"
- check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运行正常" || echo "HiveServer2 服务运行异常"
- ;;
- *)
- echo Invalid Args!
- echo 'Usage: '$(basename $0)' start|stop|restart|status'
- ;;
- esac
保存脚本后,为脚本添加运行权限
chmod +x hive-script.sh
⽤脚本启动、停⽌、重启、检测运⾏状态的命令分别为:
- 1. hive-script.sh start
- 2. hive-script.sh stop
- 3. hive-script.sh restart
- 4. hive-script.sh status
之后就可以通过binline,或直接输入hive 进入hiveshell了。
binline:
这里启动binline和hiv要先等hive程序启动完毕后启动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。