一、基本信息:
易百教程:https://www.yiibai.com/hive
下载地址:http://www.apache.org/dyn/closer.cgi/hive/
二、编写目的
1、如何在 Hadoop 集群上安装部署 Hive
2、启动 Hive ,把元数据存储在 Hdfs 上
三、Hadoop 基础集群搭建
参考:https://blog.csdn.net/llwy1428/article/details/111144524
参考:https://blog.csdn.net/llwy1428/article/details/111464707
四、Hive 的安装
1、在 master 节点安装 Mysql 数据库(Mysql 数据库安装节点可以根据需要指定,不一定非要在 master 节点上)
参考:https://blog.csdn.net/llwy1428/article/details/84965680
2、创建 Hive 数据库,用户,赋予权限(此处我用的 root 用户)
[root@master ~]# mysql -uroot -proot
MariaDB [(none)]> create database hive;
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive |
| mysql |
| performance_schema |
+--------------------+
7 rows in set (0.00 sec)
3、节点创建 hive 用户
[root@master ~]# useradd hive
4、下载 Hive 的安装文件
[root@master ~]# wget -P /usr/bigdata/ https://mirror.bit.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
5、进入 /usr/bigdata/ 目录
[root@master ~]# cd /usr/bigdata/
6、解压文件 apache-hive-3.1.2-bin.tar.gz
[root@master bigdata]# tar zxvf apache-hive-3.1.2-bin.tar.gz
7、查看文件目录
8、创建目录
[root@master ~]# mkdir /usr/bigdata/apache-hive-3.1.2-bin/tmp
[root@master ~]# mkdir /usr/bigdata/apache-hive-3.1.2-bin/logs
9、进入 Hive 的配置文件目录
[root@master ~]# cd /usr/bigdata/apache-hive-3.1.2-bin/conf
10、在 master 节点 启动 Hadoop 集群的 HDFS 服务
[root@master ~]# /usr/bigdata/hadoop-3.3.0/sbin/start-dfs.sh
[root@master ~]# /usr/bigdata/hadoop-3.3.0/sbin/start-yarn.sh
11、在 HDFS 中创建 Hive 的数据存储目录
[root@master ~]# hadoop fs -mkdir /tmp
[root@master ~]# hadoop fs -mkdir -p /user/hive/warehouse
[root@master ~]# hadoop fs -chmod g+w /tmp
[root@master ~]# hadoop fs -chmod g+w /user/hive/warehouse
或
[root@master ~]# hdfs dfs -mkdir /tmp
[root@master ~]# hdfs dfs -mkdir -p /user/hive/warehouse
[root@master ~]# hdfs dfs -chmod g+w /tmp
[root@master ~]# hdfs dfs -chmod g+w /user/hive/warehouse
12、复制文件
[root@master conf]# cp hive-default.xml.template hive-site.xml
[root@master conf]# cp hive-env.sh.template hive-env.sh
[root@master conf]# cp hive-log4j2.properties.template hive-log4j2.properties
13、编辑 hive-site.xml 文件,配置信息
[root@master ~]# vim /usr/bigdata/apache-hive-3.1.2-bin/conf/hive-site.xml
修改内容
<configuration>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.exec.mode.local.auto</name>
<value>false</value>
<description> Let Hive determine whether to run in local mode automatically </description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.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>
<!-- 显示表的列名 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 显示数据库名称 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/bigdata/apache-hive-3.1.2-bin/tmp/</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/bigdata/apache-hive-3.1.2-bin/tmp/</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
</configuration>
14、修改 Hive 的可执行脚本 hive-env.sh
[root@master ~]# vim /usr/bigdata/apache-hive-3.1.2-bin/hive-env.sh
编辑内容
export HADOOP_HEAPSIZE=1024
HADOOP_HOME=/usr/bigdata/hadoop-3.3.0
export HIVE_CONF_DIR=/usr/bigdata/apache-hive-3.1.2-bin/conf
15、编辑配置文件 hive-log4j2.properties
[root@master ~]# vim /usr/bigdata/apache-hive-3.1.2-bin/hive-log4j2.properties
修改内容
property.hive.log.dir = /usr/bigdata/apache-hive-3.1.2-bin/logs
16、编辑文件 hive-config.sh
[root@master ~]# vim /usr/bigdata/apache-hive-3.1.2-bin/bin/hive-config.sh
修改内容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export HADOOP_HOME=/usr/bigdata/hadoop-3.3.0
export HIVE_HOME=/usr/bigdata/apache-hive-3.1.2-bin
17、给整个 Hive 目录修改赋予权限
[root@master ~]# chmod -755 -R /usr/bigdata/apache-hive-3.1.2-bin
18、编辑系统环境变量
[root@master ~]# vim /etc/profile
内容如下
export JAVA_HOME="/usr/lib/jvm/java-1.8.0"
export JRE_HOME="/usr/lib/jvm/java-1.8.0/jre"
export HADOOP_HOME="/usr/bigdata/hadoop-3.3.0"
export HIVE_HOME="/usr/bigdata/apache-hive-3.1.2-bin"
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$hive_HOME/lib
19、使新配置的环境变量生效
[root@master ~]# source /etc/profile
20、下载 java mysql 的驱动包 mysql-connector-java-5.1.46.jar
把 mysql-connector-java-5.1.46.jar 放在 /tmp 目录下
把 移动到 /usr/bigdata/apache-hive-3.1.2-bin/lib/ 目录下,并修改文件名 mysql-connector-java.jar
[root@master ~]# mv /tmp/mysql-connector-java-5.1.46.jar /usr/bigdata/apache-hive-3.1.2-bin/lib/mysql-connector-java.jar
21、Mysql 数据库初始化
[root@master ~]# schematool -initSchema -dbType mysql
Mysql 数据库初始化过程如下:
Mysql 数据库初始化结果(出现如下结果,表示初始化成功)
Initialization script completed
schemaTool completed
22、启动 Hive
[root@master ~]# /usr/bigdata/apache-hive-3.1.2-bin/bin/hive
或
[root@master ~]# hive
启动结果
五、Hive 基本命令
1、查看所有数据库列表
hive (default)> show databases;
2、创建数据库
hive (default)> create database db_test;
效果如下:
3、查看创建的数据库在 HDFS 中的信息(随意找一个 HDFS 客户端节点)
[root@master ~]# hadoop fs -ls /user/hive/warehouse
或
[root@master ~]# hdfs dfs -ls /user/hive/warehouse
效果如下
在任一节点执行 hdfs 命令
4、其他操作
hive (default)> create database hive_test;
hive (default)> use hive_test;
OK
Time taken: 0.026 seconds
hive (hive_test)> create table table_test(id string,name string,age int);
OK
Time taken: 0.362 seconds
hive (hive_test)> show tables;
OK
tab_name
db_test
table_test
Time taken: 0.024 seconds, Fetched: 1 row(s)
hive (hive_test)> insert into table_test values ('1','Tom',18);
hive (hive_test)> select * from table_test;
OK
table_test.id table_test.name table_test.age
1 Tom 18
Time taken: 0.208 seconds, Fetched: 1 row(s)
六、报错及解决方案
1、初始化报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
执行初始化
[root@master ~]# schematool -initSchema -dbType mysql
原因:
hadoop 和 hive 的两个 guava.jar 版本不一致
两个位置分别位于下面两个目录:
/usr/bigdata/apache-hive-3.1.2-bin/lib/
/usr/bigdata/hadoop/share/hadoop/common/lib/
解决办法:
删除低版本的那个,将高版本的复制到低版本目录下
具体操作如下:
[root@master ~]# ll /usr/bigdata/apache-hive-3.1.2-bin/lib/
guava-19.0.jar
[root@master ~]# ll /usr/bigdata/hadoop-3.3.0/share/hadoop/common/lib/
guava-27.0-jre.jar
[root@master ~]# rm -rf /usr/bigdata/apache-hive-3.1.2-bin/lib/guava-19.0.jar
[root@master ~]# cp /usr/bigdata/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar /usr/bigdata/apache-hive-3.1.2-bin/lib/
2、Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
版本:Hive-3.1.2
Hadoop 环境中,某个节点上执行 hive 命令时报如下错误:
Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
原因:
说明:环境由四台服务器组成的,Hive 元数据保存在 NameNode 节点上的Mysql中,直接在 NameNode 节点上启动Hive没问题,但是在其它的节点上就报错。
在 Hive2.0.0 以前的版本,需要在一个Hive的主节点上启动两个服务:metastore 、hiveserver2 才可以登陆到Hive的命令行下。
hive --service metastore &
hive --service hiveserver2 &
但是在2.0.0后不用启动这两个服务也可以直接敲 hive 进入命令模式。
然后上面的报错是在 hive-site.xml 文件中加入了以下几行配置:
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
但是由于 master 节点上并没有启动 metastore 服务。
解决方法:
1、如果是 Hive-2.0.0 以前的版本则需要在配置文件 hive-site.xml
中加入上面的配置,并在主节点上启动上面提到的两个服务:metastore 、hiveserver2
2、如果是 Hive-2.0.0 的版本,不用在配置文件中加上面的配置,也不用启动上两提到的两个服务,即可登陆。
至此,Centos7.x 基于 Hadoop 3.x 集群搭建部署 Hive 操作完毕,希望能够对您有所帮助!