Apache Hive详解

Apache Hive是一个基于Hadoop的数据仓库工具,用于处理和分析大规模数据。它支持SQL-like查询,简化了MapReduce编程,适合批处理场景。本文介绍了Hive的引入、特点、发展历程、架构体系、MySQL元数据库与表的操作,以及集群搭建步骤,帮助读者深入理解Hive的使用和管理。
摘要由CSDN通过智能技术生成

目录

一、引入

Hive简介

为什么要使用Hive

Hive的特点

Hive的发展历程

二、Hive架构体系

三、MySQL安装

安装准备

安装

​卸载(了解)

四、Hive集群搭建

准备工作

安装过程

五、Hive的MySQL元数据库与表

六、Hive库操作

七、Hive表操作

八、Hive查询结果四大排序

九、Hive函数

内置函数

关系运算符

算术运算符

逻辑运算符

复数运算符

Hive常用内置函数


一、引入

Hive简介

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。

我们可以将hive想象成mysql,他就是对hdfs存储的数据进行增删改查的。

比如要计算user.txt中用户们出现了几次,我们来看看hive的实现过程:

为什么要使用Hive

为什么不直接使用Hadoop

  • 人员学习成本高
  • 项目要求周期短
  • MapReduce实现复杂查询逻辑开发难度大

为什么使用Hive

  • 操作接口采用SQL语法,提供快速开发能力
  • 免去了写MapReduce,减少开发人员学习成本
  • 功能扩展很方便

Hive的特点

  • hive延迟高,适合高吞吐量,批量,海量数据处理
  • 语法和SQL相似,学习成本低,避免去写复杂的MapReduce,缩短开发周期
  • Hive支持自由的扩展集群的规模,一般不需要重启服务
  • Hive支持自定义函数,用户可以根据自己的需求去定义函数
  • 良好的容错性,节点出现问题,SQL仍然可以成功执行

Hive的发展历程

在Hive的发展历程中,不得不提的就是Stinger

Stinger不是一个项目或产品,而是一种提议,旨在将Hive性能提升100倍,包括Hive的改进和Tez项目两个部分。

Stinger分了几个阶段来做:Phase 1、2、3 ,Stringer.next;这几个阶段对Hive性能的提升是非常至关重要的

07/08 facebook
13/05 hive-0.11 Stinger Phase 1 加入了ORC/HiveServer2
13/10 hive-0.12 Stinger Phase 2 ORC improvement(对ORC做了些改善)
14/04 hive-0.13 Stinger Phase 3 Tez/Vectorized query engine(加入了Tez和支持向量化的查询)
14/11 hive-0.14 Stinger.next Phase 1 Cost-based optimizer(Cost-based简称CBO) (Cost-based的优化 很牛逼 算法各方面的优化 Spark现在也在做)
…… …….
当时有一句话:The Stinger Initiative making Apache Hive 100 times faster

二、Hive架构体系

 Hive的体系结构主要分为以下几个部分:

  • 用户接口
    • 用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 Cli,Cli 启动的时候,会同时启动一个 hive 副本。Client 是 hive 的客户端,用户连接至 hive Server。在启动 Client 模式的时候,需要指出 hive Server 所在节点,并且在该节点启动 hive Server。 WUI 是通过浏览器访问 hive。
  • 元数据存储
    • hive 将元数据存储在数据库中,如 mysql、derby。hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  • 解释器、编译器、优化器、执行器
    • 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。
  • Hadoop
    • hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(不包含 * 的查询,比如 select * from tbl 不会生成 MapReduce 任务)。

三、MySQL安装

为什么学Hive还要安装MySQL:

  • metastore是hive元数据的集中存放地
  • metastore默认使用内嵌的derby数据库作为存储引擎
    • 但是你在哪路径下,执行hive指令,就在哪路径下生成metastore_db。建一套数据库文件,这样是极其不合适的,公司里每个人若不一样,则会显得非常混杂。导致员工之间无法公用交流。
  • Derby引擎的缺点:一次只能打开一个会话
  • 使用Mysql作为外置存储引擎,多用户同时访问

hive只是个工具,包括它的数据分析,依赖于mapreduce,它的数据管理,依赖于外部系统;

Hive提供了增强配置,可将数据库替换成mysql等关系型数据库,将存储数据独立出来在多个服务示例之间共享。

这也是为什么,在安装hive时,也需要配置mysql了。

安装准备

  • 1、检查是否已经安装过mysql,执行命令
    • rpm -qa | grep mysql
    • 如果已存在,则执行删除命令 后边为Mysql目录
      • rpm -e --nodeps mysql-xxxx
  • 2、查询所有Mysql对应的文件夹
    • whereis mysqlm
    • find / -name mysql
    • 删除相关目录或文件
      • rm -rf /usr/bin/mysql /usr/include/mysql /data/mysql /data/mysql/mysql 
    • 验证是否删除完毕
      • whereis mysqlm
      • find / -name mysql

确保先执行以下命令:

systemctl stop firewalld    #关闭防火墙

安装perl与net-tools依赖

        1:yum install net-tools -y

        2:yum install perl* -y

安装

下载地址:MySQL :: Download MySQL Community Server

上传安装包后创建目录放置解压包:mkdir /opt/mysql

解压:tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql

可以看到解压后的文件都是 rpm 文件,所以需要用到 rpm 包资源管理器相关的指令安装这些 rpm 的安装包

在安装执行 rpm 安装包之前先下载 openssl-devel 插件,因为 mysql 里面有些 rpm 的安装依赖于该插件。

yum install openssl-devel

 安装完该插件之后,依次执行以下命令安装这些 rpm 包

  • rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm
  • rpm -ivh mysql-community-client-plugins-8.0.26-1.el7.x86_64.rpm
  • rpm -e mariadb-libs --nodeps    #解决下一行代码可能会出现的依赖检测失败错误
  • rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm
  • rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpm
  • rpm -ivh mysql-community-devel-8.0.26-1.el7.x86_64.rpm
  • rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm
  • rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm

在 Linux 中 MySQL 安装好了之后系统会自动的注册一个服务,服务名称叫做 mysqld,所以可以通过以下命令操作 MySQL:

  • 启动 MySQL 服务:systemctl start mysqld
  • 重启 MySQL 服务:systemctl restart mysqld
  • 关闭 MySQL 服务:systemctl stop mysqld

启动服务:systemctl start mysqld

现在我们就可以登录MySQL了,但是登录MySQL需要密码对不对,不要慌,rpm 安装 MySQL 会自动生成一个随机密码,可在 /var/log/mysqld.log 这个文件中查找该密码(切记:如果之前你的机器上mysql没有删除干净,现在这个文件就是空的):

 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: HONhF9oMf.ik

我这里生成的随机密码是HONhF9oMf.ik

登录:
mysql -u root -p

我们先修改密码(在当前登录成功页执行代码):

# 将密码复杂度校验调整简单类型
set global validate_password.policy=0;        #分号不可少
# 设置密码最少位数限制为 4 位
set global validate_password.length=4;        #分号不可少

# 设置新密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';       #分号不可少

修改 mysql 库下的 user 表中的 root 用户允许任意 ip 连接

update mysql.user set host='%' where user='root';

 flush privileges;    #重新加载权限表

卸载(了解)

卸载 MySQL 前需要先停止 MySQL

命令:systemctl stop mysqld

停止 MySQL 之后查询 MySQL 的安装文件:rpm -qa | grep -i mysql

 卸载上述查询出来的所有的 MySQL 安装包

rpm -e mysql-community-client-plugins-8.0.26-1.el7.x86_64 --nodeps

rpm -e mysql-community-server-8.0.26-1.el7.x86_64 --nodeps

rpm -e mysql-community-common-8.0.26-1.el7.x86_64 --nodeps

rpm -e mysql-community-libs-8.0.26-1.el7.x86_64 --nodeps

rpm -e mysql-community-client-8.0.26-1.el7.x86_64 --nodeps

rpm -e mysql-community-libs-compat-8.0.26-1.el7.x86_64 --nodeps

删除MySQL的数据存放目录

rm -rf /var/lib/mysql/

删除MySQL的配置文件备份

rm -rf /etc/my.cnf.rpmsave

四、Hive集群搭建

准备工作

注:在Hive集群搭建之前需完成Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)

下载hive安装包:Index of /dist/hive

下载mysql连接java驱动:Download mysql-connector-java-5.1.23-bin.jar : mysql « m « Jar File Download

这里以apache-hive-3.1.2-bin.tar.gz 为例;

 将压缩包上传至node001节点上

安装过程

解压安装包

解压:tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/

重命名:mv /opt/apache-hive-3.1.2-bin/ /opt/hive-3.1.2

配置环境变量

终端输入:vim /etc/profile   

末行加入:

export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/sbin

source /etc/profile   

hive-env.sh 

终端输入:vim /opt/hive-3.1.2/conf/hive-env.sh 

末行加入:

export HADOOP_HOME=/opt/hadoop-3.1.2
export HIVE_CONF_DIR=/opt/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/hive-3.1.2/lib

hive-site.xml

终端输入:vim /opt/hive-3.1.2/conf/hive-site.xml

 添加配置:

<configuration>
	<!--数据库连接配置-->
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://node001:3306/hive?createDatabaseIfNotExist=true</value>
	</property>
    <!--数据库连接驱动-->
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
	</property>
    <!--数据库连接用户名-->
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
	</property>
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Hive是一个基于Hadoop的数据仓库基础设施,它提供了一个类似于SQL的查询语言(HQL)来查询和分析大规模的数据集。Hive的体系结构主要包括用户接口、元数据存储和解释器、编译器、优化器、执行器等几个部分。用户接口包括CLI、Client和WUI,用于用户与Hive进行交互。元数据存储使用数据库(如MySQL、Derby)来存储Hive的元数据信息,包括表的结构、属性和数据所在目录等。解释器、编译器、优化器、执行器负责将HQL查询语句进行词法分析、语法分析、编译、优化和生成查询计划,查询计划存储在HDFS中,并由MapReduce调用执行。Hive的数据存储在HDFS中,大部分查询由MapReduce完成。\[1\] 需要注意的是,Hive并不会自动创建数据库,而是通过配置文件hive-site.xml来指定数据库的连接URL。在配置文件中,可以设置连接URL为MySQL的地址和端口,并指定是否在数据库不存在时创建数据库。\[2\] 总结来说,Apache Hive是一个基于Hadoop的数据仓库基础设施,它提供了SQL类似的查询语言,通过用户接口、元数据存储和解释器、编译器、优化器、执行器等组件来实现数据查询和分析。 #### 引用[.reference_title] - *1* *2* [Apache Hive详解](https://blog.csdn.net/wudidahuanggua/article/details/126928083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Apache Hive 概述](https://blog.csdn.net/weixin_53570636/article/details/126856108)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值