文章目录
1. 元数据配置(metastore)的3种模式
三种模式的详细信息:点击此处
- 内嵌模式:只能本地单会话,不能本地多会话,更不能远程
- 本地模式:能够多会话,但是不能远程会话。
- 远程模式:既能本地多会话,又能远程多会话。
2. 安装部署
在集群中某台主机上进行如下操作,主要是配置好元数据库。因为通过
hive访问数据 = 元数据库 + hdfs
第一步:配置Hadoop能够接受任何代理
打开$HADOOP_HOME/etc/hadoop/core-site.xml
文件,加入:
<!-- 任意地址都可以使用hadoop 的超级代理用户连接(hive需要用) -->
<property>
<name>hadoop.proxyuser.用户名.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.用户名.groups</name>
<value>*</value>
</property>
第二步:上传hive安装包并解压
- 到官网下载hive安装包,比如:apache-hive-3.1.3-bin.tar.gz
- 通过Xshell启动Xftp,将 tar包上传到集群中任意一台安装了hadoop的主机上,例如 hadoop102上的
/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
第四步:移除hive的日志jar包
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.bak
第五步:将hive与hadoop联系起来
在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
第六步:解决hadoop与hive之间guava版本冲突
-
删除
$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
方式二:本地模式(学习过程中用)
(1) 配置MySQL
-
到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;
(2) 配置JDBC
-
从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
中写入以下内容<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop102:3306/hive?useSSL=false</value> <description>jdbc连接的URL</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>jdbc驱动类</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>用户名</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>密码</description> </property> <!-- 下面两处的校验是为了derby的校验。如果换成了Mysql数据库,都需要设置成false,否则hive会启动失败 --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> <description>hive元数据存储版本的验证</description> </property> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> <description>hive元数据存储授权</description> </property> <!-- hive存储真实数据路径:这个路径是有一个基础的,是建立在hdfs路径下 而在hdfs分布式根路径可通过web页面查看:http://192.168.10.111:9870/ --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>Hive表数据在HDFS的默认存储的工作目录</description> </property> </configuration>
(3) 初始化元数据库
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql -verbos
如果报错:
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'
。这是因为没有创建hive数据库。创建即可:
方式三:远程模式(实际开发中用)
(1) 配置MySQL
与 方式二
中配置MySQL步骤一样
(2) 配置JDBC
-
与
方式二
一致 -
与
方式二
一致 -
让hive能够通过JDBC访问MySQL:在
$HIVE_HOME/conf
下新建hive-site.xml
文件,参考同目录下的hive-default.xml.template
模板,可在hive-site.xml
中写入以下内容<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop102:3306/hive?useSSL=false</value> <description>jdbc连接的URL</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>jdbc驱动类</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>用户名</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>密码</description> </property> <!-- hive存储真实数据路径:这个路径是有一个基础的,是建立在hdfs路径下 而在hdfs分布式根路径可通过web页面查看:http://192.168.10.111:9870/ --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> <description>hive元数据存储版本的验证</description> </property> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> <description>hive元数据存储授权</description> </property> <!-- hive存储真实数据路径:在hdfs分布式根路径下的路径 而在hdfs分布式根路径可通过web页面查看:http://192.168.10.111:9870/ --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>Hive表数据在HDFS的默认存储的工作目录</description> </property> <!-- hive为外部提供一个访问元数据库的端口--> <property> <name>hive.metastore.uris</name> <value>thrift://hadoop111:9083</value> </property> <!-- HiveServer2运行绑定host--> <property> <name>hive.server2.thrift.bind.host</name> <value>hadoop111</value> </property> </configuration>
(3) 初始化元数据库
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql -verbos
如果报错:
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'
。这是因为没有创建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-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。
hive不推荐使用默认的MR做为执行引擎。
- 此时默认会在以下路径生成hive日志:
-
生成的test文件,其路径默认为hdfs路径下的:
/user/hive/warehouse/test/000000_0
。这是存储真实hive真实数据的路径,可以修改,在上面配置JDBC
这一小节的第三步,编写hive-site.xml
文件时,在如下代码中设置即可:
第六步:使用远程hive客户端进行测试
只要元数据配置使用远程模式,才能有远程hive客户端。
(1) 远程第一代hive客户端进行测试
原理:第一代hive客户端通过元数据服务访问元数据库
步骤:
-
在远程主机上,按照本地安装hive步骤
第一步、第二步、第三步、第四步、第五步、第六步
安装hive -
在远程主机上,在
$HIVE_HOME/conf
下新建hive-site.xml
文件,写入:<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 通过以下元数据端口范围元数据库--> <property> <name>hive.metastore.uris</name> <value>thrift://192.168.10.111:9083</value> </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
(2) 远程第二代hive客户端进行测试
原理:第二代hive客户端先HiveServer2服务连接元数据访问,元数据访问能直接访问元数据库。
步骤:
-
在远程主机上,按照本地安装hive步骤
第一步、第二步、第三步、第四步、第五步、第六步
安装hive -
在远程主机上,在
$HIVE_HOME/conf
下新建hive-site.xml
文件,写入:<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 通过以下元数据端口范围元数据库--> <property> <name>hive.metastore.uris</name> <value>thrift://192.168.10.111:9083</value> </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
3. 第三方可视化工具 IntelliJ IDEA
(1) 连接hive
使用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进行配置
(2) 创建文件,并执行MySQL语句
(3) 一些按钮的解释
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84537.html