分布式SQL计算 Hive入门(包括Beeline客户端的启动)

一、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端口正在被监听,说明设置成功,重复启动操作即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值