当前位置:   article > 正文

Hive数据仓库---Hive的安装与配置_hive数据仓库配置

hive数据仓库配置

1 Hive下载

Hive 官网地址:https://hive.apache.org/

下载地址:http://www.apache.org/dyn/closer.cgi/hive/

2 Hive安装与启动

2.1 Hive安装

  1. 把安装文件apache-hive-3.1.2-bin.tar.gz上传到master节点的/opt/software目

录下,执行以下命令把安装文件解压到/opt/app目录中

  1. cd /export/software
  2. tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
  1. 进入/opt/app目录,为目录apache-hive-3.1.2-bin建立软件链接

即输入hive就相当于输入apache-hive-3.1.2-bin,方便以后的shell命令

  1. cd /export/server
  2. ln -s apache-hive-3.1.2-bin hive
  1. vi命令编辑/etc/profile文件,添加环境变量

  1. #HIVE_HOME
  2. export HIVE_HOME=/export/server/apache-hive-3.1.2-bin
  3. export PATH=$PATH:$HIVE_HOME/bin

运行source命令,让修改后的配置文件生效

source /etc/profile
  1. 解决日志jar包冲突:改名称

mv -T $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
  1. 初始化元数据库

schematool -dbType derby -initSchema

报以下错误

Exception in thread "main" java.lang.NoSuchMethodError:
com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

原因是hadoop和hive的两个guava.jar版本不一致,两个jar位置分别位于下面两个目录:

  1. /export/server/hive/lib/guava-19.0.jar
  2. /export/server/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar

解决办法:

删除低版本的那个,将高版本的复制到低版本目录下。

  1. cd /export/server/hive/lib
  2. rm -f guava-19.0.jar
  3. cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /export/server/hive/lib

再次运行schematool -dbType derby -initSchema,即可成功初始化元数据库。

2.2 Hive启动

2.2.1 启动Hive

在命令窗口中输入以下命令启动hive:

hive

如果发生下面的报错

hive启动时报Exception in thread "main" java.lang.RuntimeException: java.net.ConnectExcepti on: Call From hadoop101/192.168.2.101 to hadoop101:9820 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

额,你忘了启动hadoop集群了,hive的运行是基于hadoop集群的

2.2.2 退出Hive

exit;

2.2.3 查看Hive的启动日志

Hive的日志存放在“/tmp/登录用户名”目录下,以root用户登录,则存放在/tmp/root目录下。

3 元数据库更换为MySQL

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

3.1 检查是否已安装MySQL

rpm -qa|grep mariadb

如果查找到内容则要卸载mariadb,没有查找到内容则可以开始安装mysql。

rpm -e --nodeps mariadb-libs

3.2 安装MySQL

注意一行一行的执行命令

  1. cd /export/software/mysql
  2. yum install -y numactl libaio net-tools
  3. rpm -ivh mysql-community-common-8.0.19-1.el7.x86_64.rpm
  4. rpm -ivh mysql-community-libs-8.0.19-1.el7.x86_64.rpm
  5. rpm -ivh mysql-community-client-8.0.19-1.el7.x86_64.rpm
  6. rpm -ivh mysql-community-server-8.0.19-1.el7.x86_64.rpm

3.3 修改MySQL默认密码

输入以命令运行MySQL

  1. systemctl start mysqld.service # 启动MySQL
  2. systemctl enable mysqld.service # 开机自启动

查找MySQL的默认密码

grep 'temporary password' /var/log/mysqld.log

用查找到的密码登录mysql

mysql -uroot -p'%:D%oc#1r:u.'

mysql登录成功后,执行以下命令修改root用户的登录密码为"%:D%oc#1r:u.",

让密码永不过期,

user 表中的 root 用户允许任意 ip 连接。

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Big_data20';
  2. ALTER USER 'root'@'localhost' IDENTIFIED BY 'Big_data20' PASSWORD EXPIRE NEVER;
  3. update mysql.user set host='%' where user='root';
  4. flush privileges;

3.4 配置Hive元数据保存到MySQL

3.4.1 下载 MySQL JDBC 驱动程序

为了让 Hive 能够连接到 MySQL 数据库,需要下载 MySQL JDBC 驱动程序。可以到MySQL 官网(

http://www.mysql.com/downloads/connector/j)下载mysql_connector-java-8.0.23.tar.gz。

3.4.2 安装JDBC驱动程序

从下载好的压缩包中解压出mysql-connector-java-8.0.23.jar,复制到/exprot/server/hive/lib 目录中。

  1. cd /export/server/mysql
  2. cp mysql-connector-java-8.0.23.jar /export/server/hive/lib

3.4.3 在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件

vi $HIVE_HOME/conf/hive-site.xml

添加如下内容

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- jdbc 连接的 URL -->
  5. <property>
  6. <name>javax.jdo.option.ConnectionURL</name>
  7. <value>jdbc:mysql://node7:3306/metastore?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characte
  8. rEncoding=utf8&amp;useSSL=true&amp;serverTimezone=GMT%2B8</value>
  9. </property>
  10. <!-- jdbc 连接的 Driver-->
  11. <property>
  12. <name>javax.jdo.option.ConnectionDriverName</name>
  13. <value>com.mysql.jdbc.Driver</value>
  14. </property>
  15. <!-- jdbc 连接的 username-->
  16. <property>
  17. <name>javax.jdo.option.ConnectionUserName</name>
  18. <value>root</value>
  19. </property>
  20. <!-- jdbc 连接的 password -->
  21. <property>
  22. <name>javax.jdo.option.ConnectionPassword</name>
  23. <value>Big_data20</value>
  24. </property>
  25. <!-- Hive 元数据存储版本的验证 -->
  26. <property>
  27. <name>hive.metastore.schema.verification</name>
  28. <value>false</value>
  29. </property>
  30. <!--元数据存储授权-->
  31. <property>
  32. <name>hive.metastore.event.db.notification.api.auth</name>
  33. <value>false</value>
  34. </property>
  35. <!-- Hive 默认在 HDFS 的工作目录 -->
  36. <property>
  37. <name>hive.metastore.warehouse.dir</name>
  38. <value>/user/hive/warehouse</value>
  39. </property>
  40. </configuration>

3.4.5登录MySQL

mysql -uroot -p'Big_data20'

解决中文乱码的问题,在/etc/my.cnf的末尾添加发下代码:

  1. character-set-server = utf8
  2. collation-server = utf8_general_ci
  3. init_connect='SET NAMES utf8'
  4. [client]
  5. default-character-set=utf8

若metastore数据库已创建,需要执行发下命令,若未创建可以忽略:

  1. alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
  2. alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
  3. alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
  4. alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
  5. alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

先登入mysql,后然创建Hive元数据库

  1. create database metastore;
  2. quit;

3.4.5 初始化Hive元数据库

schematool -initSchema -dbType mysql -verbose

3.4.6 再次启动Hive

hive

3.4.7测试Hive

在Hive命令行窗口中输入以下命令

  1. create table test (name string);
  2. insert into test values('john');
  3. select * from test;

注意:insert语句执行会很慢,时间可能会有几十秒,这是正常的

在HDFS上查看创建的表

4 使用元数据服务的方式访问 Hive

4.1 metastore三种配置方式

4.1.1内嵌模式

内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能有一个进程可以连接到数据库,适用于用来实验,不适用于生产环境。解压hive安装包 bin/hive 启动即可使用

缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。

4.1.2本地模式

本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server。本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个metastore服务。hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。本地模式下hive的配置主需要指定mysql的相关信息。

缺点:每启动一次hive服务,都内置启动了一个metastore。

4.1.3远程模式

远程模式下,需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。

4.2 远程模式部署hive的metastore服务

4.2.1 使用Hive CLI连接metastore服务

4.2.1.1 在 hive-site.xml 文件中添加如下配置信息
  1. <!-- 指定存储元数据要连接的地址 -->
  2. <property>
  3.     <name>hive.metastore.uris</name>
  4.     <value>thrift://node7:9083</value>
  5. </property>
4.2.1.2启动 metastore服务

前台启动:

hive --service metastore

注意: 该启动方式下,进程会一直占用shell终端前台。如果ctrl+c结束进程,则hive metastore服务也会同时关闭。

后台启动:

nohup hive --service metastore &

后台启动的情况下,如果想关闭metastore服务,使用jps查看进程,kill -9 进程号即可。

4.2.1.3启动Hive

前台启动需要打开一个新命令行窗口,后台启动不需要打开一个新的命令行窗口。用hive命令启动hive。

4.2.2 使用BeeLine CLI连接metastore服务

4.2.2.1在 hive-site.xml 文件中添加如下配置信息
  1. <!-- 指定存储元数据要连接的地址 -->
  2. <!-- 指定 hiveserver2 连接的 host -->
  3. <property>
  4.     <name>hive.server2.thrift.bind.host</name>
  5.     <value>node7</value>
  6. </property>
  7. <!-- 指定 hiveserver2 连接的端口号 -->
  8. <property>
  9.     <name>hive.server2.thrift.port</name>
  10.     <value>10000</value>
  11. </property>
4.2.2.2 启动metastore服务
nohup hive --service metastore &
4.2.2.3 启动 hiveserver2
nohup hive --service hiveserver2 &
4.2.2.4 启动 beeline 客户端(需要多等待一会)
beeline -u 'jdbc:hive2://node7:10000' -n root

若出现以下错误

User: root is not allowed to impersonate root (state=08S01,code=0)

在/export/server/hadoop-3.1.4/etc/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>

重启hadoop、metastore服务、hiveserver2服务,再次启动beeline 客户端就可以连接成功了。

4.2.3 编写Hive启动脚本

以上的方式启动、停止hive比较麻烦,下面编写一个Hive启动/停止脚本hive_script.sh,用于自动启停hive。

  1. cd /export/server/hive/bin
  2. vim hive-script.sh

脚本内容如下:

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

注意:hive --service hiveserver2启动较慢,启动后在用hive-script.sh status检测服务状态时要多等一会儿,否则报服务运行异常。

hive-script.sh脚本只是启动了metastore服务和hiveserver2服务,要运行hive命令还需要启beeline 客户端。

beeline -u 'jdbc:hive2://node7:10000' -n root

关于hive异常:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor

可能是你使用了metastore的远程模式,但是没有启动metastore服务导致,用通过重启metastore服务解决。

  1. 3台虚拟机重启后需要运行以下命令,重启hadoop和hive服务:
  2. 1. start-all.sh #启动hadoop服务
  3. 2. hive-script.sh start #启动metastore服务和HiveServer2服务
  4. 3. hive #启动hive
  5. 或运行beeline -u 'jdbc:hive2://node7:10000' -n root启动beeline客户端
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/614767
推荐阅读
相关标签
  

闽ICP备14008679号