三种模式的区别

安装模式

matedata位置存放位置

matestore部署方式

内嵌模式

本地内嵌数据derby中

内嵌

本地模式

独立数据库中

内嵌

远程模式

独立数据库中

独立启动

hive依赖hadoop,安装hive之前需要确保hadoop集群正常启动
hadoop安装参考:centos7安装hadoop(集群模式) - zhangyukun

几种组件之间的关系

metedata metastore hiveserver2 beeline hive客户端 之间的关系

  • metadate
    metadata是元数据,是描述hive的数据表和hdfs上的数据文件是怎么联系起来的。
    或者说metadata就是描述数据文件映射成表的描述文件,当然还有一些事描述数据库等等的元数据。
    默认是存储在内嵌的derby数据库中,可以指定到外部数据库中。
    常见的数据库都可以用于存放hive的元数据mysql,oracle,postgresql,sql server,DB2
  • metastore
    metastore 负责存取元数据,但是它不支持多个客户端连接,多个连接需要由hiveserver2来维持。
    独立启动的时候占用8083端口,启动hive客户端如果没有配置hive.metastore.uris参数会启动一个内嵌的不占用端口
  • hiveserver2
    维持和客户端的连接,支持多个客户端的远程连接,维持权限
    hiveserver2通过hive-site.xml里面的hive.metastore.uris参数确定metastore的位置
    hiveserver2默认占用10000端口,web界面端口10002
  • beeline
    一个可以连接hiveserver2的命令行工具
  • hive客户端
    一个只能直接连接metastore的命令行工具
    hive客户端通过hive-site.xml里面的hive.metastore.uris参数确定metastore的位置,如果没有这个参数就会启动一个内嵌的metastore。

内嵌模式

  1. 修改hadoop配置文件,设置代理用户主机和代理组
    cd /opt/hadoop-3.3.6/etc/hadoop
    vi core-site.xml
<!--hive代理用户配置,登录到hiveserve2的用户会被模拟成指定用户,下面是配置不限制任何用户模拟 hadoop程序当前用户  -->
	<!--xxx是安装hadoop的用户名,如果是root用户安装的就是root,如果用的是hadoop用户安装的就是hadoop  -->
	<!--这两个配置如果没有正常配置,beeline客户端 就不能正常连接到 hiveserver2  -->
	<property>
		<name>hadoop.proxyuser.root.hosts</name>
		<value>*</value>
	</property>
	<property>
		<name>hadoop.proxyuser.root.groups</name>
		<value>*</value>
	</property>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

分发配置,然后重启hadoop集群

  1. 用hadoop里面guava新版本的jar包替换hive里面的jar包
#复制hadoop中版本较新的guava包到hive
cp /opt/hadoop-3.3.6/share/hadoop/common/lib/guava-27.0-jre.jar  /opt/apache-hive-3.1.3-bin/lib/

#删除或者改后缀让老的包失效
cd /opt/apache-hive-3.1.3-bin/lib/
mv guava-19.0.jar guava-19.0.jar.bak
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  1. 下载hive包(apache-hive-3.1.3-bin.tar.gz),然后解压,我再放/opt下面
tar -zxvf apache-hive-3.1.3-bin.tar.gz
  • 1.
  1. 修改hive配置文件
cd /opt/apache-hive-3.1.3-bin/conf
cp hive-env.sh.template hive-env.sh
  • 1.
  • 2.

vi hive-env.sh

#配置hadoop根目录(如果配置了环境变量可以不配置)
HADOOP_HOME=/opt/hadoop-3.3.6

#hive配置文件目录,默认就在这里,可以不用配置
export HIVE_CONF_DIR=/opt/apache-hive-3.1.3-bin/conf

#hive 依赖jar包的位置,默认就是这里,所以也可以不配
export HIVE_AUX_JARS_PATH=/opt/apache-hive-3.1.3-bin/lib
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  1. 初始化数据库
./schematool -dbType derby -initSchema
  • 1.

初始化以后在当前目录多了一个存储metastore_db,和一个derby.log文件

[root@vm200 bin]# ll
total 68
-rwxr-xr-x 1 hadoop hadoop   881 Oct 24  2019 beeline
-rw-rw-r-- 1 hadoop hadoop 22226 Mar 19 15:23 derby.log
drwxrwxr-x 3 hadoop hadoop  4096 Mar 19 14:12 ext
-rwxr-xr-x 1 hadoop hadoop 10158 Mar 29  2022 hive
-rwxr-xr-x 1 hadoop hadoop  2085 Feb 28  2022 hive-config.sh
-rwxr-xr-x 1 hadoop hadoop   885 Oct 24  2019 hiveserver2
-rwxr-xr-x 1 hadoop hadoop   880 Oct 24  2019 hplsql
-rwxr-xr-x 1 hadoop hadoop  3064 Oct 24  2019 init-hive-dfs.sh
drwxrwxr-x 5 hadoop hadoop   133 Mar 19 15:23 metastore_db
-rwxr-xr-x 1 hadoop hadoop   832 Oct 24  2019 metatool
-rwxr-xr-x 1 hadoop hadoop   884 Oct 24  2019 schematool
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  1. 启动hive客户端
    只能在执行了初始化的目录启动,并且如果不同目录方位的到的metastore不一样,读取到的数据也不一样
./hive
  • 1.

本地模式

  1. 安装mysql
    参考:
  2. 修改hadoop配置文件,设置代理用户主机和代理组
    cd /opt/hadoop-3.3.6/etc/hadoop
    vi core-site.xml
<!--hive代理用户配置,登录到hiveserve2的用户会被模拟成指定用户,下面是配置不限制任何用户模拟 hadoop程序当前用户  -->
	<!--xxx是安装hadoop的用户名,如果是root用户安装的就是root,如果用的是hadoop用户安装的就是hadoop  -->
	<!--这两个配置如果没有正常配置,beeline客户端 就不能正常连接到 hiveserver2  -->
	<property>
		<name>hadoop.proxyuser.xxx.hosts</name>
		<value>*</value>
	</property>
	<property>
		<name>hadoop.proxyuser.xxx.groups</name>
		<value>*</value>
	</property>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

分发配置,然后重启hadoop集群

  1. 下载hive包(apache-hive-3.1.3-bin.tar.gz),然后解压,我再放/opt下面
tar -zxvf apache-hive-3.1.3-bin.tar.gz
  • 1.
  1. 用hadoop里面guava新版本的jar包替换hive里面的jar包
#复制hadoop中版本较新的guava包到hive
cp /opt/hadoop-3.3.6/share/hadoop/common/lib/guava-27.0-jre.jar  /opt/apache-hive-3.1.3-bin/lib/

#删除或者改后缀让老的包失效
cd /opt/apache-hive-3.1.3-bin/lib/
mv guava-19.0.jar guava-19.0.jar.bak
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  1. 上传mysql驱动包(mysql-connector-java-8.0.15.jar),到hive的 lib目录
  2. 创建配置文件hive-site.xml。(hive-default.xml.template里面有很多默认配置,下面的配置里面都有)
cd /opt/apache-hive-3.1.3-bin/conf
cp hive-env.sh.template hive-env.sh
  • 1.
  • 2.

vi hive-site.xml

<configuration>

	<!-- mysql配置 -->
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://192.168.100.66:3306/hive?createDatabaseIfNotExist=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Hongkong&useSSL=false&allowPublicKeyRetrieval=true</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.cj.jdbc.Driver</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>root</value>
	</property>
	
	<!-- 关闭metastore授权 -->
	<property>
		<name>hive.metastore.event.db.notification.api.auth</name>
		<value>false</value>
	</property>
	<!-- 关闭元数据存储版本验证,如果你使用了之前版本hive初始化的元数据可能会报错,这个配置是关闭验证 -->
	<!-- metastore存放的版本本信息在version表中 -->
	<property>
		<name>hive.metastore.schema.verification</name>
		<value>false</value>
	</property>
	


</configuration>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  1. 初始化数据库
#初始化数据库
cd /opt/apache-hive-3.1.3-bin/bin
./schematool -initSchema -dbType mysql -verbos
  • 1.
  • 2.
  • 3.
  1. 初始化数据库以后会在mysql 中创建对应的数据库和表
  2. 启动客户端
./hive
  • 1.

远程模式

centos7安装hive_apache

  1. 安装mysql
    参考:
  2. 修改hadoop配置文件,设置代理用户主机和代理组
    cd /opt/hadoop-3.3.6/etc/hadoop
    vi core-site.xml
<!--hive代理用户配置,登录到hiveserve2的用户会被模拟成指定用户,下面是配置不限制任何用户模拟 hadoop程序当前用户  -->
	<!--xxx是安装hadoop的用户名,如果是root用户安装的就是root,如果用的是hadoop用户安装的就是hadoop  -->
	<!--这两个配置如果没有正常配置,beeline客户端 就不能正常连接到 hiveserver2  -->
	<property>
		<name>hadoop.proxyuser.root.hosts</name>
		<value>*</value>
	</property>
	<property>
		<name>hadoop.proxyuser.root.groups</name>
		<value>*</value>
	</property>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

分发配置,然后重启hadoop集群

  1. 下载hive包(apache-hive-3.1.3-bin.tar.gz),然后解压,我再放/opt下面
tar -zxvf apache-hive-3.1.3-bin.tar.gz
  • 1.
  1. 用hadoop里面guava新版本的jar包替换hive里面的jar包
#复制hadoop中版本较新的guava包到hive
cp /opt/hadoop-3.3.6/share/hadoop/common/lib/guava-27.0-jre.jar  /opt/apache-hive-3.1.3-bin/lib/

#删除或者改后缀让老的包失效
cd /opt/apache-hive-3.1.3-bin/lib/
mv guava-19.0.jar guava-19.0.jar.bak
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  1. 上传mysql驱动包(mysql-connector-java-8.0.15.jar),到hive的 lib目录
  2. 创建配置文件hive-site.xml。(hive-default.xml.template里面有很多默认配置,下面的配置里面都有)
cd /opt/apache-hive-3.1.3-bin/conf
cp hive-env.sh.template hive-env.sh
  • 1.
  • 2.

vi hive-site.xml

<configuration>

	<!-- mysql配置 -->
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://192.168.100.66:3306/hive?createDatabaseIfNotExist=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Hongkong&useSSL=false&allowPublicKeyRetrieval=true</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.cj.jdbc.Driver</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>root</value>
	</property>
	
	<!-- 关闭metastore授权 -->
	<property>
		<name>hive.metastore.event.db.notification.api.auth</name>
		<value>false</value>
	</property>
	<!-- 关闭元数据存储版本验证,如果你使用了之前版本hive初始化的元数据可能会报错,这个配置是关闭验证 -->
	<!-- metastore存放的版本本信息在version表中 -->
	<property>
		<name>hive.metastore.schema.verification</name>
		<value>false</value>
	</property>
	
	<!-- 远程部署的metastore服务地址(如果不配置这个,就会本地启动一个metastore,配了就需要独立启动) -->
	<!--- hive客户端就是通过这个配置找到 metastore的 -->
	<property>
		<name>hive.metastore.uris</name>
		<value>thrift://vm200:9083</value>
	</property>
	
	<!-- H2S 运行在哪里机子上 -->
	<property>
		<name>hive.server2.thrift.bind.host</name>
		<value>vm200</value>
	</property>
	

</configuration>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  1. 初始化数据库
#初始化数据库
cd /opt/apache-hive-3.1.3-bin/bin
./schematool -initSchema -dbType mysql -verbose
  • 1.
  • 2.
  • 3.
  1. 初始化数据库以后会在mysql 中创建对应的数据库和表
  2. 启动metastore
#默认是前台启动
./hive --service metastore


#后台启动
 nohup ./hive --service metastore &
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  1. 启动 hiveserver2
    hiveserve2连接的是metastore(更具hive.metastore.uris参数指定的地址)
nohup ./hive --service hiveserver2 &
  • 1.
  1. 启动客户端(hive客户端默认连接的本地的metastore)
./hive
  • 1.
  1. 启动beeline客户端,并且连接hiveserver2
#启动beeline客户端
./beeline

#然后使用连接
! connect jdbc:hive2://vm200:10000
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.