共计 3763 个字符,预计需要花费 10 分钟才能阅读完成。
基本原理
- 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/hive1
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz
wget 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
实现!