Hive3.1.3安装及部署

目录

1 下载地址

2 安装部署

2.1 安装Hive

2.2 启动并使用Hive

2.3 MySQL安装

2.3.1 安装MySQL

2.3.2 配置MySQL

2.3.3 卸载MySQL说明

2.4 配置Hive元数据存储到MySQL

2.4.1 配置元数据到MySQL

2.4.2 验证元数据是否配置成功

2.4.3 查看MySQL中的元数据

2.5 Hive服务部署

2.5.1 hiveserver2服务

 2.5.2 metastore服务

2.5.3 编写Hive服务启动脚本(了解)

2.6 Hive使用技巧

2.6.1 Hive常用交互命令

2.6.2 Hive参数配置方式

2.6.3 Hive常见属性配置


配置环境:

CentOS 7

Hive-3.1.3

Hadoop-3.1.3

Java 1.8

Mysql-5.7.28

1 下载地址

http://archive.apache.org/dist/hive/

2 安装部署

2.1 安装Hive

1apache-hive-3.1.3-bin.tar.gz上传到Linux/opt/software目录下

2解压apache-hive-3.1.3-bin.tar.gz/opt/module/目录下面

tar -zxvf /opt/software/apache-hive-3.1.3-bin.tar.gz -C /opt/module/

3修改apache-hive-3.1.3-bin.tar.gz的名称为hive-3.1.3

mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive-3.1.3

4修改/etc/profile.d/my_env.sh添加环境变量

sudo vim /etc/profile.d/my_env.sh

(1)添加内容

#HIVE_HOME

export HIVE_HOME=/opt/module/hive-3.1.3

export PATH=$PATH:$HIVE_HOME/bin

(2)source一下

source /etc/profile.d/my_env.sh

5)初始化元数据库(默认是derby数据库)

bin/schematool -dbType derby -initSchema

2.2 启动并使用Hive

1)启动Hive

bin/hive

2)使用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;

观察HDFS的路径/user/hive/warehouse/stu,体会Hive与Hadoop之间的关系。

Hive中的表在Hadoop中是目录;Hive中的数据在Hadoop中是文件。

3)在Xshell窗口中开启另一个窗口开启Hive,在/tmp/atguigu目录下监控hive.log文件

[atguigu@hadoop102 atguigu]$ tail -f hive.log


Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/module/hive/metastore_db.

        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)

        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)

        at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)

        at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)

...

         原因在于Hive默认使用的元数据库为derbyderby数据库的特点是同一时间只允许一个客户端访问。如果多个Hive客户端同时访问,就会报错。由于在企业开发中,都是多人协作开发,需要多客户端同时访问Hive,怎么解决呢?我们可以将Hive的元数据改为用MySQL存储,MySQL支持多客户端同时访问。

4)首先退出hive客户端。然后在Hive的安装目录下将derby.logmetastore_db删除,顺便将HDFS上目录删除

hive> quit;

[atguigu@hadoop102 hive]$ rm -rf derby.log metastore_db

[atguigu@hadoop102 hive]$ hadoop fs -rm -r /user

5)删除HDFS中/user/hive/warehouse/stu中数据

2.3 MySQL安装

2.3.1 安装MySQL

1)上传MySQL安装包以及MySQL驱动jar

mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

mysql-connector-java-5.1.37.jar

2)解压MySQL安装包

[atguigu@hadoop102 software]$ mkdir mysql_lib

[atguigu@hadoop102 software]$ tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C mysql_lib/

3)卸载系统自带的mariadb

[atguigu@hadoop102 ~]$ sudo rpm -qa | grep mariadb | xargs sudo rpm -e --nodeps

4安装MySQL依赖

依次安装,注意依赖顺序

[atguigu@hadoop102 software]$ cd mysql_lib

[atguigu@hadoop102 mysql_lib]$ sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm

[atguigu@hadoop102 mysql_lib]$ sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm

[atguigu@hadoop102 mysql_lib]$ sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm

5安装mysql-client

sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm

6安装mysql-server

sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

注意若出现以下错误

warning: 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY

error: Failed dependencies:

libaio.so.1()(64bit) is needed by mysql-community-server-5.7.16-1.el7.x86_64

解决办法

 sudo yum -y install libaio

7启动MySQL

sudo systemctl start mysqld

8查看MySQL密码

sudo cat /var/log/mysqld.log | grep password

2.3.2 配置MySQL

配置主要是root用户 + 密码,在任何主机上都能登录MySQL数据库。

1)用刚刚查到的密码进入MySQL(如果报错,给密码加单引号)

mysql -uroot -p'password'

2)设置复杂密码(由于MySQL密码策略,此密码必须足够复杂)

mysql> set password=password("Qs23=zs32");

3)更改MySQL密码策略

validate_password_policy=0 有三种安全策略,0,1,2,0最不安全,2最安全

mysql> set global validate_password_policy=0;

mysql> set global validate_password_length=4;

4设置简单好记的密码

mysql> set password=password("123456");

5进入MySQL

mysql> use mysql

6查询user

mysql> select user, host from user;

7修改userHost表内容修改为%

mysql> update user set host="%" where user="root";

8刷新

mysql> flush privileges;

9退出

mysql> quit;

2.3.3 卸载MySQL说明

若因为安装失败或者其他原因,MySQL需要卸载重装,可参考以下内容。

(1)清空原有数据

①通过/etc/my.cnf查看MySQL数据的存储位置

[atguigu@hadoop102 software]$ sudo cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

②去往/var/lib/mysql路径需要root权限

[atguigu@hadoop102 mysql]$ su - root

[root@hadoop102 ~]# cd /var/lib/mysql

[root@hadoop102 mysql]# rm -rf *  (注意敲击命令的位置)

(2)卸载MySQL相关包

①查看安装过的MySQL相关包

[atguigu@hadoop102 software]$ sudo rpm -qa | grep -i -E mysql



mysql-community-libs-5.7.16-1.el7.x86_64

mysql-community-client-5.7.16-1.el7.x86_64

mysql-community-common-5.7.16-1.el7.x86_64

mysql-community-libs-compat-5.7.16-1.el7.x86_64

mysql-community-server-5.7.16-1.el7.x86_64

②一键卸载命令

rpm -qa | grep -i -E mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps

2.4 配置Hive元数据存储到MySQL

2.4.1 配置元数据到MySQL

1)新建Hive元数据库

#登录MySQL

[atguigu@hadoop102 software]$ mysql -uroot -p123456



#创建Hive元数据库

mysql> create database metastore;

mysql> quit;

2MySQLJDBC驱动拷贝到Hivelib目录下。

[atguigu@hadoop102 software]$ cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib

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

[atguigu@hadoop102 software]$ 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>123456</value>

    </property>



    <!-- Hive默认在HDFS的工作目录 -->

    <property>

        <name>hive.metastore.warehouse.dir</name>

        <value>/user/hive/warehouse</value>

    </property>

</configuration>

5)初始化Hive元数据库(修改为采用MySQL存储元数据)

[atguigu@hadoop102 hive]$ bin/schematool -dbType mysql -initSchema -verbose

2.4.2 验证元数据是否配置成功

1)再次启动Hive

[atguigu@hadoop102 hive]$ bin/hive

2)使用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;

3)在Xshell窗口中开启另一个窗口开启Hive(两个窗口都可以操作Hive,没有出现异常)

hive> show databases;

hive> show tables;

hive> select * from stu;

2.4.3 查看MySQL中的元数据

1)登录MySQL

[atguigu@hadoop102 hive]$ mysql -uroot -p123456

2)查看元数据库metastore

mysql> show databases;

mysql> use metastore;

mysql> show tables;

(1)查看元数据库中存储的库信息

mysql> select * from DBS;
+-------+-----------------------+-------------------------------------------+---------+------------+------------+-----------+
| DB_ID | DESC                  | DB_LOCATION_URI                           | NAME    | OWNER_NAME | OWNER_TYPE | CTLG_NAME |
+-------+-----------------------+-------------------------------------------+---------+------------+------------+-----------+
|     1 | Default Hive database | hdfs://hadoop102:8020/user/hive/warehouse | default | public     | ROLE       | hive      |
+-------+-----------------------+-------------------------------------------+---------+------------+------------+-----------+

(2)查看元数据库中存储的表信息

mysql> mysql> select * from TBLS;
+--------+-------------+-------+------------------+--------+------------+-----------+-------+----------+---------------+--------------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER  | OWNER_TYPE | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | IS_REWRITE_ENABLED |
+--------+-------------+-------+------------------+--------+------------+-----------+-------+----------+---------------+--------------------+--------------------+--------------------+
|      1 |  1680832178 |     1 |                0 | mingyu | USER       |         0 |     1 | stu      | MANAGED_TABLE | NULL               | NULL               |                    |
+--------+-------------+-------+------------------+--------+------------+-----------+-------+----------+---------------+--------------------+--------------------+--------------------+

(3)查看元数据库中存储的表中列相关信息

mysql> select * from COLUMNS_V2;
+-------+---------+-------------+-----------+-------------+
| CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
+-------+---------+-------------+-----------+-------------+
|     1 | NULL    | id          | int       |           0 |
|     1 | NULL    | name        | string    |           1 |
+-------+---------+-------------+-----------+-------------+
2 rows in set (0.00 sec)

2.5 Hive服务部署

2.5.1 hiveserver2服务

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

1)用户说明

        在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问权限控制,所以此时需考虑一个问题:那就是访问Hadoop集群的用户身份是谁?是Hiveserver2的启动用户?还是客户端的登录用户?

        答案是都有可能,具体是谁,由Hiveserver2的hive.server2.enable.doAs参数决定,该参数的含义是是否启用Hiveserver2用户模拟的功能。若启用,则Hiveserver2会模拟成客户端的登录用户去访问Hadoop集群的数据,不启用,则Hivesever2会直接使用启动用户访问Hadoop集群数据。模拟用户的功能,默认是开启的。

具体逻辑如下:

未开启用户模拟功能:

 开启用户模拟功能:

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

2hiveserver2部署        

(1)Hadoop端配置

        hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能),只有Hadoop中的代理用户才能模拟其他用户的身份访问Hadoop集群。因此,需要hiveserver2的启动用户设置为Hadoop的代理用户,配置方式如下:

修改配置文件core-site.xml,然后记得分发三台机器

[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop

[atguigu@hadoop102 hadoop]$ vim core-site.xml

增加如下配置:

<!--配置所有节点的mingyu用户都可作为代理用户-->
<property>
    <name>hadoop.proxyuser.mingyu.hosts</name>
    <value>*</value>
</property>

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

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

(2)Hive端配置

在hive-site.xml文件中添加如下配置信息

[atguigu@hadoop102 conf]$ vim 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>

3)测试

(1)启动hiveserver2

bin/hive --service hiveserver2

不想出现阻塞式进程,可以使用以下代码代替 

nohup bin/hiveserver2 >/dev/null 2>&1 &

 解释:

  • nohup:表示不挂断地运行命令,即使终端关闭或用户注销,该命令也会继续在后台运行。
  • bin/hiveserver2:是要运行的 HiveServer2 可执行文件的路径。
  • >/dev/null:将标准输出重定向到 /dev/null,这是一个特殊的设备文件,所有写入它的数据都会被丢弃。
  • 2>&1:将标准错误输出重定向到标准输出,这样可以将错误输出也丢弃到 /dev/null
  • &:将命令放入后台运行,使命令执行后立即返回命令提示符,而不会阻塞当前终端会话。

 综合来说,这条命令的含义是在后台启动 HiveServer2 进程,并将其输出和错误输出都重定向到 /dev/null,从而在后台静默运行 HiveServer2 进程,不产生任何输出。

/dev/null 也就是黑洞

(2)使用命令行客户端beeline进行远程访问

启动beeline客户端

bin/beeline -u jdbc:hive2://hadoop102:10000 -n mingyu

看到如下界面 

 连接hiveserver2

0: jdbc:hive2://hadoop102:10000> !connect jdbc:hive2://hadoop102:10000

看到

 使用

1: jdbc:hive2://hadoop102:10000> show tables;

查看所有表格 

 (3)使用Datagrip图形化客户端进行远程访问

打开DataGrip,新建连接

 

 测试连接

 界面相关功能

 2.5.2 metastore服务

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

1metastore运行模式

metastore有两种运行模式,分别为嵌入式模式和独立服务模式。下面分别对两种模式进行说明:

(1)嵌入式模式

 (2)独立服务模式

 

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

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

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

2metastore部署

(1)嵌入式模式(个人测试)

嵌入式模式下,只需保证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>123456</value>

    </property>

(2)独立服务模式

独立服务模式需做以下配置:

        首先,保证运行metastore服务所在节点的配置文件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>123456</value>
    </property>

        其次,保证Hiveserver2和每个Hive CLI的配置文件hive-site.xml中包含访问metastore服务所需的以下参数:

<!-- 指定metastore服务的地址 -->

<property>

   <name>hive.metastore.uris</name>

   <value>thrift://hadoop102:9083</value>

</property>

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

3)测试

此时启动Hive CLI,执行shou databases语句,会出现一下错误提示信息:

hive (default)> show databases;

FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

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

metastore服务的启动命令如下:

[atguigu@hadoop202 hive]$ hive --service metastore

2022-04-24 16:58:08: Starting Hive Metastore Server

或者后台挂载该服务

nohup hive --service metastore >/dev/null 2>&1 &

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

重新启动 Hive CLI,并执行shou databases语句,就能正常访问了

bin/hive

2.5.3 编写Hive服务启动脚本(了解)

前台启动的方式导致需要打开多个Xshell窗口,可以使用如下方式后台方式启动

  • nohup:放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态
  • /dev/null:是Linux文件系统中的一个文件,被称为黑洞,所有写入该文件的内容都会被自动丢弃
  • 2>&1:表示将错误重定向到标准输出上
  • &:放在命令结尾,表示后台运行
  • 一般会组合使用:nohup  [xxx命令操作]> file  2>&1 &,表示将xxx命令运行的结果输出到file中,并保持命令启动的进程在后台运行。

[atguigu@hadoop202 hive]$ nohup hive --service metastore 2>&1 &
[atguigu@hadoop202 hive]$ nohup hive --service hiveserver2 2>&1 &

为了方便使用,可以直接编写脚本来管理服务的启动和关闭

[atguigu@hadoop102 hive]$ vim $HIVE_HOME/bin/hiveservices.sh

内容如下:此脚本的编写不要求掌握。直接拿来使用即可。

#!/bin/bash


HIVE_LOG_DIR=$HIVE_HOME/logs

if [ ! -d $HIVE_LOG_DIR ]

then

   mkdir -p $HIVE_LOG_DIR

fi


#检查进程是否运行正常,参数1为进程名,参数2为进程端口

function check_process()

{

    pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')

    ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)

    echo $pid

    [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1

}



function hive_start()

{

    metapid=$(check_process HiveMetastore 9083)

    cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"

    [ -z "$metapid" ] && eval $cmd || echo "Metastroe服务已启动"

    server2pid=$(check_process HiveServer2 10000)

    cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"

    [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动"

}



function hive_stop()

{

metapid=$(check_process HiveMetastore 9083)

    [ "$metapid" ] && kill $metapid || echo "Metastore服务未启动"

    server2pid=$(check_process HiveServer2 10000)

    [ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动"

}



case $1 in

"start")

    hive_start

    ;;

"stop")

    hive_stop

    ;;

"restart")

    hive_stop

    sleep 2

    hive_start

    ;;

"status")

    check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常"

    check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常"

    ;;

*)

    echo Invalid Args!

    echo 'Usage: '$(basename $0)' start|stop|restart|status'

    ;;

esac

 

2.6 Hive使用技巧

2.6.1 Hive常用交互命令

[atguigu@hadoop102 hive]$ bin/hive -help

usage: hive

 -d,--define <key=value>          Variable subsitution to apply to hive

                                  commands. e.g. -d A=B or --define A=B

    --database <databasename>     Specify the database to use

 -e <quoted-query-string>         SQL from command line

 -f <filename>                      SQL from files

 -H,--help                        Print help information

    --hiveconf <property=value>   Use value for given property

    --hivevar <key=value>         Variable subsitution to apply to hive

                                  commands. e.g. --hivevar A=B

 -i <filename>                    Initialization SQL file

 -S,--silent                      Silent mode in interactive shell

 -v,--verbose                     Verbose mode (echo executed SQL to the console)

1)在Hive命令行里创建一个表student,并插入1条数据

2)“-e”不进入hive的交互窗口执行hql语句

[atguigu@hadoop102 hive]$ bin/hive -e "select id from student;"

3)“-f”执行脚本中的hql语句

(1)在/opt/module/hive/下创建datas目录并在datas目录下创建hivef.sql文件

[atguigu@hadoop102 hive]$ mkdir datas

[atguigu@hadoop102 datas]$ vim hivef.sql

(2)文件中写入正确的hql语句

select * from student;

(3)执行文件中的hql语句

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/hive/datas/hivef.sql

(4)执行文件中的hql语句并将结果写入文件中

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/hive/datas/hivef.sql  > /opt/module/hive/datas/hive_result.txt

2.6.2 Hive参数配置方式

1)查看当前所有的配置信息

hive>set;

2)参数的配置三种方式

1配置文件方式

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

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

(2)命令行参数方式

①启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。例如:

[atguigu@hadoop103 hive]$ bin/hive -hiveconf mapreduce.job.reduces=10;

注意:仅对本次Hive启动有效。

②查看参数设置

hive (default)> set mapreduce.job.reduces;

(3)参数声明方式

可以在HQL中使用SET关键字设定参数,例如:

hive(default)> set mapreduce.job.reduces=10;

注意:仅对本次Hive启动有效

查看参数设置:

hive(default)> set mapreduce.job.reduces;

上述三种设定方式的优先级依次递增。即配置文件 < 命令行参数 < 参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

2.6.3 Hive常见属性配置

1Hive客户端显示当前库和表头

1)在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>

2hive客户端在运行时可以显示当前使用的库和表头信息

2Hive运行日志路径配置

1Hivelog默认存放在/tmp/mingyu/hive.log目录下(当前用户名下)

2)修改Hivelog存放日志到/opt/module/hive/logs

1修改$HIVE_HOME/conf/hive-log4j2.properties.template文件名称为

hive-log4j2.properties

mv hive-log4j2.properties.template hive-log4j2.properties

2在hive-log4j2.properties文件中修改log存放位置

 vim hive-log4j2.properties

修改配置如下

property.hive.log.dir=/opt/module/hive/logs

3HiveJVM堆内存设置

        新版本的Hive启动的时候,默认申请的JVM堆内存大小为256M,JVM堆内存申请的太小,导致后期开启本地模式,执行复杂的SQL时经常会报错:java.lang.OutOfMemoryError: Java heap space,因此最好提前调整一下HADOOP_HEAPSIZE这个参数。

(1)修改$HIVE_HOME/conf下的hive-env.sh.template为hive-env.sh

[atguigu@hadoop102 conf]$ pwd

/opt/module/hive/conf

[atguigu@hadoop102 conf]$ mv hive-env.sh.template hive-env.sh

(2)将hive-env.sh其中的参数 export HADOOP_HEAPSIZE修改为2048重启Hive

修改前

# The heap size of the jvm stared by hive shell script can be controlled via:

# export HADOOP_HEAPSIZE=1024

         修改后

# The heap size of the jvm stared by hive shell script can be controlled via:

export HADOOP_HEAPSIZE=2048

4)关闭Hadoop虚拟内存检查

在yarn-site.xml中关闭虚拟内存检查(虚拟内存校验,如果已经关闭了,就不需要配了)。

(1)修改前记得先停Hadoop

(2)添加如下配置

<property>

    <name>yarn.nodemanager.vmem-check-enabled</name>

    <value>false</value>

</property>

(3)修改完后记得分发yarn-site.xml,并重启yarn。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/6982.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中金支付经历了4个月完成主要出资人前置审批

2023年4月6日&#xff0c;中国人民银行公示了关于中金支付有限公司的《中国人民银行准予行政许可决定书》&#xff08;银许准予决字〔2023〕第41号&#xff09;&#xff0c;同意中金支付有限公司主要出资人由中金金融认证中心有限公司变更为广州广电运通金融电子股份有限公司&a…

Nacos安全性探究

Nacos怎么做安全校验的&#xff1f; 以下使用nacos2.x 如上图所示&#xff0c; 可以直接访问Nacos的接口来获取用户列表。这说明Nacos的接口被爆露&#xff0c;任何情况下都可以访问&#xff0c;因此安全性得不到保障。 Nacos 使用 spring security 作为安全框架。spring sec…

【Mybatis】1—前言日志框架

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)

目录 RBFNN训练结果 UKF估计SOC 文章的结尾红色部分有彩蛋 RBFNN训练结果 这篇文章主要介绍如何使用RBF神经网络训练出的参数并结合UKF算法完成锂离子电池SOC的估计&#xff0c;有关RBF参数训练过程的代码分析放在2天后的下一篇文章&#xff0c;这里只给出训练完成后的结果…

关于async/await、promise和setTimeout执行顺序

关于async/await、promise和setTimeout执行顺序 async function async1() {console.log(async1 start);await async2();console.log(asnyc1 end); } async function async2() {console.log(async2); } console.log(script start); setTimeout(() > {console.log(setTimeOut…

springboot(01)项目搭建与启动

01&#xff0c;项目搭建与启动 一&#xff0c;项目搭建 有多种方式可以搭建Spring Boot项目&#xff0c;包括&#xff1a; 使用Spring Boot CLI命令行工具使用Spring Initializr网站或IDE插件生成项目模板使用Maven或Gradle手动配置项目 每种方式都有其优缺点&#xff0c;具…

Android IPC Binder机制学习(一)

一、多进程系统设计及意义Android系统分为5层&#xff0c;不过Android一般岗位只关注上三层就够用了即&#xff1a;应用层、framework层、native层。Android中的应用层和系统服务层不在同一个进程&#xff0c;系统服务在单独的进程中。Android中不同的应用属于不同的进程中Andr…

ChatGPT遭禁用、抵制后又停止Plus付费发生了?

ChatGPT相关信息 2023年2月27日消息&#xff0c;Snapchat 正在推出一个基于 OpenAI 的 ChatGPT 最新版本的聊天机器人。 这款名为“My AI”的机器人将被固定在应用界面的聊天选项卡上&#xff0c;虽然最初仅适用于每月3.99美元的SnapchatPlus付费订阅用户&#xff0c;但最终目…

图像分类综述

一、图像分类介绍 什么是图像分类&#xff0c;核心是从给定的分类集合中给图像分配一个标签的任务。实际上&#xff0c;这意味着我们的任务是分析一个输入图像并返回一个将图像分类的标签。标签来自预定义的可能类别集。 示例&#xff1a;我们假定一个可能的类别集categories …

Vue3+vite2 博客前端开发

Vue3vite2 博客前端开发 文章目录Vue3vite2 博客前端开发前言页面展示代码设计卡片设计背景&#xff08;Particles.js粒子效果&#xff09;右侧个人信息与公告内容页友链总结前言 大家是否也想拥有一个属于自己的博客&#xff1f;但是如何去开发博客&#xff0c;怎样去开发一个…

毫升 | 主成分分析(PCA)

这种方法是由Karl Pearson 介绍的。它的工作条件是&#xff0c;当高维空间中的数据映射到低维空间中的数据时&#xff0c;低维空间中数据的方差应最大。 主成分分析 (PCA) 是一种用于降低大型数据集维数的统计技术。它是机器学习、数据科学和其他处理大型数据集的领域中常用的…

如何通过C++ 将数据写入 Excel 工作表

直观的界面、出色的计算功能和图表工具&#xff0c;使Excel成为了最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少&#xff0c;而过多的数据又难以理清头绪时&#xff0c;制作成表格是数据管理的最有效手段之一。这样不仅可以方便整理数据&#xff0c;还可以方便…

aspnet030高校学生团体管理系统sqlserver

net030高校学生团体管理系统 . 1.用户基本信息管理模块&#xff1a;录入、修改、删除、查询、统计、打印等功能 2.学生成绩管理模块&#xff1a;录入、修改、删除、查询、统计、打印等功能 3.学生团体信息管理模块&#xff1a;录入、修改、删除、查询、统计、打印等功能 4.教…

Excel技能之查找筛选排序,同事竖起大拇指

每天面对大量的数据&#xff0c;眼睛都看花了。头疼、脱发、颈椎病、胸闷、腰间盘突出&#xff0c;一系列并发症严重影响打工人的心情。同事看在眼里&#xff0c;痛在心里。 救救打工人吧&#xff01;打工人的福音来了&#xff0c;自从学会了查找筛选排序&#xff0c;手脚利索…

动态规划(一) part1

T1:一个数组 中的最长 升序 子序列 的长度 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组…

C 非线性结构——树 万字详解(通俗易懂)

目录 一、树的介绍 1.定义 : 2.相关概念 : 3.简单分类 : 4.相关应用 : 二、树的存储 1.二叉树的存储 : 1 二叉树连续存储 2 二叉树链式存储&#xff08;常用&#xff09; 2.普通树和森林的存储 : 1 普通树的存储 2 森林的存储 三、树的遍历 1.二叉树先序遍历 : 2.二叉…

深度学习训练营之yolov5训练自己的数据集

深度学习训练营之训练自己的数据集原文链接环境介绍准备好数据集划分数据集运行voc_train.py遇到问题完整代码创建new_data.yaml文件模型训练时遇到的报错模型训练结果可视化参考链接原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…

正则表达式

一、正则表达式的概述 1、概念 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串&#xff08;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为“元字符”&#xff09;&#xff09;操…

JVM 程序计数器(PC)

PC寄存器的概念 JVM中的程序计数寄存器&#xff08;Program Counter Register&#xff09;中&#xff0c;Register的命名源于CPU的寄存器&#xff0c;寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里&#xff0c;并非是广义上所指的物理寄存器&#…

【蓝桥杯冲刺】日期类专题特训

目录 1. 日期累加 题目描述 输入 输出 代码 2. 日期差值 题目描述 输入 输出 代码 3. 打印日期 题目描述 输入 输出 代码 写在最后&#xff1a; 1. 日期累加 题目链接&#xff1a;日期累加 题目描述 输入 1 2008 2 3 100 输出 2008-05-13 代码 #include…