Hive安装部署

环境准备:

现有hadoop集群信息如下:

node1node2node3
IP10.90.100.10110.90.100.10210.90.100.103
HDFSNameNodeDataNodeDataNodeDataNodeSecondaryNameNode
YARNNodeManagerResourcemanagerNodeManagerNodeManager

jdk版本:1.8.0_202

Hive是依赖于Hadoop集群的,因此在安装Hive之前,需要保证已经搭建好Hadoop集群环境。

本文以 hive 3.1.3为例,下载地址:

官 方:https://dlcdn.apache.org/hive/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
更多版本:https://archive.apache.org/dist/hive/

1. Hive的安装模式

Hive有3种安装模式,分别对应不同的应用场景。

hive元数据介绍

Metadata:

Metadata即元数据,元数据包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

Metastore:

Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

metastore三种配置方式:

metastore服务配置有3种模式:内嵌模式、本地模式、远程模式。

内嵌模式本地模式远程模式
Metastore单独配置、启动
Metadata存储介质DerbyMySQLMySQL
1.1 内嵌模式
  • 内嵌模式(Embedded Metastore)是metastore默认部署模式。此种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都嵌入在主HiveServer进程中,当启动HiveServer进程时,Derby和metastore都会启动。 不需要额外起Metastore服务。 但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。
  • 缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。

clipboard

1.2 本地模式
  • 本地模式(Local Metastore)下,Hive Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。 本地模式采用外部数据库来存储元数据,推荐使用MySQL。 hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。

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

    clipboard

1.3 远程模式

远程模式下,需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。

在生产环境中,建议用远程模式来配置Hive Metastore。

clipboard

在这种模式下,其他依赖Hive的软件都可以通过Metastore访问Hive。此时需要配置 hive.metastore.uris 参数来指定 metastore 服务运行的机器ip和端口,并且需要单独手动启动metastore服务。metastore服务可以配置多个节点上,避免单节点故障导致整个集群的hive client不可用。同时hive client配置多个metastore地址,会自动选择可用节点

2. 嵌入模式的安装部署

3. 本地模式的安装部署

本地模式需要采用 MySQL 数据库存储数据。MySQL 的安装方法这里不再介绍,请参考相关文档。本地模式还需要下载 MySQL 的 JDBC 驱动,且驱动的版本须是 5.1.43 以上,可在 MySQL官方下载。本文以MySQL8.4.2为例,采用的 MySQL 驱动文件名是 mysql-connector-j-8.4.2.jar

提示

Hive对元数据存储的MySQL数据库版本没有严格要求,只需要对应mysql驱动文件匹配即可。本文以MySQL8.4.2为例。

OpenEuler24.03安装MySQL8.4.2安装教程

jar包下载到Maven仓库下载:https://mvnrepository.com/

  1. 上传或下载hive安装包
[hadoop@node1 ~]$ ls
apache-hive-3.1.3-bin.tar.gz 
#可以看到hive已经下载完成

也可以把安装包上传到集群的namenode节点

  1. 解压 Hive压缩包到/opt/software目录
[hadoop@node1 ~]$ tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/software
[hadoop@node1 ~]$ ls /opt/software/
apache-hive-3.1.3-bin  
  1. 创建一个软链接以方便使用
[hadoop@node1 ~]$ cd /opt/software/
[hadoop@node1 software]$   ln -s /opt/software/apache-hive-3.1.3-bin/ hive
  1. 设置环境变量
[hadoop@node1 software]$ sudo vim /etc/profile

在打开的文件末尾增加如下的内容。

export HIVE_HOME=/opt/software/hive
export PATH=$HIVE_HOME/bin:$PATH

使环境变量生效

[hadoop@node1 software]$ source /etc/profile
  1. 在已经安装好的MySQL创建存放元数据的数据库
mysql>  CREATE DATABASE hive_metadata;  #这里以名称为hive_metadata的数据库为例
# 查看是否创建成功
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| hive_metadata      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)
#成功了就退出
mysql> exit;

6.创建并编辑配置文件

/opt/software/hive/conf目录下新建hive-site.xml文件:

[hadoop@node1 software]$ vim /opt/software/hive/conf/hive-site.xml

hive-site.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- jdbc连接的URL,IP地址给为MySQL数据库所在节点的IP,这里以IP是10.90.100.103为例 -->
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://10.90.100.103:3306/hive_metadata?useSSL=FALSE&amp;allowPublicKeyRetrieval=TRUE</value>
  </property>
<!--注意:在hive的jdbc连接中,  符号 & 要写成 &amp; 才不会报错-->

    
    
    <!-- jdbc连接的Driver-->
  <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.cj.jdbc.Driver</value>
  </property>
    
	<!-- jdbc连接的username-->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <!-- jdbc连接的password -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>Root@123456</value>
    </property>

    <!-- Hive默认在HDFS的工作目录 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
</configuration>

7.将 MySQL 驱动文件复制到 Hive 安装目录的 lib 下

[hadoop@node1 ~]$ ls
 mysql-connector-j-8.4.0.jar
[hadoop@node1 ~]$ cp mysql-connector-j-8.4.0.jar /opt/software/hive/lib/

8.初始化 MySQL

如果是首次安装,需要执行初始化命令schematool -dbType mysql -initSchema

[hadoop@node1 ~]$ schematool -dbType mysql -initSchema
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/software/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/software/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory]
2025-03-17 18:07:22,482 INFO  [main] conf.HiveConf (HiveConf.java:findConfigFile(187)) - Found configuration file file:/opt/software/apache-hive-3.1.3-bin/conf/hive-site.xml
2025-03-17 18:07:22,681 INFO  [main] tools.HiveSchemaHelper (HiveSchemaHelper.java:logAndPrintToStdout(117)) - Metastore connection URL:     jdbc:mysql://10.90.100.103:3306/hive_metadata?useSSL=FALSE&allowPublicKeyRetrieval=TRUE
Metastore connection URL:        jdbc:mysql://10.90.100.103:3306/hive_metadata?useSSL=FALSE&allowPublicKeyRetrieval=TRUE
2025-03-17 18:07:22,681 INFO  [main] tools.HiveSchemaHelper (HiveSchemaHelper.java:logAndPrintToStdout(117)) - Metastore Connection Driver :         com.mysql.cj.jdbc.Driver
Metastore Connection Driver :    com.mysql.cj.jdbc.Driver
2025-03-17 18:07:22,681 INFO  [main] tools.HiveSchemaHelper (HiveSchemaHelper.java:logAndPrintToStdout(117)) - Metastore connection User:    root
Metastore connection User:       root
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.mysql.sql
Initialization script completed
schemaTool completed
[hadoop@node1 ~]$ 

9.启动 Hive

确保 Hadoop 已经启动,然后运行下面的命令。

[hadoop@node1 ~]$ hive
which: no hbase in (/opt/module/mysql/bin:/opt/module/hive/bin:/opt/module/hadoop/jdk/bin:/opt/module/hive/bin:/opt/module/hadoop/jdk/bin:/opt/module/hadoop/jdk/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/hadoop/hadoop/bin:/opt/module/hadoop/hadoop/sbin:/home/hadoop/.local/bin:/home/hadoop/bin:/opt/module/hadoop/hadoop/bin:/opt/module/hadoop/hadoop/sbin:/opt/module/hadoop/hadoop/bin:/opt/module/hadoop/hadoop/sbin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Hive Session ID = 8ffba7ea-34e3-4dfd-87e7-ab873fed89d4

Logging initialized using configuration in jar:file:/opt/module/apache-hive-3.1.3-bin/lib/hive-common-3.1.3.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Hive Session ID = fa56cbac-8bdf-4be2-91aa-3e287189c644
hive> 

提示

如果如下的报错,说明当前的hive版本高于jdk1.8,将jdk版本降到jdk1.8即可解决

Exception in thread "main" java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to cla
ss java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of l
oader 'bootstrap') 

至此,hive本地模式已经安装完成。

hive建表验证

hive> show databases;
hive> show tables;
hive> create table stu(id int, name string);
hive> insert into stu values(1,"ss");
hive> select * from stu;

# 开启另一个窗口开启Hive(两个窗口都可以操作Hive,没有出现异常)
hive> show databases;
hive> show tables;
hive> select * from stu;

至此,Hive的本地模式部署就已经完成。

4. 远程模式的安装部署

Hive的metastore服务的作用是为Hive CLI或者Hiveserver2提供元数据访问接口

回顾本地模式:

在这里插入图片描述

该模式存在以下两个问题:

①嵌入式模式下,每个Hive CLI都需要直接连接元数据库,当Hive CLI较多时,数据库压力会比较大。
②每个客户端都需要用户元数据库的读写权限,元数据库的安全得不到很好的保证。

生产环境中,推荐使用远程模式。

在这里插入图片描述

部署远程模式配置:

1.首先,保证metastore服务的配置文件hive-site.xml中包含连接元数据库所需的以下参数

      <!-- jdbc连接的URL,IP地址给为MySQL数据库所在节点的IP,这里以IP是10.90.100.103为例 -->
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://10.90.100.103:3306/hive_metadata?useSSL=FALSE&amp;allowPublicKeyRetrieval=TRUE</value>
  </property>
    
    <!-- jdbc连接的Driver-->
  <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.cj.jdbc.Driver</value>
  </property>
    
	<!-- jdbc连接的username-->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <!-- jdbc连接的password -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>

2.其次,保证Hiveserver2和每个Hive CLI的配置文件hive-site.xml中包含访问metastore服务地址:

<!-- 指定metastore服务的地址 -->
<property>
	<name>hive.metastore.uris</name>
	<value>thrift://node1:9083</value>
</property>

注意:主机名需要改为metastore服务所在节点,端口号无需修改,metastore服务的默认端口就是9083

3.远程模式(独立服务模式)测试

① 将hive拷贝到node2

[hadoop@node1 ~]$ cd /opt/software/
[hadoop@node1 software]$ rsync -avz /opt/software/hive  /opt/software/apache-hive-3.1.3-bin node2:/opt/software/

② 在node1上启动metastore

#为了前台方便操作,把启动的metastore进程放到后台运行
[hadoop@node1 software]$ nohup hive --service metastore &
[1] 30478
[hadoop@node1 software]$ nohup: 忽略输入并把输出追加到 'nohup.out'

③ 查看启动情况

[hadoop@node1 software]$ jps -lm
2210 org.apache.hadoop.hdfs.server.datanode.DataNode
30628 sun.tools.jps.Jps -lm
1993 org.apache.hadoop.hdfs.server.namenode.NameNode
2668 org.apache.hadoop.yarn.server.nodemanager.NodeManager
30478 org.apache.hadoop.util.RunJar /opt/software/hive/lib/hive-metastore-3.1.3.jar org.apache.hadoop.hive.metastore.HiveMetaSt

通过输出结果,可以看到HiveMetaStore进程已经启动

④ 修改node2hive-site.xml文件,删除服务端相关代码,添加访问metastore服务地址

[hadoop@node2 ~]$ cd /opt/software/
[hadoop@node2 software]$ cd hive/conf/
[hadoop@node2 conf]$ vim  hive-site.xml

node2的hive-site.xml最终的内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

    <!-- 指定hiveserver2连接的host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node2</value>
   </property>

   <!-- 指定hiveserver2连接的端口号 -->
  <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
  </property>
  
  <!-- 指定metastore服务的地址 **( 关键配置 ) **-->
  <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node1:9083</value>
  </property>
</configuration>

⑤ node2启动hive


[hadoop@node2 conf]$ cd /opt/software/hive
[hadoop@node2 software]$ bin/hive 
which: no hbase in (/home/hadoop/bin:/opt/software/kafka/bin:/opt/software/zookeeper/bin:/opt/software/jdk/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/software/hadoop/bin:/opt/software/hadoop/sbin:/opt/software/flink-1.19.2/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/software/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/software/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Hive Session ID = c42d8f31-25c1-4508-aac3-3f33bc3ce75a

Logging initialized using configuration in jar:file:/opt/software/apache-hive-3.1.3-bin/lib/hive-common-3.1.3.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Hive Session ID = ec261935-a86e-493a-92f1-41bd5757ec17
hive> show tables;
OK
stu
Time taken: 0.359 seconds, Fetched: 1 row(s)
hive>

当关闭node1服务之后,node2就不能查询到数据库,因为设置了连接服务地址

至此,Hive的远程模式部署就已经完成。

5. hiveserver2服务 远程访问服务(选做)

基础的数据操作可以通过脚本方式由Hive客户端进行处理。若要开发应用程序,则需要使用Hive的JDBC驱动进行连接。Hive内置了HiveServer和HiveServer2服务器,两者都允许客户端使用多种编程语言进行连接,但是HiveServer不能处理多个客户端的并发请求,所以产生了HiveServer2。HiveServer2允许远程客户端使用各种编程语言向Hive提交请求并检索结果,支持多客户端并发访问和身份验证。HiveServer2拥有自己的CLI(Beeline)。Beeline是一个基于SQLLine的JDBC客户端。由于HiveServer2是Hive开发维护的重点,所以推荐使用Beeline。

HiveServer2拥有自己的CLI(Beeline)。Beeline是一个基于SQLLine的JDBC客户端。由于HiveServer2是Hive开发维护的重点,所以推荐使用Beeline。

Hive提供jdbc接口,为用户提供远程访问Hive数据的功能,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2

访问hadoop集群身份说明

在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问权限控制,所以此时需考虑一个问题:那就是访问Hadoop集群的用户身份是谁?是Hiveserver2的启动用户?还是客户端的登录用户?
答案是都有可能,具体是谁,由Hiveserver2的hive.server2.enable.doAs参数决定(默认开启),该参数的含义是是否启用Hiveserver2用户模拟的功能。若启用,则Hiveserver2会模拟成客户端的登录用户去访问Hadoop集群的数据,不启用,则Hivesever2会直接使用启动用户访问Hadoop集群数据。模拟用户的功能,默认是开启的

在这里插入图片描述

在这里插入图片描述

生产环境,推荐开启用户模拟功能,因为开启后才能保证各用户之间的权限隔离

hiveserver2部署:hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能),只有Hadoop中的代理用户才能模拟其他用户的身份访问Hadoop集群。因此,需要将hiveserver2的启动用户设置为Hadoop的代理用户,配置方式如下:
① 在namenode所在的节点中/opt/software/hadoop/etc/hadoop/core-site.xml(根据自己的实际路径)

<!--配置所有节点的hadoop用户都可作为代理用户-->
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
   <!--配置hadoop用户能够代理的用户组为任意组-->
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
    <!--配置hadoop用户能够代理的用户为任意用户-->
    <property>
        <name>hadoop.proxyuser.hadoop.users</name>
        <value>*</value>
    </property>

分发core-site.xml文件xsync core-site.xml并重启集群

如果该步骤在此之前已经配好了可以忽略

② Hive端配置:hive-site.xml文件中添加如下配置信息

<!-- 指定hiveserver2连接的host -->
<property>
	<name>hive.server2.thrift.bind.host</name>
	<value>node1</value>
</property>

<!-- 指定hiveserver2连接的端口号 -->
<property>
	<name>hive.server2.thrift.port</name>
	<value>10000</value>
</property>

③ 启动hiveserver2:

[hadoop@node1 ~]$ hive --service hiveserver2

或直接使用hiveserver2命令启动。

[hadoop@node1 ~]$ hiveserver2

实际生产环境这样启动,退到后台运行

[hadoop@node1 ~]$ nohup bin/hiveserver2 1>/dev/null 2>/dev/null &

再多打开一个终端查看当前这个节点的进程就可以看到多出了RunJar进程

[hadoop@node1 ~]$ jps
3968 NameNode
4418 NodeManager
4818 Jps
4676 RunJar
4571 JobHistoryServer
4094 DataNode
[hadoop@node1 ~]$ 

④ 使用客户端连接

方式一:使用第三方图形化客户端远程访问

在这里插入图片描述

方式二:使用命令行客户端beeline进行远程访问

# 启动
 beeline -u jdbc:hive2://10.90.100.101:10000 -n hadoop
# 连接上hive
!connect jdbc:hive2://10.90.100.101:10000
# 退出
!quit

示例:

[hadoop@node1 ~]$ beeline -u jdbc:hive2://10.90.100.101:10000 -n hadoop
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Connecting to jdbc:hive2://10.90.100.101:10000
Connected to: Apache Hive (version 3.1.3)
Driver: Hive JDBC (version 3.1.3)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.3 by Apache Hive
0: jdbc:hive2://10.90.100.101:10000> !connect jdbc:hive2://10.90.100.101:10000 
Connecting to jdbc:hive2://10.90.100.101:10000
Enter username for jdbc:hive2://10.90.100.101:10000: hadoop
Enter password for jdbc:hive2://10.90.100.101:10000: ******
Connected to: Apache Hive (version 3.1.3)
Driver: Hive JDBC (version 3.1.3)
Transaction isolation: TRANSACTION_REPEATABLE_READ
1: jdbc:hive2://10.90.100.101:10000> show databases;
INFO  : Compiling command(queryId=hadoop_20240320014037_ba83d58d-4ec7-4461-9144-eb9ff0fdeaaf): show databases
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Semantic Analysis Completed (retrial = false)
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:database_name, type:string, comment:from deserializer)], properties:null)
INFO  : Completed compiling command(queryId=hadoop_20240320014037_ba83d58d-4ec7-4461-9144-eb9ff0fdeaaf); Time taken: 0.079 seconds
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Executing command(queryId=hadoop_20240320014037_ba83d58d-4ec7-4461-9144-eb9ff0fdeaaf): show databases
INFO  : Starting task [Stage-0:DDL] in serial mode
INFO  : Completed executing command(queryId=hadoop_20240320014037_ba83d58d-4ec7-4461-9144-eb9ff0fdeaaf); Time taken: 0.123 seconds
INFO  : OK
INFO  : Concurrency mode is disabled, not creating a lock manager
+----------------+
| database_name  |
+----------------+
| default        |
+----------------+
1 row selected (0.981 seconds)
1: jdbc:hive2://10.90.100.101:10000> !quit
Closing: 1: jdbc:hive2://10.90.100.101:10000
Closing: 0: jdbc:hive2://10.90.100.101:10000

<think>好的,我需要帮助用户了解如何在Hive本地模式下正确配置hive-site.xml文件。首先,我得回忆一下Hive的本地模式配置的关键点。本地模式通常意味着Hive不依赖Hadoop集群的资源管理器(如YARN),而是使用本地文件系统和单JVM来执行任务,这样可以简化开发和测试环境。 根据引用[1]的内容,hive-site.xml的配置项需要区分服务端和客户端,但用户现在问的是本地模式,可能更关注如何配置基本的元数据存储和执行引擎。本地模式下,Hive默认使用Derby数据库作为元存储,但用户可能希望配置独立的元存储或者调整其他参数。 接下来,需要确保配置的语法正确,比如使用正确的XML格式,以及Hive特定的属性名。例如,设置hive.exec.mode.local.auto为true可以启用本地模式优化。此外,数据仓库目录的位置(hive.metastore.warehouse.dir)需要指向本地路径,如file:///usr/local/hive/warehouse,而不是HDFS路径。 还要注意执行引擎的设置,本地模式下可能需要使用mr(MapReduce)而不是tez,但用户可能也需要了解如何切换到本地模式的其他配置。另外,引用[2]提到了环境变量的配置,比如HIVE_HOME和PATH,这也是配置的一部分,确保Hive命令可以正确执行。 用户可能遇到的问题包括权限错误,比如本地目录的写入权限,或者Derby数据库的并发访问限制。因此,建议配置MySQL作为元存储而不是Derby,但用户可能需要基础教程,所以先提供Derby的配置,再提到MySQL的替代方案。 最后,根据用户提供的引用[3],一些表属性的继承配置可能也需要关注,但在本地模式下可能不是首要问题。需要确保所有配置项都放置在hive-site.xml中,并且文件的位置正确,通常是Hive的conf目录下。 总结步骤应该是:创建hive-site.xml,配置元存储连接,设置本地执行模式,指定仓库目录,环境变量配置,然后验证配置。可能还需要提醒用户检查Derby的锁问题,以及如何启动Hive CLI进行测试。</think>### Hive本地模式hive-site.xml配置教程 在Hive本地模式下,核心配置需关注**元数据存储**和**执行引擎**的本地化设置。以下是具体步骤: --- #### 1. 创建配置文件 进入Hive的`conf`目录,创建或修改`hive-site.xml`: ```xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 本地元数据存储配置 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=/path/to/metastore_db;create=true</value> <description>Derby本地数据库路径</description> </property> <!-- 启用本地执行模式 --> <property> <name>hive.exec.mode.local.auto</name> <value>true</value> <description>自动优化为本地模式(小数据集时生效)</description> </property> <!-- 数据仓库目录 --> <property> <name>hive.metastore.warehouse.dir</name> <value>file:///usr/local/hive/warehouse</value> <description>本地文件系统路径</description> </property> </configuration> ``` --- #### 2. 关键配置项说明 - **`hive.exec.mode.local.auto`**: 当输入数据量小于`hive.exec.mode.local.auto.inputbytes.max`(默认128MB)时自动触发本地模式[^3] - **`hive.metastore.warehouse.dir`**: 本地模式必须使用`file://`协议而非HDFS路径 - **Derby配置**: 默认嵌入式数据库,但存在并发访问限制,建议开发环境改用MySQL: ```xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</value> </property> ``` --- #### 3. 环境变量配置 根据引用[2],在`/etc/profile`中添加: ```bash export HIVE_HOME=/usr/soft/apache-hive-x.x.x-bin export PATH=$PATH:$HIVE_HOME/bin ``` 执行`source /etc/profile`使配置生效 --- #### 4. 验证配置 ```bash hive --service cli # 执行测试查询 hive> CREATE TABLE test_local(id int); hive> SHOW TABLES; ``` --- #### 常见问题处理 1. **Derby锁定问题**:检查`metastore_db`目录是否被其他进程占用 2. **权限错误**:确保本地仓库目录有写入权限 3. **配置未生效**:确认配置文件位于`$HIVE_HOME/conf`且无拼写错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值