如何搭建Hive环境
Hive 是一个 Hadoop 平台的上的数据仓库工具,可以将结构化的的诗句映射成一张表,并提供了类似 SQL 的查询的功能。
HIve 没有集群的概念,只需要将 Hive 部署在 Hadoop 平台上就可以使用。
本文来介绍一种搭建 Hive 环境的方式。
搭建 Hive 所需的软件和环境:
- 搭建了 Hadoop 集群的环境
- Hive-1.2.2
搭建 Hadoop 集群可以参照我之前的文章,本文继续在之前的环境中进行,具体的机器名称及 IP 以自己的实际环境为准。
软件安装
将 Hive 安装包解压到目标目录下:
$ tar -zxvf apache-hive-1.2.2-bin.tar.gz -C /opt/module/
然后将 hive 目录重命名:
$ mv apache-hive-1.2.2-bin/ hive-1.2.2
软件配置
需要配置 hive 的环境参数:
$ cd hive-1.2.2
$ cp conf/hive-env.sh.template conf/hive-env.sh
配置 hadoop 的位置:
$ vi conf/hive-env.sh
export HADOOP_HOME=/opt/module/hadoop-2.9.2
export HIVE_CONF_DIR=/opt/module/hive/conf
在启动 hive 之前,需要先启动 hdfs 和 yarn:
$ sbin/start-dfs.sh
$ sbin/start-yarn.sh
在 hdfs 上创建 hive 的根目录,并赋予权限:
$ bin/hadoop fs -mkdir /tmp
$ bin/hadoop fs -mkdir -p /user/hive/warehouse
$ bin/hadoop fs -chmod g+w /tmp
$ bin/hadoop fs -chmod g+w /user/hive/warehouse
然后就可以启动 hive了:
$ bin/hive
hive 到这里就可用了,但是 hive 在开始使用之后,会将创建的表的元数据存储在自带的本地数据库中,这样不安全,所以一般都会将这些数据单独存储到 MySQL中。
metastore 配置
在这里我介绍一种安装 MySQL 的方式,但这不是唯一的方式,可以根据自己的情况自行选择安装方式。
安装 mysql
$ wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
$ yum -y install mysql57-community-release-el7-10.noarch.rpm
$ yum -y install mysql-community-server
mysql 设置
$ systemctl start mysqld.service
获取 MySQL 密码
$ grep "password" /var/log/mysqld.log
2020-07-08T14:43:58.666069Z 1 [Note] A temporary password is generated for root@localhost: SySy,a<j5cBw
然后就可以登录 MySQL:
$ mysql -uroot -p"SySy,a<j5cBw"
修改密码,后续就可以使用 root进行登录了:
$ ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
Hive 连接 MySQL
Hive 连接MySQL 需要添加一个 mysql 的 connector,拷贝到 hive 的 lib 目录下:
$ cp mysql-connector-java-5.1.49-bin.jar /opt/module/hive-1.2.2/lib/
然后创建一个 hive-site.xml
的配置文件:
$ touch conf/hive-site.xml
$ vi conf/hive-site.xml
在配置文件中填充以下内容,就是连接 MySQL 所需的配置:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
然后重新启动 hive:
$ bin/hive
正常启动后可以发现 mysql 中多了一个 metastore 的数据库,这个数据库存储着 hive 的中数据表的元数据。
文 / Rayjun