Hive_第二章 Hive的安装及配置(元数据库等...)

第2章 Hive的安装

2.1 修改hadoop相关参数

  1. 修改core-site.xml
[caomingyang@hadoop102 hive]vim /opt/module/hadoop/etc/core-site.xml
<!-- 配置该caomingyang(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.caomingyang.hosts</name>
        <value>*</value>
    </property>
<!-- 配置该caomingyang(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.caomingyang.groups</name>
        <value>*</value>
    </property>
<!-- 配置该caomingyang(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.caomingyang.users</name>
        <value>*</value>
</property>
  1. 配置yarn-site.xml
[caomingyang@hadoop102 hive]$ vim /opt/module/hadoop/etc/hadoop/yarn-site.xml
<!-- NodeManager使用内存数,默认8G,修改为4G内存 -->
<property>
	<description>Amount of physical memory, in MB, that can be allocated 
	for containers. If set to -1 and
	yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
	automatically calculated(in case of Windows and Linux).
	In other cases, the default is 8192MB.
	</description>
	<name>yarn.nodemanager.resource.memory-mb</name>
	<value>4096</value>
</property>
<!-- 容器最小内存,默认512M -->
<property>
	<description>The minimum allocation for every container request at the RM	in MBs. 
            Memory requests lower than this will be set to the value of this	property. 
            Additionally, a node manager that is configured to have less memory	than this value
	</description>
	<name>yarn.scheduler.minimum-allocation-mb</name>
	<value>512</value>
</property>

<!-- 容器最大内存,默认8G,修改为4G -->
<property>
	<description>The maximum allocation for every container request at the RM	in MBs. 
            Memory requests higher than this will throw an	InvalidResourceRequestException.
	</description>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>4096</value>
</property>

<!-- 虚拟内存检查,默认打开,修改为关闭 -->
<property>
	<description>Whether virtual memory limits will be enforced for containers.</description>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>

注意:修改完配置文件记得分发,然后重启集群。

2.2 Hive解压安装

1)把apache-hive-3.1.2-bin.tar.gz上传到linux的==/opt/software目录下
2)将
/opt/software/目录下的apache-hive-3.1.2-bin.tar.gz解压到/opt/module/==目录下面

[caomingyang@hadoop102 software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/

3)修改解压后的目录名称为hive

[caomingyang@hadoop102 module]$ mv apache-hive-3.1.2-bin/ /opt/module/hive

4)修改==/etc/profile.d/my_env.sh==文件,将hive的/bin目录添加到环境变量

[caomingyang@hadoop102 hive]$ sudo vim /etc/profile.d/my_env.sh
……
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin

刷新配置文件

[caomingyang@hadoop102 hive]$ source /etc/profile

2.3 Hive元数据的三种部署方式

2.3.1 元数据库之Derby

1.内嵌模式示意图:

内嵌模式示意图

2.Derby数据库:

Derby数据库是Java编写的内存数据库,在内嵌模式中与应用程序共享一个JVM,应用程序负责启动和停止。

3. 初始化Derby数据库

1)在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的Derby元数据库

[caomingyang@hadoop102 hive]$ bin/schematool -dbType derby -initSchema

2)执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下:

SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-
2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/
slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]

3)解决jar冲突问题,只需要将hive的/lib目录下的log4j-slf4j-impl-2.10.0.jar重命名即可

[caomingyang@hadoop102 hive]$ mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.back
4.启动Hive

1)执行/bin目录下的hive命令,就可以启动hive,并通过cli方式连接到hive

[caomingyang@hadoop102 hive]$ bin/hive

2)使用Hive

 hive> show databases;                                      // 查看当前所有的数据库
OK
default
Time taken: 0.472 seconds, Fetched: 1 row(s)
hive> show tables;                                         // 查看当前所有的表
OK
Time taken: 0.044 seconds
hive> create table test_derby(id int);            // 创建表test_derby,表中只有一个字段,字段类型是int
OK
Time taken: 0.474 seconds
hive> insert into test_derby values(1001);                 // 向test_derby表中插入数据
Query ID = caomingyang_20211018153727_586935da-100d-4d7e-8a94-063d373cc5dd
Total jobs = 3
……
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
……
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.19 sec   HDFS Read: 12769 HDFS Write: 208 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 190 msec
OK
Time taken: 31.901 second
hive> select * from test_derby;                                // 查看test_derby表中所有数据
OK
1001
Time taken: 0.085 seconds, Fetched: 1 row(s)
hive> exit;
5. 内嵌模式只有一个JVM进程

在内嵌模式下,命令行执行jps –ml命令,只能看到一个CliDriver进程。

[caomingyang@hadoop102 hive]$ jps –ml
7170 sun.tools.jps.Jps -ml
6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar org.apache.hadoop.hive.cli.CliDriver
6.Hive自带的元数据库的问题

演示采用Derby作为元数据库的问题:
开启另一个会话窗口运行Hive,同时监控/tmp/caomingyang目录中的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默认使用的元数据库为derby并且部署方式是内嵌式,在开启Hive之后就会独占元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。为此Hive支持采用MySQL作为元数据库,就可以支持多窗口操作。

2.3.2 元数据库之Mysql

1. 直连模式示意图:

直连模式示意图

2.MySQL安装部署

1)检查当前系统是否安装过Mysql,如果存在就是用下列命令移除,如果不存在则忽略。(一定要做这一步)

[caomingyang@hadoop102 hive]$ rpm -qa|grep mariadb

mariadb-libs-5.5.56-2.el7.x86_64 //如果存在通过如下命令卸载
[caomingyang@hadoop102 hive]$ sudo rpm -e --nodeps mariadb-libs //用此命令卸载mariadb

2)将MySQL安装包上传到/opt/software目录下

[caomingyang@hadoop102 software]$ ll
总用量 528384
-rw-r–r–. 1 root root 609556480 3月 21 15:41 mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

3)解压MySQL安装包资源到/opt/software 下新创建的mysql_jars目录

[caomingyang@hadoop102 software]$ mkdir /opt/software/mysql_jars
[caomingyang@hadoop102 software]$ tar -xf /opt/software/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /opt/software/mysql_jars

4)查看mysql_jars目录下解压后的文件如下:

[caomingyang@hadoop102 software]$ cd /opt/software/mysql_jars
[caomingyang@hadoop102 mysql_jars]$ ll
总用量 595272
-rw-r--r--. 1 caomingyang caomingyang  45109364 930 2019 mysql-community-client-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang    318768 930 2019 mysql-community-common-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang   7037096 930 2019 mysql-community-devel-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang  49329100 930 2019 mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang  23354908 930 2019 mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang 136837816 930 2019 mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang   4374364 930 2019 mysql-community-libs-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang   1353312 930 2019 mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang 208694824 930 2019 mysql-community-server-5.7.28-1.el7.x86_64.rpm
-rw-r--r--. 1 caomingyang caomingyang 133129992 930 2019 mysql-community-test-5.7.28-1.el7.x86_64.rpm

5)在/opt/software/mysql_jars目录下执行rpm安装,严格按照如下顺序执行

sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

注意: linux采用最小化安装会存在问题。
6)如果在mysql的数据存储路径下有文件存在,需要将其全部删除,存储路径地址在/etc/my.cnf文件中datadir参数所对应的值:

[caomingyang@hadoop102 etc]$ vim my.cnf
……
[mysqld]
datadir=/var/lib/mysql

// 删除/var/lib/mysql目录下的所有内容:
[caomingyang@hadoop102 hive]$ cd /var/lib/mysql
[root@hadoop102 mysql]$ sudo rm -rf ./*    //千万注意执行命令的位置

7)初始化数据库(这个是mysql数据库安装后的初始化),会创建mysql内部数据库和表。

[caomingyang@hadoop102 module]$ sudo mysqld --initialize --user=mysql

8)初始化完成后,查看临时生成的root用户的密码,也是首次登录msql的密码

[caomingyang@hadoop102 module]$ sudo cat /var/log/mysqld.log 
2021-10-18T08:50:32.172049Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-18T08:50:32.364322Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-18T08:50:32.397350Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-18T08:50:32.453522Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 73e2af3c-2ff0-11ec-af41-000c29830057.
2021-10-18T08:50:32.454765Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-10-18T08:50:32.978960Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-18T08:50:33.314317Z 1 [Note] A temporary password is generated for root@localhost: OU+*c.C9FZy;
  • 例如上述显示结果中密码为 OU+*c.C9FZy (即分号‘:’后面的字符串)
    9)启动MySQL服务
[caomingyang@hadoop102 module]$ sudo systemctl start mysqld

10)使用初始化后得到的密码登录MySQL数据库

[caomingyang@hadoop102 module]$ mysql -uroot -p
Enter password:  (初始化后得到的临时密码)  //输入临时生成的密码

11)登录后必须先修改root用户的密码,否则执行其他的操作会报错

mysql> set password = password("新密码");

12)修改mysql库下的user表中的root用户允许任意ip连接否则只能支持本机连接

mysql> update mysql.user set host='%' where user='root';

13)刷新配置文件,使得修改生效

mysql> flush privileges;
3.配置Hive元数据库为MySql
  1. 拷贝驱动
    Hive需要将元数据信息存储到元数据库mysql中,需要使用JDBC的方式连接到MySQL,所以,将MySQL的JDBC驱动拷贝到Hive的lib目录下,供hive调用。
[caomingyang@hadoop102 software]$ cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib

2)配置Metastore到MySql
在/opt/module/hive/conf目录下新建hive-site.xml文件(新建的配置文件中的配置会覆盖默认配置)

[caomingyang@hadoop102 hive]$ vim 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>
   <!-- Hive元数据存储的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
</configuration>
4.Hive初始化元数据库

在mysql中创建hive存储元数据的数据库metastore,再通过hive的初始化元数据库操作创建表
1)登陆MySQL

[caomingyang@hadoop102 module]$ mysql -uroot -p你的密码

2)新建Hive元数据库

mysql> create database metastore;
mysql> quit;

3)初始化Hive元数据库

[caomingyang@hadoop102 hive]$ bin/schematool -initSchema -dbType mysql -verbose
5.启动Hive

1)启动Hive

[caomingyang@hadoop102 hive]$ bin/hive

2)使用Hive

hive> show databases;                       // 查看所有的数据库
hive> show tables;                          // 查看所有的表,刚才创建的表test_derby是否存在?为什么?
hive> create table test_mysql (id int);     // 创建test_mysql表,一个字段为id,类型为int
hive> insert into test_mysql values(1002);  // 向表test_mysql中插入数据
hive> select * from test_mysql;             // 查看test2表

3)开启另一个窗口测试,是否支持客户端并发访问

[caomingyang@hadoop102 hvie]$ bin/hive
hive> show tables;
hive> select * from test_mysql;
6.直连模式问题:

在公司生产环境中,网络环境会非常复杂,mysql的所在环境可能存在网络隔离,无法直接访问;另外,mysql的root账户和密码在此模式下会存在泄露风险,存在数据安全隐患。
思考:在hadoop103上部署hive,元数据库使用的仍然是hadoop102的Mysql实例,如何实现?

2.3.3 元数据之MetaStore Server

1.元数据服务模式示意图

元数据服务模式示意图

2.元数据服务模式

在服务器端启动MetaStore服务,客户端利用Thrift协议通过MetaStore服务访问元数据库。
元数据服务的访问方式更适合在生产环境中部署使用,相比内嵌式,该方式更加的灵活。

3.将Mysql做为元数据库,部署元数据服务

1)首先,将hive的元数据库配置为Mysql

[caomingyang@hadoop102 hive]$ vim conf/hive-site.xml

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

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://hadoop102:9083</value>

注意:在配置了此参数后,启动hive之前必须先启动元数据服务,否则,hive启动后无法连接到元数据服务
2)启动元数据服务

[caomingyang@hadoop102 hive]$ bin/hive --service metastore
2021-10-18 18:22:24: Starting Hive Metastore Server

注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作
1)启动 hive,查看表及表中数据,是否是Mysql数据库中的表。
2)在另一个窗口启动hive,测试多客户端能否同时连接操作。
思考:在hadoop103上使用元数据服务模式部署hive如何实现?

2.4 hive的两种访问方式

2.4.1 命令行的方式

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  1. 在前面的操作中,我们都是通过cli的方式访问hive的。
  2. 我们可以切身的体会到,通过cli的方式访问hive的不足,如:cli太过笨重,需要hive的jar支持。

2.4.2 HiveServer2模式

1.JDBC访问Hive示意图:
在这里插入图片描述
2. JDBC方式访问Hive
JDBC方式,本质上是将hive包装为服务发布出去,开发者使用JDBC的方式连接到服务,从而操作hive。
3. 连接之前要开启Hiveserver2
1)在hive-site.xml文件中添加如下配置信息

<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>hadoop102</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
</property>
  1. 重启MetaStore服务
[caomingyang@hadoop102 hive]$ bin/hive --service metastore

3)开启hive服务(这里需要考虑元数据的访问方式,如何使用元数据服务的模式,需要提前开启元数据服务)

[caomingyang@hadoop102 hive]$ bin/hive --service hiveserver2

4)启动beeline客户端(需要多等待一会,否则会报错连不上)

[caomingyang@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n caomingyang

5)注意:如果出现异常报错,如caomingyang is not allowed to impersonate caomingyang

2.5 编写启动metastore和hiveserver2脚本(了解)

2.5.1 Shell命令介绍

前台启动的方式导致需要打开多个shell窗口,可以使用如下方式后台方式启动
1.nohup 放在命令开头,表示不挂起,也就是关闭终端进程也会继续保持运行状态
2./dev/null 是linux文件系统中的一个文件,被称为黑洞,所有写入该文件的内容会被自动丢弃。
3.文件描述符 0 标准输入
1 标准输出
2 标准错误
4.2>&1 表示将错误重定向到标准输出上
5.& 放在命令结尾,表示后台运行
一般会组合使用:
$ nohup [xxx命令操作] 1> file 2>&1 &
表示将xxx命令运行的结果输出到file中,并保持命令启动的进程在后台运行。
如上命令不要求掌握。
使用上述方式,启动元数据服务和hive服务。

[caomingyang@hadoop102 hive]$ nohup hive --service metastore 2>&1 &
[caomingyang@hadoop102 hive]$ nohup hive --service hiveserver2 2>&1 &

2.5.2 编写脚本

内如如下,此脚本的编写不需要掌握,直接拿来使用即可

[caomingyang@hadoop102 hive]$ vim bin/hive2.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 &"
    cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 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

3)添加执行权限

[caomingyang@hadoop102 hive]$ chmod u+x bin/hive2.sh

4)启动Hive后台服务

[caomingyang@hadoop102 hive]$ bin/hive2.sh start

2.6 Hive常用交互命令

2.6.1 查看bin/hive 命令帮助 -help

[caomingyang@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
                                       应用于hive命令的变量替换。如:-d A=B 或者 –-define A=B
--database <databasename>     Specify the database to use
                                   指定要使用的数据库
 -e <quoted-query-string>         SQL from command line
                                       命令行中的SQL语句
 -f <filename>                      SQL from files
                                       文件中的SQL语句
 -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
                                   应用于hive命令的变量替换,如:--hivevar A=B
 -i <filename>                      Initialization SQL file
                                       初始化SQL文件
 -S,--silent                        Silent mode in interactive shell
                                      交互式Shell中的静默模式
 -v,--verbose                      Verbose mode (echo executed SQL to the console)
                                      详细模式(将执行的SQl回显到控制台)
                                      

2.6.2 命令中参数-e的使用

hive的 -e参数作用,可以不进入hive的交互窗口执行sql语句

[caomingyang@hadoop102 hive]$ bin/hive -e "select * from test2;"
……
Logging initialized using configuration in jar:file:/opt/module/hive/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true
Hive Session ID = 8f19d950-9936-4543-8b32-501dd61fa395
OK
1002
Time taken: 1.918 seconds, Fetched: 1 row(s)

2.6.3 命令中参数-f的使用

使用-f参数,可以不进入hive交互窗口,执行脚本中所有sql语句
1)在/opt/module/hive/下创建datas目录并在datas目录下创建hivef.sql文件

[caomingyang@hadoop102 hive]$ mkdir /opt/module/hive/datas
[caomingyang@hadoop102 hive]$ touch /opt/module/hive/datas/hive-f.sql

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

[caomingyang@hadoop102 datas]$ vim /opt/module/hive/datas/hive-f.sql
select * from test2;

3)执行文件中的sql语句

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

4)我们还可以通过执行文件中的sql语句,将结果写入指定文件中

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

2.7 Hive常见属性配置

2.7.1 Hive运行日志信息配置

  1. Hive的log默认存放路径:/tmp/caomingyang/hive.log(当前用户名下)
  2. 修改hive的log存放路径:到/opt/module/hive/logs
  • 修改conf目录下hive-log4j2.properties.template文件名称为hive-log4j2.properties
[caomingyang@hadoop102 hive]$ mv conf/hive-log4j2.properties.template conf/hive-log4j2.properties
  • 在hive-log4j.properties文件中修改log存放位置
[caomingyang@hadoop102 hive]$ vim conf/hive-log4j2.properties
property.hive.log.dir=/opt/module/hive/logs
  • 关闭hive并再次启动,观察目录/opt/module/hive/logs下是否产生日志

2.7.2 Hive启动JVM堆内存配置

  1. 问题:
    新版Hive启动时,默认申请的JVM堆内存大小为256M,内存太小,导致若后期开启本地模式,执行相对复杂的SQL经常会报错:java.lang.OutOfMemoryError: Java heap space
    解决:修改HADOOP_HEAPSIZE参数的值
    修改 /opt/module/hive/conf/ 下的hive-env.sh.template
[caomingyang@hadoop102 hive]$ mv conf/hive-env.sh.template conf/hive-env.sh
[caomingyang@hadoop102 hive]$ vim conf/hive-env.sh
……
export HADOOP_HEAPSIZE=1024

2.7.3 hive窗口打印默认库和表头

  1. 问题:在hive命令行交互窗口中,切换数据库后,不会提示当前所在数据库是哪个,并且在列出的查询结果中也不会带有列名的信息,使用中多有不便。
  2. 配置:可以修改hive.cli.print.header和hive.cli.print.current.db两个参数的值,打印出当前库头。
    编辑hive-site.xml添加如下两个配置:
<property>
    <name>hive.cli.print.header</name>
    <value>true</value>
  </property>
   <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>

2.7.4 参数配置方式

  1. set 命令使用:查看当前所有的配置信息
hive>set;
  1. 配置参数的三种方式:
    配置参数的三种方式
  2. 三种配置方式的优先级
    上述三种设定方式的优先级依次递增。即 配置文件 < 命令行参数 < 参数声明(代码中声明)
    注意:某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。
  3. 测试三种配置方式优先级
1)在2.8.1中配置文件中设置了hive.cli.print.header和 hive.cli.print.current.db这两个参数。
[caomingyang@hadoop102 hive]$ bin/hive
hive (default)> select * from test2;
OK
test2.id
1002
Time taken: 1.565 seconds, Fetched: 1 row(s)
2)通过set命令,设置hive.cli.print.current.db 参数位false 
hive(default)> set hive.cli.print.current.db = false;
hive>
3)退出,重启hive,命令如下
[caomingyang@hadoop102 hive]$ bin/hive –hiveconf hive.cli.print.current.db = false
hive>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值