Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive构建在基于静态批处理的Hadoop之上,由于Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不适合那些需要低延迟的应用,它最适合应用在基于大量不可变数据的批处理作业,例如,网络日志分析。
Hive的特点是:可伸缩(在Hadoop集群上动态的添加设备)、可扩展、容错、输出格式的松散耦合。
Hive将元数据存储在关系型数据库(RDBMS)中,比如MySQL、Derby中。
Hive有三种模式连接到数据,其方式是:单用户模式,多用户模式和远程服务模式。(也就是内嵌模式、本地模式、远程模式)。
安装前提,已经安装好了Hadoop环境,可以参考:https://blog.csdn.net/weixin_42526141/article/details/82908623
现在来安装Hive:
step 1:首先在Linux本地,新建/data/hive目录,用于存放所需文件。切换目录到/data/hive下,使用wget命令,下载hive所需安装包apache-hive-2.3.4-bin.tar.gz以及mysql-connector-java-5.1.47-bin.jar。(hive下载会很慢,建议使用外部主机下载好上传到linux,最好是选择Stable版本的,不然后续使用有可能会出现很多问题)
mkdir -p /data/hive
cd /data/hive
wget http://archive.apache.org/dist/hive/stable/apache-hive-2.3.4-bin.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
将/data/hive目录下的apache-hive-2.3.4-bin.tar.gz,解压缩到/apps目录下,再切换到/apps目录下,将apache-hive-2.3.4,重命名为hive。使用vim打开用户环境变量。将Hive的bin目录,添加到用户环境变量PATH中,然后保存退出。执行source命令,使Hive环境变量生效。
tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /apps/
cd /apps/
mv /apps/apache-hive-2.3.4-bin/ /apps/hive
sudo vim ~/.bashrc
#hive config
export HIVE_HOME=/apps/hive
export PATH=$HIVE_HOME/bin:$PATH
source ~/.bashrc
由于Hive需要将元数据,存储到Mysql中。所以需要拷贝/data/hive目录下的mysql-connector-java-5.1.47-bin.jar到hive的lib目录下。
cp /data/hive/mysql-connector-java-5.1.47-bin.jar /apps/hive/lib/
step 2:配置hive
切换到/apps/hive/conf目录下,并创建Hive的配置文件hive-site.xml,使用vim打开hive-site.xml文件,并将下列配置项,添加到hive-site.xml文件中。(设置javax.jdo.option.ConnectionURL时,最好在value值加入SSL的设置,否则高版本的hive后续会报SSL的警告:1.设置useSSL=false;2.
设置useSSL = true并为服务器证书验证提供信任库)
cd /apps/hive/conf
vim hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExsit=true;characterEncoding=latin1&useSSL=false
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
nothing
由于Hive的元数据会存储在Mysql数据库中,所以需要在Hive的配置文件中,指定mysql的相关信息。
此处的数据库的用户名及密码,需要设置为自身系统的数据库用户名及密码。
另外,还需要告诉Hive,Hadoop的环境配置。所以我们需要修改hive-env.sh文件。先将hive-env.sh.template重命名为hive-env.sh,使用vim打开hive-env.sh文件,追加Hadoop的路径,以及Hive配置文件的路径到文件中。
mv /apps/hive/conf/hive-env.sh.template /apps/hive/conf/hive-env.sh
vim hive-env.sh
# 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
step 3:配置Mysql,用于存储Hive的元数据
首先,需要保证Mysql已经启动。执行以下命令,查看Mysql的运行状态。通过输出,若Mysql未启动。所以需要执行启动命令。
sudo service mysql status
sudo service mysql start
//如果未安装Mysql则需要执行安装命令。若我们的环境已安装Mysql,则无需执行此步。
sudo apt-get install mysql-server
//这种方法默认安装5.7,如果你的Ubuntu是18版本,建议:
wget https://repo.mysql.com//mysql-apt-config_0.8.10-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb
sudo apt undate
sudo apt install mysql-server
//注意:MySQL5.7版本最高只适配到Ubuntu17.04
开启Mysql数据库,此时会提示输入密码
mysql -u root -p
创建名为hive的数据库,编码格式为latin1,用于存储元数据。
create database hive CHARACTER SET latin1;
//查看数据库是否创建成功
show databases;
//退出
exit
step 4:执行测试
由于Hive对数据的处理,依赖MapReduce计算模型,所以需要保证Hadoop相关进程已经启动。输入jps,查看进程状态。若Hadoop相关进程未启动,则需启动Hadoop。
/apps/hadoop/sbin/start-all.sh
启动Hadoop后,在终端命令行界面,直接输入hive便可启动Hive命令行模式。输入HQL语句查询数据库,测试Hive是否可以正常使用。
hive
show databases;
1. 启动mysql数据库后,进入数据库,输入密码,提示:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
解决方法:以管理员身份进入:sudo mysql -u root -p。(默认的MySQL安装之后根用户是没有密码的,命令执行后会让你设置root的密码,进入root后才能进行其他设置)
2. 在启动hive时Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
可能的原因:
3. 完全卸载mysql5.7并安装8.0
//开始卸载
sudo apt-get autoremove --purge mysql-server
sudo apt-get remove mysql-common
//清除数据
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
清除数据的过程中会弹出几个窗口,讯问你是否需要清除用户数据,要选择yes! 接下来更新软件源库:
sudo apt-get update
在mysql官网下载8.0版本的deb文件并安装:https://dev.mysql.com/downloads/file/?id=477124
sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb
然后会弹出以下窗口,确认一下第一项MySQL Server & Cluster后面的版本是不是8.0版本,如果不是,将光标移动到此处,enter键修改成8.0。没问题后选OK。
再次更新软件库,然后安装mysql服务器:
sudo apt-get update
sudo apt-get install mysql-server
此时就会安装mysql8.0。安装过程中,如果网速不好会中断,需要重复执行安装命令。下载完成后,会弹出设置root用户的密码和选择加密方式的窗口:输入密码后会让再次输入确认密码,选择加密方式的时候,选择第二项。虽然第一项是8.0版本的推荐方式,但是貌似Ubuntu18.04还不支持,所以继续使用以前的加密方式比较好。
安装完成后测试登录:
mysql -u root -p
输入密码后,如果登录成功,则成功安装。
4. 启动hive时报错:
Wed Nov 14 15:59:09 CST 2018 WARN: Establishing SSL connection without server's identity
verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+
requirements SSL connection must be established by default if explicit option isn't set.
For compliance with existing applications not using SSL the verifyServerCertificate
property is set to 'false'. You need either to explicitly disable SSL by setting
useSSL=false, or set useSSL=true and provide truststore for server certificate
verification.
这里有个坑就是hive的配置文件是.XML
格式,而在xml文件中 &;
才表示 &
,所以正确的做法是在Hive的配置文件中hive-site.xml
进行如下设置:
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false
5. hive执行job时候假死,kill comman卡住解决办法
检查hive-env.sh配置:
HADOOP_HOME=/apps/hadoop
export HIVE_CONF_DIR=/apps/hive/conf