Hive配置

Posted 岱宗夫如何、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive配置相关的知识,希望对你有一定的参考价值。

目录

Hive参数配置方式

参数的配置方式

1. 文件配置

2.  命令行参数配置

3. 参数声明配置

配置源数据库

配置元数据到MySQL

查看MySQL中的元数据

Hive服务部署

 hiveserver2服务

介绍

部署

启动

远程连接

1. 使用命令行客户端beeline进行远程访问

metastore服务

运行模式

部署

其他常见配置

显示当前表头和库

日志配置

Hive的JVM堆内存设置

关闭Hadoop虚拟内存检查

来源:


Hive参数配置方式

查看当前所有配置

hive>set;

参数的配置方式

1. 文件配置

  • 默认配置文件:hive-default.xml
  • 用户自定义配置文件:hive-site.xml

用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

2.  命令行参数配置

bin/hive -hiveconf (param=value)

 查看参数设置

set (param);

3. 参数声明配置

hive> set (param=value);

 后两种只对本次有效。

配置文件 < 命令行参数 < 参数声明

log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

配置源数据库

Hive默认使用的元数据库为derby。derby数据库的特点是同一时间只允许一个客户端访问。如果多个Hive客户端同时访问,就会报错。

删除derby.log,metastore_db,HDFS上目录

rm -rf derby.log metastore_db
hadoop fs -rm -r /user

通过hdfs的web界面 ,删除hdfs里的/user/hive/warehouse/stu

安装mysql

(13条消息) 【Linux】安装MySQL数据库_岱宗夫如何、的博客-CSDN博客

配置元数据到MySQL

新建Hive元数据库

mysql -uroot -p
create database metastore;
quit

将MySQL的JDBC驱动拷贝到Hive的lib目录下

cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib

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

vim $HIVE_HOME/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
 <!-- jdbc连接的URL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
    </property>
    
    <!-- jdbc连接的Driver-->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.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>密码</value>
    </property>

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

初始化Hive元数据库

bin/schematool -dbType mysql -initSchema -verbose

检验测试

bin/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;
在Xshell窗口中开启另一个窗口开启Hive(两个窗口都可以操作Hive,没有出现异常)
hive> show databases;
hive> show tables;
hive> select * from stu;

查看MySQL中的元数据

mysql -uroot -p
show databases;
use metastore;
show tables;
查看库信息,
有在hdbfs根目录
select * from BDS;
查看表信息
select * from TBLS;
表的存储路径,outputf,inputf
select * from SDS;
查看列相关信息
select * from COLUMNS_V2;

Hive服务部署

 hiveserver2服务

介绍

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

远程访问集群通过 Hiveserver2 代理;模拟用户的功能,默认是开启的。

未开启用户模拟功能:Hiveserver2的启动用户

 开启用户模拟功能:

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

部署

1. Hadoop端配置

hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能);因此,需要hiveserver2的启动用户设置为Hadoop的代理用户

cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
<!--配置所有节点的atguigu用户都可作为代理用户-->
<property>
    <name>hadoop.proxyuser.atguigu.hosts</name>
    <value>*</value>
</property>

<!--配置atguigu用户能够代理的用户组为任意组-->
<property>
    <name>hadoop.proxyuser.atguigu.groups</name>
    <value>*</value>
</property>

<!--配置atguigu用户能够代理的用户为任意用户-->
<property>
    <name>hadoop.proxyuser.atguigu.users</name>
    <value>*</value>
</property>

分发配置文件

2. 配置Hive 

vim conf/hive-site.xml
<!-- 指定hiveserver2连接的host -->
<property>
	<name>hive.server2.thrift.bind.host</name>
	<value>hadoop102</value>
</property>

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

启动

bin/hive --service hiveserver2
nohup bin/hiveserver2 >/dev/null 2>&1 &
jps

Jps  jps -ml

Nohup 不挂断, & 后台

Nohup bin/hiveserver2 &

1>/dev/null 丢弃标准输出

2>&1

进程文件描述符   0标准输入 1标准输出 2标准错误

远程连接

1. 使用命令行客户端beeline进行远程访问

hive beeline详解 - 简书 (jianshu.com)

2.使用图形化界面

(DataGrip)

metastore服务

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

运行模式

嵌入式模式

 独立服务模式

生产环境中,不推荐使用嵌入式模式。因为其存在以下两个问题:

(1)嵌入式模式下,每个Hive CLI都需要直接连接元数据库,当Hive CLI较多时,数据库压力会比较大。

(2)每个客户端都需要用户元数据库的读写权限,元数据库的安全得不到很好的保证。

部署

嵌入式模式

只需保证Hiveserver2和每个Hive CLI的配置文件hive-site.xml中包含连接元数据库所需要的以下参数即可:

<!-- jdbc连接的URL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
    </property>
    
    <!-- jdbc连接的Driver-->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.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>密码</value>
    </property>

独立服务模式

hive-site.xml

<!-- jdbc连接的URL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
    </property>
    
    <!-- jdbc连接的Driver-->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.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>密码</value>
    </property>

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

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

在Hive CLI的配置文件中配置了hive.metastore.uris参数,此时Hive CLI会去请求我们执行的metastore服务地址,所以必须启动metastore服务才能正常使用。

测试

hive --service metastore
注意:启动后该窗口不能再操作,需打开一个新的Xshell窗口来对Hive操作。
bin/hive

其他常见配置

显示当前表头和库

hive-site.xml

<!--显示当前使用的表-->
<property>
    <name>hive.cli.print.header</name>
    <value>true</value>
    <description>Whether to print the names of the columns in query output.</description>
</property>
<!--显示当前使用的库-->
<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
    <description>Whether to include the current database in the Hive prompt.</description>
</property>

日志配置

log默认配置在/tmp/用户/hive.log

修改log存放目录

cd $HIVE_HOME/conf/
mv hive-log4j2.properties.template hive-log4j2.properties
vim hive-log4j2.properties
property.hive.log.dir=$HIVE_HOME/logs

Hive的JVM堆内存设置

Hive启动的时候,默认申请的JVM堆内存大小为256M,JVM堆内存申请的太小,导致后期开启本地模式,执行复杂的SQL时经常会报错:java.lang.OutOfMemoryError: Java heap space.

cd $HIVE_HOME/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
# The heap size of the jvm stared by hive shell script can be controlled via:
export HADOOP_HEAPSIZE=2048

关闭Hadoop虚拟内存检查

修改前记得先停Hadoop
stop-yarn.sh
vim yarn-site.xml
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

分发集群

来源:

尚硅谷

以上是关于Hive配置的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之Hive基本概念安装数据类型

大数据技术之Hive基本概念安装数据类型

大数据组件之Hive(Hive学习一篇就够了)

Hive优化之Hive的配置参数优化

2021年大数据Hive:Hive的数据压缩

大数据NiFi(十九):实时Json日志数据导入到Hive