目录
1:官网下载安装包 Index of /dist/hive 。
2:解压缩安装包
3:修改 hive配置。
a- 指定hive的元数据 存储位置
b- 指定元数据库的驱动程序(以 mysql为元数据库为例)
c- 指定元数据库的 用户名和密码
d- 指定数据在HDFS上的存储路径
e- 设置方便操作,查看的属性。 在 命令行 中显示 数据库名和数据的表头
f- 设置小规模数据时,使用本地模式,提高效率。本机练习时常用
4:将对应的mysql驱动程序拷贝到 hive-2.3.7/lib 下。
5:配置环境变量 。
6:初始化 元数据库
7:启动 hive,验证是否部署成功
二: 生产环境的元数据管理
1- 在全部的节点上解压安装hive。
2- 启动hive metastore服务
3- 修改hive 客户端的 hdfs-site.xml。
4- 启动hive客户端
5- 高可用测试
前提: 安装了 hadoop(提供数据的存储HDFS) 和 mysql (作为hive的元数据库)。
hadoop的安装文档: hadoop安装部署(学习)
mysql新建了hive的用户。 用户名为 hive , 密码为 "12345678"
软件 | node1 | node2 | node3 |
hadoop | √ | √ | √ |
hive | √ | ||
mysql | √ |
以hive-2.3.7为例
以 安装目录为 /opt/cluster/servers 为例,
# 解压到hive 到 /opt/cluster/servers/
tar zxvf apache-hive-2.3.7-bin.tar.gz -C /opt/cluster/servers/
# 重命名
mv /opt/cluster/servers/apache-hive-2.3.7-bin /opt/cluster/servers/hive-2.3.7
可以拷贝 conf下的 hive-default.template.xml。也可以新建配置文件。
以新建 hive-site.xml为例。新建文件后,新增内容.
javax.jdo.option.ConnectionURL
jdbc:mysql://node3:3306/hivemetadata?createDatabaseIfNotExist=true&useSSL=false
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionUserName
hive
username to use against metastore database
javax.jdo.option.ConnectionPassword
12345678
password to use against metastore database
hive.metastore.warehouse.dir
/user/hive/warehouse
hive.cli.print.current.db
true
hive.cli.print.header
true
hive.exec.mode.local.auto
true
注意jdbc的连接串,如果没有 useSSL=false 会有大量警告
在xml文件中 & 表示 &
注意驱动程序版本要对应
我的mysql是 5.7.24, 驱动程序版本是 5.1.46, mysql-connector-java-5.1.46.jar
配置hive的环境变量。方便后续的使用。
vi /etc/profile
# 在 /etc/profile 文件中增加环境变量
export HIVE_HOME=/opt/cluster/servers/hive-2.3.7
export PATH=$PATH:$HIVE_HOME/bin
# 执行并生效
source /etc/profile
schematool -dbType mysql -initSchema
# 启动hive服务之前,请先启动hdfs、yarn的服务
[root@node123 ~]$ hive
hive> show functions;
上面的配置,在hdfs-site.xml中暴露了元数据库(mysql)的连接信息(地址,驱动,用户名和密码)。所以在生产环境一般不采用这种方式。而是在上层暴露一个服务metastore,这个服务协议thift要兼容多语言(java,python等),多驱动(mysql,oracle等),为外部访问Hive元数据提供入口,通过它来屏蔽了 数据库访问的地址,驱动,用户名和密码。
第一种的元数据管理模式(元数据存在mysql,hdfs-site.xml中配置元数据库的连接信息),一般叫本地模式。每个hive 服务 都内嵌一个metastore(metastore是管理元数据的服务)。
生产环境一般采用的是远程模式,单独起一个metastore服务,通过它统一对外面提供元数据访问入口。它自己去元数据库mysql拿元数据。
生产环境中元数据管理的远程模式配置,以3个节点为例,服务配置如下,配置2个hive metastore,可以作为HA,提高可用性
节点 | hive metastore | hive client |
node1 | 是 | |
node2 | 是 | |
node3 | 是 |
参考之前解压安装的步骤,并配置hive的环境变量
在这里就是 node1 和 node3 。编辑 hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://node3:3306/hivemetadata?createDatabaseIfNotExist=true&useSSL=false
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionUserName
hive
username to use against metastore database
javax.jdo.option.ConnectionPassword
12345678
password to use against metastore database
hive.metastore.warehouse.dir
/user/hive/warehouse
hive.cli.print.current.db
true
hive.cli.print.header
true
hive.exec.mode.local.auto
true
拷贝 mysql的驱动到 $HIVE_HOME/lib 下,注意要和mysql的版本对应上
初始化元数据库,在node1 和3 执行命令
schematool -dbType mysql -initSchema
在 node1 和 node3 中执行
nohup hive --service metastore &
metastore的默认服务端口是9083, 我这里使用的是lsof命令,其他的网络检查端口也可以。
lsof -i:9083
告知客户端metastore的地址,不需要配置元数据库(mysql)的连接信息。
hive.metastore.uris
thrift://node1:9083,thrift://node2:9083
hive.metastore.warehouse.dir
/user/hive/warehouse
hive.cli.print.current.db
true
hive.cli.print.header
true
hive.exec.mode.local.auto
true
在node2 执行
hive
7.1-进入hive客户端,随便执行命令。比如show databases
show databases;
7.2- 查看目前连接在哪个节点的metastore
分别在 node1,node3上执行
# metastore默认的服务端口是 9083
lsof -i:9083
在 链接的节点上会有两条信息
7.3- 杀死已连接的 metastore进程
到对应的节点 kill 9
kill 9
7.4- 再执行show databases;还是能正常执行命令。且链接到另外一个节点上