基本原理

  • Hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供简略的SQL查问性能,能够将SQL语句转换为MapReduce工作进行运行。 其长处是学习成本低,能够通过类SQL语句疾速实现简略的MapReduce统计,不用开发专门的MapReduce利用,非常适宜数据仓库的统计分析。
  • Hive构建在基于动态批处理的Hadoop之上,因为Hadoop通常都有较高的提早并且在作业提交和调度的时候须要大量的开销。因而,Hive并不适宜那些须要低提早的利用,它最适宜利用在基于大量不可变数据的批处理作业,例如,网络日志剖析。
  • Hive的特点是:可伸缩(在Hadoop集群上动静的增加设施)、可扩大、容错、输入格局的涣散耦合。
  • Hive将元数据存储在关系型数据库(RDBMS)中,比方MySQL、Derby中。
  • Hive有三种模式连贯到数据,其形式是:单用户模式,多用户模式和近程服务模式。(也就是内嵌模式、本地模式、近程模式)。

零碎环境
Linux Ubuntu 20.04
OpenJDK-11.0.11
hadoop-3.2.2
mysql-8.0.25
mysql-connector-java-8.0.25.jar

前提条件
在Hadoop和mysql装置实现的根底上,搭建hive。


装置步骤
1.在Linux本地创立/data/hive1文件夹用来寄存安装包。

mkdir -p /data/hive1

切换到/data/hive1的目录下,应用wget命令下载apache-hive-2.3.8-bin.tar.gz和mysql-connector-java-8.0.25.jar。

cd /data/hive1wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gzwget https://dev.mysql.com/downloads/file/?id=504646

2.将/data/hive1目录下的apache-hive-2.3.8-bin.tar.gz,解压缩到/apps目录下。

tar -xzvf /data/hive1/apache-hive-2.3.8-bin.tar.gz -C /apps/

再切换到/apps目录下,将/apps/hive-1.1.0-cdh5.4.5,重命名为hive。

cd /apps  mv /apps/apache-hive-2.3.8-bin.tar.gz/ /apps/hive 

3.应用vim关上用户环境变量。

sudo vim ~/.bashrc

将Hive的bin目录,增加到用户环境变量PATH中,而后保留退出。

#hive config  export HIVE_HOME=/apps/hive  export PATH=$HIVE_HOME/bin:$PATH

执行source命令,使Hive环境变量失效。

source ~/.bashrc 

4.因为Hive须要将元数据,存储到Mysql中。所以须要拷贝/data/hive1目录下的mysql-connector-java-8.0.25.jar到hive的lib目录下。

cp /data/hive1/mysql-connector-java-8.0.25.jar/apps/hive/lib/ 

5.上面配置Hive,切换到/apps/hive/conf目录下,并创立Hive的配置文件hive-site.xml。

cd /apps/hive/conf  touch hive-site.xml    

应用vim关上hive-site.xml文件。

vim hive-site.xml

并将下列配置项,增加到hive-site.xml文件中。

<property>#javax.jdo.option.ConnectionDriverName:连贯数据库的驱动包。    <name>javax.jdo.option.ConnectionDriverName</name>    <value>com.mysql.jdbc.Driver</value>                                                                              </property><property>#javax.jdo.option.ConnectionUserName:数据库用户名。    <name>javax.jdo.option.ConnectionUserName</name>                                                                                                                           <value>root</value></property>                                                                                                                                                                                                        <property>#javax.jdo.option.ConnectionPassword:连贯数据库的明码。     <name>javax.jdo.option.ConnectionPassword</name>     <value>123456</value>                                                                         </property><property>     <name>hive.server2.thrift.port</name>     <value>10000</value></property><property>     <name>hive.server2.thrift.bind.host</name>     <value>127.0.0.1</value></property>


因为Hive的元数据会存储在Mysql数据库中,所以须要在Hive的配置文件中,指定mysql的相干信息。

javax.jdo.option.ConnectionURL:数据库链接字符串。
javax.jdo.option.ConnectionDriverName:连贯数据库的驱动包。
javax.jdo.option.ConnectionUserName:数据库用户名。
javax.jdo.option.ConnectionPassword:连贯数据库的明码。
此处的数据库的用户名及明码,须要设置为本身零碎的数据库用户名及明码。

6.另外,还须要通知Hive,Hadoop的环境配置。所以咱们须要批改hive-env.sh文件。

首先咱们将hive-env.sh.template重命名为hive-env.sh。

mv /apps/hive/conf/hive-env.sh.template  /apps/hive/conf/hive-env.sh 

应用vim关上hive-env.sh文件。

vim hive-env.sh

追加Hadoop的门路,以及Hive配置文件的门路到文件中。

# Set HADOOP_HOME to point to a specific hadoop install directory  # HADOOP_HOME=${bin}/../../hadoop  HADOOP_HOME=/apps/hadoop  # Hive Configuration Directory can be controlled by:  # export HIVE_CONF_DIR=  export HIVE_CONF_DIR=/apps/hive/conf  


7.下一步是配置Mysql,用于存储Hive的元数据。

首先,须要保障Mysql曾经启动。执行以下命令,查看Mysql的运行状态。

sudo service mysql status 


通过输入,能够看出Mysql曾经启动。如果未启动须要执行启动命令。

sudo service mysql start

如果未装置Mysql则须要执行装置命令。若咱们的环境已装置Mysql,则无需执行此步。

sudo apt-get install mysql-server 

8.开启Mysql数据库。

mysql -u root -p

查看数据库。

show databases;

上面,输出exit退出Mysql。

exit 

9.执行测试。因为Hive对数据的解决,依赖MapReduce计算模型,所以须要保障Hadoop相干过程曾经启动。

输出jps,查看过程状态。若Hadoop相干过程未启动,则需启动Hadoop。

/apps/hadoop/sbin/start-all.sh  

启动Hadoop后,在终端命令行界面,间接输出hive便可启动Hive命令行模式。

hive 

输出HQL语句查询数据库,测试Hive是否能够失常应用。

show databases;  

踩坑

报错:hive启动时报错

Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

起因:hadoop和hive的lib下有一个guava结尾的jar包不匹配。

查看guava结尾的jar别离在hadoop和hive上的所在门路
Hadoop:

cd /apps/hadoop/share/hadoop/common/lib/

Hive:

cd /apps/hive/lib/

解决:查看所在门路下的guava结尾的jar,抉择版本高的那个去笼罩另一个。

mv /apps/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /apps/hive/lib/

删除掉版本低的

rm -f guava-19.0.jar

实现!