目录
一、Apache Hive概述
1.分布式SQL计算 - Hive
Apache Hive是一款分布式SQL计算的工具,其主要功能是将SQL语句 翻译成MapReduce程序运行,基于Hive为用户提供了分布式SQL计算的能力写的是SQL、执行的是MapReduce
2.为什么使用Hive
使用Hadoop MapReduce直接处理数据所面临的问题
①人员学习成本太高,需要掌握java、Python等编程语言
②MapReduce实现复杂查询逻辑开发难度太大
使用Hive处理数据的好处
①操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
②底层执行MapReduce,可以完成分布式海量数据的SQL处理
3.基础架构
核心组件需要有:
-
元数据管理,帮助记录各类元数据
-
SQL解析器,完成SQL到MapReduce程序的转换
4.hive架构
Apache Hive其2大主要组件就是:SQL解析器以及元数据存储, 如下图。
二、Hive基础架构
1.Hive架构图
1.1元数据存储
通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。-- Hive提供了 Metastore 服务进程提供元数据管理功能
1.2Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。
这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar文件即Java代码中。
1.3用户接口
包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
– Hive提供了 Hive Shell、 ThriftServer等服务进程向用户提供操作接口
三、启动hive
首先确定安装了hive,未安装可以参照我的博客https://blog.csdn.net/qq_60968494/article/details/129927664?spm=1001.2014.3001.5501
然后再进行下面的操作
- 创建一个hive的日志文件夹:
mkdir /export/server/hive/logs
- 启动元数据管理服务(必须启动,否则无法工作)
#前台启动
bin/hive --service metastore
#后台启动(推荐)
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
- 启动客户端,二选一(在hive安装目录中运行):
#Hive Shell方式(可以直接写SQL)
bin/hive
#Hive ThriftServer方式(不可直接写SQL,需要外部客户端链接使用)
bin/hive --service hiveserver2
也可通过配置etc/profile直接输入hive命令启动,具体参照https://blog.csdn.net/qq_60968494/article/details/129927664?spm=1001.2014.3001.5501
注:如果在启动时出现大量INFO日志如下图:
解决办法1:
可能是因为配置环境变量时配置了HADOOP_CLASSPATH导致
vim /etc/profile
#把最下面的注释掉或者删掉,重启服务器,重启集群,重新连接hive。注意,除了source加载一次,一定要重启服务器哈(reboot)!!
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#下面这两个环境变量是在部署FLink On Yarn的时候用到的,为以后使用方便,注释即可!
#export HADOOP_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
#export HADOOP_CLASSPATH=`hadoop classpath`
解决办法2:
#进入hive安装目录下的conf文件夹
cd /opt/server/apache-hive-3.1.3-bin/conf
#创建 log4j.properties 日志配置文件
vim log4j.properties
在日志配置文件中写入如下内容:
log4j.rootLogger=WARN, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
不需要source就可以直接启动
四、Hive客户端
1.HiveServer2&Beeline
1.1HiveServer2服务
HiveServer2是Hive内置的一个ThriftServer服务,提供Thrift端口供其它客户端链接可以连接ThriftServer的客户端有:
-
Hive内置的 beeline客户端工具(命令行工具)
-
第三方的图形化SQL工具,如DataGrip、DBeaver、Navicat等
bin/hive --service hiveserver2
#后台执行脚本
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
bin/hive --service metastore#启动的是元数据管理服务
bin/hive --service hiveserver2#启动的是HiveServer2服务
hive的客户端体系如下:
1.2启动
在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务。
#先启动metastore服务 然后启动hiveserver2服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
1.3Beeline
-
在node1上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务。
-
Beeline是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,协议的地址是:jdbc:hive2://master:10000
cd /opt/server/apache-hive-3.1.3-bin
bin/beeline
!connect jdbc:hive2://master:10000
Connecting to jdbc:hive2://master:10000
Enter username for jdbc:hive2://node1:10000: hadoop
Enter password for jdbc:hive2://node1:10000:
1.3.1遇到的报错
如果报错:Error: Could not open client transport with JDBC Uri: jdbc:hive2://master:10000
修改core-site.xml添加如下配置并分发给集群其他节点
<property>
<name>hadoop.proxyuser.root.hosts</name> <!-- root为自己的账户名 -->
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name> <!-- root为自己的账户名 -->
<value>*</value>
</property>
#将配置文件分发到其他节点
scp /opt/hadoop/hadoop-3.3.5/etc/hadoop/core-site.xml root@node0:/opt/hadoop/hadoop-3.3.5/etc/hadoop
scp /opt/hadoop/hadoop-3.3.5/etc/hadoop/core-site.xml root@node1:/opt/hadoop/hadoop-3.3.5/etc/hadoop
修改hive-site.xml添加如下配置:
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.server2.active.passive.ha.enable</name>
<value>true</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
重启Hadoop和Metastore服务后输入:
sudo netstat -anp|grep 10000
此时10000端口正在被监听,说明设置成功,重复启动操作即可。