目录
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>
分发集群
来源:
尚硅谷