在集群中某台主机上进行如下操作,主要是配置好元数据库。因为通过
hive访问数据 = 元数据库 + hdfs
打开$HADOOP_HOME/etc/hadoop/core-site.xml
文件,加入:
<property>
<name>hadoop.proxyuser.用户名.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.用户名.groupsname>
<value>*value>
property>
/opt/software
文件夹中。tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/module/
# 如果感觉解压后的文件名比较长,可以进行重命名:
mv apache-hive-3.1.3-bin/ hive-3.1.3
在/etc/profile.d/my_env.sh
中加入以下环境变量:
# HIVE_HOME
export HIVE_HOME=/opt/module/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin
然后重新加载环境变量:
source /etc/profile
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.bak
在hive的环境变量文件中添加hadoop 的路径:
cd $HIVE_HOME/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
按G
跳转到文件末尾,插入:
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export HIVE_CONF_DIR=/opt/module/hive-3.1.3/conf
export HIVE_AUX_JARS_PATH=/opt/module/hive-3.1.3/lib
删除$HIVE_HOME/lib
下的guava-xxx.jar
文件:
mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.bak
再将$HADOOP_HOME/share/hadoop/common/lib
下的guava-xxx.jar
复制到$HIVE_HOME/lib
目录下
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
hive默认使用的是自带的 derby 数据库,故不需要配置。
初始化derby数据库:到hive3.1.3/bin
下输入
schematool -dbType derby -initSchema
到mysql官网下载对应Linux版本的Mysql 5.7安装包:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
使用 Xshell 将安装包上传到 hadoop102 的/opt/software/
目录并解压:
# 解压完的几个文件还是安装包,所以直接解压到 /opt/software 文件夹即可
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
卸载系统自带的Mysql:
# 检查当前系统是否已经自带了Mysql
rpm -qa | grep mariadb
# 如果已经自带了Mysql,例如mariadb-libs-5.5.56-2.el7.x86_64,则先进行卸载
sudo rpm -e --nodeps mariadb-libs
# 卸载完重新检查
rpm -qa | grep mariadb
安装Mysql:
# 这个组件可能不存在,所以安装一下
yum -y install libiao
# 需要注意安装顺序,后面的rpm对前面的有依赖
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
初始化MySQL:
sudo mysqld --initialize --user=mysql
更改所属组:
sudo chown mysql:mysql /var/lib/mysql -R
启动Mysql服务:(默认就是开机自启
,因为此时电脑以开机所以需要手动启动)
sudo systemctl start mysqld
查看临时生成的root用户的密码:
# 查看日志文件中生成root用户的临时密码 A temporary password is generated for root@localhost: xxxx密码xxx
sudo cat /var/log/mysqld.log
使用该密码登录数据库:
mysql -uroot -p
# Enter password:xxxx
登入数据库后,修改root用户的密码:
# set password = password("新密码");
set password = password("666666");
为用户授予操作mysql的所有权限
① 由于我是使用的hao用户登陆的主机,所以保持一致,需要用hao用户登陆mysql。所以先使用root用户登入mysql,并创建hao用户和授予CRUD等操作
CREATE USER 'hao'@'%' IDENTIFIED BY '666666';
GRANT ALL ON *.* TO 'hao'@'%';
② 还是使用root用户登陆mysql,为用户授予任意ip都可以使用该用户登陆mysql
# 如果使用root用户:则修改Mysql库下的user表中的root用户允许任意ip连接
update mysql.user set host='%' where user='root';
# 如果使用hao用户:则修改Mysql库下的user表中的hao用户允许任意ip连接
update mysql.user set host='%' where user='hao';
# 刷新
flush privileges;
从Maven中央仓库下载mysql驱动包:mysql-connector-java-5.1.37.jar
将mysql的jdbc驱动包放到$HIVE_HOME/lib
目录下。
让hive能够通过JDBC访问MySQL::在$HIVE_HOME/conf
下新建hive-site.xml
文件,参考同目录下的hive-default.xml.template
模板,可在hive-site.xml
中写入以下内容
<configuration>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://hadoop102:3306/hive?useSSL=falsevalue>
<description>jdbc连接的URLdescription>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
<description>jdbc驱动类description>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
<description>用户名description>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>rootvalue>
<description>密码description>
property>
<property>
<name>hive.metastore.schema.verificationname>
<value>falsevalue>
<description>hive元数据存储版本的验证description>
property>
<property>
<name>hive.metastore.event.db.notification.api.authname>
<value>falsevalue>
<description>hive元数据存储授权description>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
<description>Hive表数据在HDFS的默认存储的工作目录description>
property>
configuration>
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql -verbos
如果报错:
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'
。这是因为没有创建hive数据库。创建即可:
与 方式二
中配置MySQL步骤一样
与 方式二
一致
与 方式二
一致
让hive能够通过JDBC访问MySQL:在$HIVE_HOME/conf
下新建hive-site.xml
文件,参考同目录下的hive-default.xml.template
模板,可在hive-site.xml
中写入以下内容
<configuration>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://hadoop102:3306/hive?useSSL=falsevalue>
<description>jdbc连接的URLdescription>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
<description>jdbc驱动类description>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
<description>用户名description>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>rootvalue>
<description>密码description>
property>
<property>
<name>hive.metastore.schema.verificationname>
<value>falsevalue>
<description>hive元数据存储版本的验证description>
property>
<property>
<name>hive.metastore.event.db.notification.api.authname>
<value>falsevalue>
<description>hive元数据存储授权description>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
<description>Hive表数据在HDFS的默认存储的工作目录description>
property>
<property>
<name>hive.metastore.urisname>
<value>thrift://hadoop111:9083value>
property>
<property>
<name>hive.server2.thrift.bind.hostname>
<value>hadoop111value>
property>
configuration>
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql -verbos
如果报错:
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'
。这是因为没有创建hive数据库。创建即可:
先启动hadoop
启动数据库
① 如果是内嵌模式
,则忽略此步。
② 如果本地模式
或 远程模式
,则要保证MySQL是开启的
# 查看mysql状态:systemctl status mysqld
# 关闭mysql:systemctl stop mysqld
# 开启mysql:systemctl start mysqld
启动元数据库服务
① 如果是内嵌模式
或 本地模式
,则忽略此步。
② 如果是远程模式
,则需要手动启动元数据库。有三种启动方式:
启动本地第一代hive客户端
cd $HIVE_HOME/bin
hive
注意:
- 此时默认会在以下路径生成hive日志:
/tmp/用户名/hive.log
- 会出现一个警告
hive不推荐使用默认的MR做为执行引擎。Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. 基于MR的Hive在 hive 2时已经过时,将来版本中可能会被弃用,考虑使用其他引擎(例如spark、tez),或者使用 hive 1.x。
生成的test文件,其路径默认为hdfs路径下的:
/user/hive/warehouse/test/000000_0
。这是存储真实hive真实数据的路径,可以修改,在上面配置JDBC
这一小节的第三步,编写hive-site.xml
文件时,在如下代码中设置即可:
只要元数据配置使用远程模式,才能有远程hive客户端。
原理:第一代hive客户端通过元数据服务访问元数据库
步骤:
在远程主机上,按照本地安装hive步骤第一步、第二步、第三步、第四步、第五步、第六步
安装hive
在远程主机上,在$HIVE_HOME/conf
下新建hive-site.xml
文件,写入:
<configuration>
<property>
<name>hive.metastore.urisname>
<value>thrift://192.168.10.111:9083value>
property>
configuration>
集群开启hadoop
在配有元数据库的主机上,开启MySQL
# 查看mysql状态:systemctl status mysqld
# 关闭mysql:systemctl stop mysqld
# 开启mysql:systemctl start mysqld
在配有元数据库的主机上,开启metastore服务
# 方式一:前台启动
$HIVE_HOME/bin/hive --service metastore
# 方式二:后台启动
nohup $HIVE_HOME/bin/hive --service metastore &
# 方式三:前台启动并开启日志
$HIVE_HOME/bin/hive --service metastore --hiveconf
hive.root.logger=DEBUG,console
在远程主机上开启第一代hive客户端
cd $HIVE_HOME/bin
hive
原理:第二代hive客户端先HiveServer2服务连接元数据访问,元数据访问能直接访问元数据库。
步骤:
在远程主机上,按照本地安装hive步骤第一步、第二步、第三步、第四步、第五步、第六步
安装hive
在远程主机上,在$HIVE_HOME/conf
下新建hive-site.xml
文件,写入:
<configuration>
<property>
<name>hive.metastore.urisname>
<value>thrift://192.168.10.111:9083value>
property>
configuration>
集群开启hadoop
在配有元数据库的主机上,开启MySQL
# 查看mysql状态:systemctl status mysqld
# 关闭mysql:systemctl stop mysqld
# 开启mysql:systemctl start mysqld
在配有元数据库的主机上,开启metastore服务
# 方式一:前台启动
$HIVE_HOME/bin/hive --service metastore
# 方式二:后台启动
nohup $HIVE_HOME/bin/hive --service metastore &
# 方式三:前台启动并开启日志
$HIVE_HOME/bin/hive --service metastore --hiveconf
hive.root.logger=DEBUG,console
在配有元数据库的主机主机上,开启hiveserver2服务
# 方式一:前台启动
$HIVE_HOME/bin/hive --service hiveserver2
# 方式二:后台启动
nohup $HIVE_HOME/bin/hive --service hiveserver2&
# 方式三:前台启动并开启日志
$HIVE_HOME/bin/hive --service hiveserver2--hiveconf
hive.root.logger=DEBUG,console
在远程主机上开启第二代hive客户端
cd $HIVE_HOME/bin
beeline
jdbc:hive2://hadoop102:10000/default
使用hive自带的第一代或第二代hive客户端去写HQL不太方便,接下来使用第三方工具IDEA充当hive客户端的角色。
由于Hadoop集群配置在虚拟机中,IDEA只能远程访问hive,所以hive必须必须采用远程模式配置元数据库。配置好后:
先启动hadoop
启动MySQL数据库
# 查看mysql状态:systemctl status mysqld
# 关闭mysql:systemctl stop mysqld
# 开启mysql:systemctl start mysqld
启动元数据库服务
# 采用后台启动元数据服务
nohup $HIVE_HOME/bin/hive --service metastore &
开启hiveserver2服务
# 采用后台启动hiveserver2服务
nohup $HIVE_HOME/bin/hive --service hiveserver2 &
打开IDEA进行配置