这一章我们开始学习如何搭建 Hive 的3种运行模式,先从最简单的内嵌模式开始。
在开始安装 Hive 之前,我们需要提前在 CentOS 7上安装好 JDK、Hadoop完全分布式集群以及 MySQL数据库后才开始安装 Hive。
如果不知道怎么安装的同学请看本篇文章:
https://cwiki.apache.org/confluence/display/Hive//LanguageManual
https://dlcdn.apache.org/hive/
https://github.com/apache/hive
虚拟化软件:VMware Workstation Pro 12+ 或者 Oracle VM VirtualBox v6.1.28
Linux 发行版本:CentOS-7-x86_64-Minimal-1810.iso
远程连接工具:MobaXterm v20.3 或者 XShell 6
JDK:jdk1.8.0_202
Hadoop:hadoop-2.7.7
数据库驱动包:mysql-connector-java-5.1.49
数据库连接工具:Navicat Premium 15+ 或者 MySQL Workbench
Hive:hive-2.3.4
1、下载 Hive 安装包
我们可以通过 2.1.3 小节提供链接找到对应的版本进行下载。
/opt/softwares
目录下。
2、解压 Hive 安装包
使用解压命令解压 Hive:
[root@master software]# tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /opt/
修改解压包名称:
[root@master software]# cd /opt
[root@master opt]# mv apache-hive-2.3.4-bin hive-2.3.4
3、配置 Hive 环境变量
/etc/profile
[root@master conf]# vi /etc/profile
# 添加如下代码
# HIVE_HOME
export HIVE_HOME=/opt/hive-2.3.4
export PATH=$PATH:$HIVE_HOME/bin
:wq
[root@master conf]# source /etc/profile
4、修改 hive-env.sh 配置文件
hive-env.sh.template
[root@master conf]# cp hive-env.sh.template hive-env.sh
使用 vi 命令打开改文件,修改如下信息:
# 指定 Hadoop 的安装目录
HADOOP_HOME=/opt/hadoop-2.7.7
# 指定 Hive 配置文件目录路径
export HIVE_CONF_DIR=/opt/hive-2.3.4/conf
# 指定 Hive 的依赖库路径
export HIVE_AUX_JARS_PATH=/opt/hive-2.3.4/lib
:wq
hive-site.xml
文件不存在,我们首先需要利用模板文件:hive-default.xml.template
[root@master opt]# cd cd hive-2.3.4/conf/
[root@master conf]# cp hive-default.xml.template hive-site.xml
hive-site.xml
文件做如下配置便可:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/hive-2.3.4/iodir</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/hive-2.3.4/iodir</value>
</property>
以上配置信息只需要修改后面两项即可,就可以使用内嵌 Derby 模式了。
start-dfs.sh
和 start-yarn.sh
这种存储方式需要在本地运行一个 MySQL 服务器。
hive-site.xml
中的如下配置信息:
1)配置连接驱动名为:com.mysql.jdbc.Driver
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
2)修改连接 MySQL 的URL:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/metastore?useSSL=false&createDatabaseIfNotExist=true</value>
</property>
3)修改连接数据库的用户名和密码:
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
4)修改 Hive 数据仓库地址在 HDFS 上的路径:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
</property>
$HIVE_HOME/lib
[root@master mysql-connector-java-5.1.49]# cp mysql-connector-java-5.1.49-bin.jar /opt/hive-2.3.4/lib/
6)初始化 Hive 源数据库:
[root@master hive-2.3.4]# schematool -initSchema -dbType mysql -verbose
7)登陆 MySQL 服务,查看源数据库是否初始化成功:
[root@master ~]# mysql -uroot -p
# 查看数据库:metastore
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| metastore |
| mysql |
| performance_schema |
| sys |
+--------------------+
# 切换到 metastore 数据库
mysql> use metastore;
# 查看表
mysql> show tables;
+---------------------------+
| Tables_in_metastore |
+---------------------------+
| aux_table |
| bucketing_cols |
| cds |
......
8)启动 Hive:
[root@master hive-2.3.4]# hive
hive-site.xml
配置文件中的 javax.jdo.option.ConnectionURL
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://改为mysql服务所在的主机或者IP地址:3306/metastore?useSSL=false&createDatabaseIfNotExist=true</value>
</property>
hive-site.xml
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
2)启动 metastore:
[root@master hive-2.3.4]# hive --service metastore &
2022-04-27 14:53:12: Starting Hive Metastore Server
3)启动 hive:
[root@master hive-2.3.4]# hive
默认情况下,Web UI 端口为 10002。
如果要开启 Web UI 需要在 hive-site.xml
配置文件中修改配置:
<property>
<name>hive.server2.webui.host</name>
<value>127.0.0.1</value>
</property>
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
1)在 hive-site.xml
文件中添加如下配置信息:
<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
2)启动
[root@master hive-2.3.4]# hive --service hiveserver2 &
2022-04-27 15:03:57: Starting HiveServer2
3)启动 beeline 客户端(需要多等待一会儿,可能要几分钟)
[root@master hive-2.3.4]# bin/beeline -u jdbc:hive2://master:10000 -n root
4)看到如下输出信息:
Connecting to jdbc:hive2://master:10000
Connected to: Apache Hive (version 2.3.4)
Driver: Hive JDBC (version 2.3.4)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.3.4 by Apache Hive
0: jdbc:hive2://master:10000>
问题一:
解决办法一:需要将 Hadoop 集群停掉,在所有节点 core-site.xml
文件中添加如下配置信息:
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
在 hive-site.xml 文件中配置如下信息:
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
重新启动 Hadoop 集群即可。
启动 Hive 后,我们进入 Hive Shell 命令行界面,在该界面中我们可以执行对表数据的增删改查操作。
可以使用 hive -help
查看相关的命令:
[root@master hive-2.3.4]# 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)
-e
[root@master hive-2.3.4]# hive -e "select * from emp;"
-f
/opt/apps/hive-2.3.4/
[root@master data]# touch hivef.sql
hivef.sql
show tables;
select * from emp;
hivef.sql
[root@master data]# hive -f /opt/apps/hive-2.3.4/data/hivef.sql
(4)执行 hivef.sql
文件中的 sql 语句并将结果写入文件中:
[root@master data]# hive -f /opt/apps/hive-2.3.4/data/hivef.sql > /opt/apps/hive-2.3.4/data/hive_result.txt
-e
和 -f
1)退出 hive 窗口命令:
hive> quit;
hive> exit;
hive cli
命令窗口中如何查看 hdfs
hive> dfs -ls /;
所有历史命令:
(1)进入到当前用户的根目录:/root
(2)查看 .hivehistory
文件
[root@master data]# cd /root
[root@master root]# cat .hivehistory
2.3 小节
修改了 hive-site.xml
2.8.1 Hive 运行日志信息配置
/tmp/root/hive.log
目录下(当前用户名下)
2)修改 hive 的 log 存放日志到 /opt/apps/hive-2.3.4/logs
(1)修改 /opt/apps/hive-2.3.4/conf/hive-log4j2.properties.template
文件名称为 hive-log4j2.properties
[root@master data]# cd /opt/apps/hive-2.3.4/conf
[root@master conf]# mv hive-log4j2.properties.template hive-log4j2.properties
hive-log4j2.properties
hive.log.dir=opt/apps/hive-2.3.4/logs
在 hive cli
环境里面,我们需要显示当前所在的数据库或者查询筛选数据显示字段信息,设置如下:
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
重新登陆 hive ,就可以看到如下信息:
hive (default) >
default
2.8.3 参数配置方式
Hive 中的参数配置方式主要有3中方式:配置文件、命令行参数、参数声明。
1、配置文件方式
hive 默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml
2、命令行参数方式
-hiveconf param=value
[root@master hive-2.3.4]# hive -hiveconf mapred.reduce.tasks=10;
查看设置参数是否生效:
hive (default)> set mapred.reduce.tasks;
3、参数声明方式
SET
关键字设置参数。如:
hive (default)> set mapred.reduce.tasks=100;
参看设置参数是否生效:
hive (default)> set mapred.reduce.tasks;
依次递增,即 配置文件<命令行参数<参数声明。
我们本章详细学习了 Hive 的安装、Hive 的3中运行模式、Hive 常用的交互命令以及其他操作命令、还介绍了 Hive 常见属性配置以及参数配置的3种方式。重点是我们掌握 Hive 的安装步骤、运行模式之间的区别。
下一张我们将学习 Hive 的数据类型。