当前位置:   article > 正文

HIVE的安装与配置_虚拟机‘node1还原到hive环境参考

虚拟机‘node1还原到hive环境参考

安装环境与前提:

        1.三台虚拟机,已经进行了映射关系建立(/etc/hosts目录)

        2.Hadoop集群已经完成安装

        3.主节点(node1)MySQL环境安装完成

      

 若上方工作未完成,请移步我之前的文章进行安装。

ps:并不需要zookeeper和ha高可用集群,有也不影响。

1.下载

关于hive与hadoop版本的兼容性问题: Downloads​​​​​​​dhttps://hive.apache.org/downloads.html在下载页面有相关的描述

这里本人的hadoop版本为3.1.4,于是选择hive3.1.2,这里去国内镜像下载速度更快。

Index of /apache/hive

2.安装

将文件下载后上传到服务器,解压

tar -xzvf apache-hive-3.1.2-bin.tar.gz -C ../servers/

    配置集群的环境文件

 

  1. vi /etc/profile
  2. 2. 在最后添加如下内容
  3. 3. #HIVE环境变量配置
  4. 4. export HIVE_HOME=/export/servers/apache-hive-3.1.3-bin/
  5. 5. export PATH=$PATH:$HIVE_HOME/bin
  6. 6.
  7. 7. 保存退出,并使环境变量起作用
  8. 8. source /etc/profile

 3.替换hive中低版本的guava

如果没有替换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/

3.元数据库更换为MySQL

默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许个会话连接,只适合简单的测试。实际产环境中不适 为了持多户会话,则需要个独的元数据库,使 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的持。内置的derby主要问题是并发性能很差,可以理解为单线程操作。

3.1MySQL环境安装

首先要安装MySQL环境,安装过程可移步个人博客:

    https://blog.csdn.net/m0_52940881/article/details/128218389?spm=1001.2014.3001.5501

3.2连接驱动上传

安装完成后,要在hivelib文件夹中上传MySQL jdbc的连接驱动

 3.3 修改hive配置文件

进入hive的conf文件夹下

 使用命令

  1. 1. cp hive-default.xml.template hive-site.xml
  2. 然后在添加如下内容:
  3. 1. <configuration>
  4. 2. <!-- WARNING!!! This file is auto generated for documentation purposes ONLY! -->
  5. 3. <!-- WARNING!!! Any changes you make to this file will be ignored by Hive. -->
  6. 4. <!-- WARNING!!! You must make your changes in hive-site.xml instead. -->
  7. 5. <!-- Hive Execution Parameters -->
  8. 6. <!---->
  9. 7. <property>
  10. 8. <name>hive.exec.scratchdir</name>
  11. 9. <value>/hive/tmp</value>
  12. 10. </property>
  13. 11. <!--Hive作业的HDFS根目录创建写权限 -->
  14. 12. <property>
  15. 13. <name>hive.scratch.dir.permission</name>
  16. 14. <value>733</value>
  17. 15. </property>
  18. 16. <!--hdfs上hive工作位置 -->
  19. 17. <property>
  20. 18. <name>hive.metastore.warehouse.dir</name>
  21. 19. <value>/hive/warehouse</value>
  22. 20. </property>
  23. 21. <!--连接数据库地址,名称 -->
  24. 22. <property>
  25. 23. <name>javax.jdo.option.ConnectionURL</name>
  26. 24. <value>jdbc:mysql://虚拟机的名:3306/metastore?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true&amp;serverTimezone=GMT%2B8</value>
  27. 25. </property>
  28. 26. <!--连接数据库驱动 -->
  29. 27. <property>
  30. 28. <name>javax.jdo.option.ConnectionDriverName</name>
  31. 29. <value>com.mysql.cj.jdbc.Driver</value>
  32. 30. </property>
  33. 31. <!--连接数据库用户名称 -->
  34. 32. <property>
  35. 33. <name>javax.jdo.option.ConnectionUserName</name>
  36. 34. <value>用户名称</value>
  37. 35. </property>
  38. 36. <!--连接数据库用户密码 -->
  39. 37. <property>
  40. 38. <name>javax.jdo.option.ConnectionPassword</name>
  41. 39. <value>密码</value>
  42. 40. </property>
  43. 41. <!--客户端显示当前查询表的头信息 -->
  44. 42. <property>
  45. 43. <name>hive.cli.print.header</name>
  46. 44. <value>true</value>
  47. 45. </property>
  48. 46. <!--客户端显示当前数据库名称信息 -->
  49. 47. <property>
  50. 48. <name>hive.cli.print.current.db</name>
  51. 49. <value>true</value>
  52. 50. </property>
  53. 51. <!--元数据存储授权-->
  54. 52. <property>
  55. 53. <name>hive.metastore.event.db.notification.api.auth</name>
  56. 54. <value>false</value>
  57. 55. </property>
  58. 56. <!-- Hive 元数据存储版本的验证 -->
  59. 57. <property>
  60. 58. <name>hive.metastore.schema.verification</name>
  61. 59. <value>false</value>
  62. 60. </property>
  63. 61. <!-- 指定 hiveserver2 连接的 host -->
  64. 62. <property>
  65. 63. <name>hive.server2.thrift.bind.host</name>
  66. 64. <value>node1</value>
  67. 65. </property>
  68. 66. <!-- 指定 hiveserver2 连接的端口号 -->
  69. 67. <property>
  70. 68. <name>hive.server2.thrift.port</name>
  71. 69. <value>10000</value>
  72. 70. </property>
  73. 71. </configuration>

3.4 MySQL创建hive元数据库

  1. 1. create database metastore;
  2. 2. quit;
  3. 3. 之后初始化hive元数据库
  4. 4. schematool -initSchema -dbType mysql -verbose

4.远程模式部署hive的metastore服务

4.1修改hive-site.xml

  1. 1. <property>
  2. 2. <name>hive.metastore.uris</name>
  3. 3. <value>thrift://node1:9083</value>
  4. 4. </property>

然后前台启动metastore服务

hive --service metastore

4.2使⽤BeeLine CLI连接metastore服务

  1. 1. <!-- 指定 hiveserver2 连接的 host -->
  2. 2. <property>
  3. 3. <name>hive.server2.thrift.bind.host</name>
  4. 4. <value>node1</value>
  5. 5. </property>
  6. 6. <!-- 指定 hiveserver2 连接的端口号 -->
  7. 7. <property>
  8. 8. <name>hive.server2.thrift.port</name>
  9. 9. <value>10000</value>
  10. 10. </property>

若出现以下错误
User: root is not allowed to impersonate root (state=08S01,code=0)
hadoopcore-site.xml配置文件 中添加如下部分,重启服务即可:

  1. 1. <property>
  2. 2. <name>hadoop.proxyuser.root.hosts</name>
  3. 3. <value>*</value>
  4. 4. </property>
  5. 5. <property>
  6. 6. <name>hadoop.proxyuser.root.groups</name>
  7. 7. <value>*</value>
  8. 8. </property>

4.3编写hive启动脚本

启动和关闭hive服务需要运行两次代码,很麻烦,因此我们编写一个启停脚本。

在hive的bin目录下 运行

vim hive-script.sh

输入以下内容

  1. #!/bin/bash
  2. HIVE_LOG_DIR=$HIVE_HOME/logs
  3. if [ ! -d $HIVE_LOG_DIR ]
  4. then
  5. mkdir -p $HIVE_LOG_DIR
  6. fi
  7. #检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
  8. function check_process()
  9. {
  10. pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
  11. ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
  12. echo $pid
  13. [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
  14. }
  15. function hive_start()
  16. {
  17. metapid=$(check_process HiveMetastore 9083)
  18. cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
  19. [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
  20. server2pid=$(check_process HiveServer2 10000)
  21. cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
  22. [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
  23. }
  24. function hive_stop(){
  25. metapid=$(check_process HiveMetastore 9083)
  26. [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
  27. server2pid=$(check_process HiveServer2 10000)
  28. [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
  29. }
  30. case $1 in
  31. "start")
  32. hive_start
  33. ;;
  34. "stop")
  35. hive_stop
  36. ;;
  37. "restart")
  38. hive_stop
  39. sleep 2
  40. hive_start
  41. ;;
  42. "status")
  43. check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行正常" || echo "Metastore 服务运行异常"
  44. check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运行正常" || echo "HiveServer2 服务运行异常"
  45. ;;
  46. *)
  47. echo Invalid Args!
  48. echo 'Usage: '$(basename $0)' start|stop|restart|status'
  49. ;;
  50. esac

保存脚本后,为脚本添加运行权限

chmod +x hive-script.sh

脚本启动、停、重启、检测运状态的命令分别为:

  1. 1. hive-script.sh start
  2. 2. hive-script.sh stop
  3. 3. hive-script.sh restart
  4. 4. hive-script.sh status

之后就可以通过binline,或直接输入hive 进入hiveshell了。

binline:

  1. beeline -u 'jdbc:hive2://node1:10000' -n root

这里启动binline和hiv要先等hive程序启动完毕后启动。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/236356
推荐阅读
相关标签
  

闽ICP备14008679号