基本原理
- 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
实现!