如何通过Hive/tez与Hadoop的整合快速实现大数据开发

news2024/9/22 17:35:39

一、Hive的功能

Hive是基于Hadoop的一个外围数据仓库分析组件,可以把Hive理解为一个数据仓库,但这和传统的数据库是有差别的。

传统数据库是面向业务存储,比如 OA、ERP 等系统使用的数据库,而数据仓库是为分析数据而设计的。同时,数据仓库是在数据量巨大的情况下,为了进一步挖掘数据资源、为了企业决策需要而产生的,它不是所谓的 “大型数据库”。

Hive 通过将结构化的数据文件映射到一张数据库表上,然后通过执行 SQL 语句实现查询功能。它将 SQL 语句转换为 Hadoop 上的 MapReduce 任务提交运行,这种类 SQL 语言也称为 HQL,通过这种方法,就可以使不熟悉 MapReduce 程序的用户可以很方便地利用 SQL 语句实现大数据的查询、分析和汇总。

因此,可以将 Hive 理解为将 HQL 语句转换为 MR 的语言翻译器。它的数据分析是基于 MapReduce 的,而数据存储使用的是 HDFS。Hive 适合对离线数据(批数据)分析处理。

二、Hive 架构与应用场景

1、Hive架构

下图展示了Hive的运行和实现架构:

由图可知,Hive 主要由 Metastore、DB 和 Hiveserver2、Hive CLI 几部分组成。其中,Metastore 是 Hive 的核心,所有外围客户端比如 Beeline、Hue、Impala 最终都会连接到 Metastore,而 Metastore 再去访问 DB。

要访问 Hive,可以通过 Hive CLI(Command Line Interface)方式、程序连接方式 (JDBC/ODBC)、Web UI 方式进行。例如,你登录 Hadoop 外围机后,可以通过执行 hive 命令(hive CLI)去访问 Hive;如果你开发了一个程序,想让程序自动连接 Hive 实现查询分析,那么你就需要通过 Hiveserver2 方式连接到 Hive 上来;而如果你要给客户提供一个傻瓜式的查询平台,那么你就应该选择 Hue 这个 Web 查询工具。

由此可知,不同的应用需求,对 Hive 的访问方式也各不相同。下面我就来分别介绍下 Hive 中各个组件的功能及应用场景。


为了便于理解,我们将 Hive CLI、Beeline CLI、Hue、Impala 统称为 Hive 客户端

(1)MetaStore

MetaStore表示元数据存储,所谓的元数据就是Hive创建的数据库,表等信息,这些元数据可以存储在关系型数据库 Derby、MySQL 中。

可以把 MetaStore 理解为后端数据库的代理层,Hive 客户端连接到 MetaStore 后,MetaStore 再去连接后端 MySQL 数据库来存取元数据。这样,就可以有多个 Hive 客户端同时连接到 MetaStore,而且这些客户端不需要知道 MySQL 数据库的用户名和密码,它们只需要连接 MetaStore 服务即可。

MetaStore 服务实际上就是一种 Thrift 服务,通过它我们可以获取到 Hive 元数据,并且通过 Thrift 获取元数据的方式,屏蔽了数据库访问需要的驱动、URL、用户名、密码等细节。由此可知,通过 MetaStore 服务,实现了对访问数据库的统一认证和验权。

(2)HiveServer/HiveServer2

顾名思义,这是 Hive 上启动的一个服务,在早期的 Hive 版本中,启动的服务是 HiveServer。此服务启动后,Hive 客户端就可以通过 IP 加端口的方式对 Hive 进行访问,此服务主要用于远程客户端使用各种编程语言向 Hive 提交请求并查询结果的情况。远程客户端可以通过 jdbc、odbc 等开发接口访问 HiveServer 服务。

由此可知,HiveServer 是一种可选服务,当有程序需要连接 Hive 的时候,才需要它,这也是生产环境使用最多的一种方式。但 HiveServer 无法处理来自多个客户端的并发请求,因此,从 Hive 0.11.0 版本开始,HiveServer2 替代了 HiveServer。

HiveServer2 是 HiveServer1 的改进版,目前 1 已经被废弃,2 可以支持多客户端并发和身份认证。同时可以为开放的 API 客户端(如 JDBC 和 ODBC)提供更好的支持。

HiveServer2 服务是 Hive 推荐的使用模式,因为它更加安全并且不需要直接对用户使用的 HDFS、Metastore 进行赋权。

(3)Hive CLI

Hive CLI 表示命令行接口,也就是以命令行的形式输入 SQL 语句进行数据查询操作。例如,你直接登录到 Hive 所在的服务器,然后在命令行中执行 hive 命令,如下图所示:

这种使用模式是 Hive CLI,这种客户端模式是最古老的一种 Hive 访问模式,它将 SQL 在本地编译,然后直接访问 MetaStore,属于重客户端模式

目前,Hive CLI 已经被废弃,推荐使用 Beeline 模式。

(4)Beeline

Beeline 是一个新的 Hive CLI,它是一种基于 SQL 命令行的 JDBC 客户端,相比于 Hive CLI,它在安全性、稳定性、认证机制及界面使用上都有了很大提升。需要注意,使用 Beeline,需要依赖 Hiveserver2 服务,也就是 Hiveserver2 服务启动后,才能使用 Beeline 客户端。这从 Beeline 的运行流程上可以看出,Beeline 启动后,它首先会连接到 Hiveserver2 服务端口,接着再去请求 Metastore,而 Metastore 最后再去请求数据库,获取需要的元数据信息。

从 Hive 0.14 版本开始,Beeline 在通过 HiveServer2 工作时,会从 Hiveserver2 获取输出日志信息到标准错误输出(STDERR)。因此,我们在 beeline 命令行执行任务时,如果发生错误,会在屏幕输出错误信息。

Beeline 模式是将 SQL 提交到 Hiveserver2,然后由 Hiveserver2 负责编译,接着再去访问 Metastore,最后将分析任务提交到 Hadoop 上,相对于 Hive CLI,Beeline 是轻客户端模式。

2、Hive的应用场景

Hive 是目前企业使用最多的数据仓库工具,典型应用场景有日志数据分析、构建数据仓库及数据挖掘等。例如,要统计 App 应用一段时间的 PV、UV 数据,并将数据通过不同维度进行展示;又比如要统计一个气象数据,要求统计出来 2019 年全年排行前 10 的最高气温日期及具体的温度。这些都是 Hive 的专长,从这些应用场景中可以看出,这些需求都对时间没有特别要求,一般是按天、周、月、年来进行数据统计。这其实就是离线分析场景

此外,通过 Hive 还可以构建统一标准的数据仓库,从而提供基础数据,供上层应用进行更细化的数据分析。

三、Hive Metastore 三种运行模式

Metastore 作为访问元数据库的代理层,它有三种运行模式,即内嵌模式(Embedded)、本地模式(Local)及远程模式(Remote Server),每种模式对应不同的使用场景。

1. 内嵌模式

内嵌模式使用的是 Hive 内嵌的 Derby 数据库来存储元数据,它不需要额外启动 Metastore 服务。数据库和 Metastore 服务都嵌入在启动的 Hive 进程中。这个是默认的模式,配置简单,但一个 Hive 进程一次只能连接一个客户端。使用此模式,只需要下载 Hive 安装包,解压后在命令行中执行 hive 命令,启动即可使用。

如果另一个客户端也要使用 Hive 的话,只需解压安装包启动 hive 命令即可。由此可以看出,不同客户端、不同路径启动的 hive,每个 hive 进程都拥有自己的一套元数据,这些元数据无法共享。

内嵌模式只适用于实验环境,不适用于生产环境。

2、本地模式

本地模式不再使用内嵌的 Derby 作为元数据的存储介质,而是采用外部数据库来存储元数据。目前支持的外部数据库有 MySQL、PostgreSQL、Oracle 等,企业使用 MySQL 的比较多。

本地模式也不需要启动 Metastore 服务,当启动 Hive 服务后,Hive 进程里面会默认启动一个 Metastore 服务。如果我们采用的外部存储是 MySQL,那么 MySQL 可以和 Metastore 在一台机器上,也可以不在一台机器上。

Hive 在启动的时候会根据配置文件(hive-site.xml)中的 hive.metastore.uris 参数值来判断运行模式,如果没有配置此参数或者此参数为空,那么 Hive 将启动一个本地模式。

本地模式是一个多用户模式,多个客户端可以连接到同一个 MySQL 中,但每个客户端必须要有对 MySQL 的访问权限,也就是说每个连接到 Hive 的客户端都必须在 MySQL 库中进行授权。很显然,这种机制有很大问题,如果有几百个客户端需要连接到 Hive 的话,那么就要在 MySQL 中做几百个授权。此时,权限管理和数据安全都将面临极大考验。

这种模式可以作为公司内部测试、开发环境使用,不适用于生产环境。

3、远程模式

远程模式仍然是采用外部数据库来存储元数据,同时需要单独启动 Metastore 服务,并且 Metastore 服务和 Hive 服务是两个独立不同的进程。由于启动了 Metastore 服务,Hive 客户端只需要在 hive-site.xml 中配置 hive.metastore.uris 参数来指定 Metastore 服务所在机器的 IP 和端口,即可快速连接到后端的元数据库中,无需对客户端在数据库中进行授权操作。

在生产环境中,建议使用远程模式,它更加高效和安全。

Hive Metastore 的三种配置模式,其实也就是 Hive 的三种运行方式,你可以根据使用场景来决定使用哪种模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1421421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

05 MyBatis之表关系的声明+事务+SqlSession三件套的作用域

MyBatis 支持一对一,一对多,多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表…

Kotlin快速入门系列9

Kotlin对象表达式和对象声明 对象表达式 有时,我们想要创建一个对当前类有些许修改的对象同时又不想重新声明一个子类。如果是Java,可以用匿名内部类的概念来解决这个问题。kotlin的对象表达式和对象声明就是为了实现这一点(创建一个对某个类做了轻微改…

Java 开发环境 全套包含IDEA

一、JDK配置 1.下载 JDK Builds from Oracle 去这边下载open JDK 2.JDK环境变量配置 按win,打开设置 找到环境变量编辑 这边输入的是你下载的那个JDK的bin的路径 检擦配置是否正确在cmd中输入 二、IDEA安装配置 1.下载(社区版) JetBrai…

干货 | 大模型在图数据分析、推荐系统和生物科学中的综合应用

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 图机器学习、推荐系统与大语言模型的融合正成为新的前沿热点。图机器学习通过利用图结构数据,能够有效地捕捉和分析复杂关系和模式。同时,推荐系统正逐步成为我们日常生活的一部分&#…

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流 业务需求 如图1所示,两台交换机集群组网,两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层,也就是…

走进水稻种植教学基地可视化:科技与农业知识的完美结合

随着科技的不断发展,农业领域也在不断创新和进步。水稻种植教学基地可视化系统是一种基于现代信息技术手段的教学方式,通过虚拟现实、3D建模等技术,将水稻种植的全过程进行模拟和展示。这种教学方式打破了传统农业教学的局限性,使…

腾讯云部署vue+node项目

文章目录 一、安装宝塔二、vue项目部署三、node项目部署 前言: 关于项目部署,一开始也是找了很多资料,费了点时间,所以记录一下。希望能对各位有所帮助。 一、安装宝塔 1.首先在控制台,进入云服务器的终端界面 2.输入命令和密码获取权限,并且安装宝塔界面 yum install -y w…

关于在Tkinter + Pillow图片叠加中出现的问题

这段时间我一直在尝试对多图层图片进行一个叠加的操作,想用tkinter实现出来,先看错误 这里我其实已经选择了图片,但是发现是ValueError,我尝试断点检测但是也无动于衷,因为设置变量检测的时候发现变量并没有错误&…

Opencv——图片卷积

图像滤波是尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 线性滤波是图像处理最基本的方法,它允许我们对图像进行处理,产生很多不同的效果。首先,我们需要一个二…

大数据学习之Redis,十大数据类型的具体应用(三)

目录 3.7 Redis位图(bitmap) 概念 需求 是什么 说明 能干嘛? 基本命令 3.7 Redis位图(bitmap) 概念 由0和1状态表现的二进制位的bit数组 需求 用户是否登陆过?Y / N 广告是否被点击过? 钉钉打…

【机器学习】常见算法详解第2篇:KNN之kd树介绍(已分享,附代码)

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用&#xff0…

外汇监管牌照解析:确保交易安全与合规性

外汇交易中,资金安全与平台监管是大家最关心的话题。监管是评估外汇经纪商是否值得信赖、是否具备相关资质的关键依据,因此选择一家拥有海外合法监管的经济商至关重要。 那么,今天我们就来聊聊全球权威的几大监管机构 — FCA、ASIC、NFA、FSA…

linux -- 内存管理 -- 页面分配器

linux内存管理 为什么要了解linux内存管理 分配并使用内存,是内核程序与驱动程序中非常重要的一环。内存分配函数都依赖于内核中一个非常复杂而重要的组件 - 内存管理。 linux驱动程序不可避免要与内核中的内存管理模块打交道。 linux内存管理可以总体上分为两大…

Tensorflow2.0笔记 - Tensor的限值clip操作

本笔记主要记录使用maximum/minimum,clip_by_value和clip_by_norm来进行张量值的限值操作。 import tensorflow as tf import numpy as nptf.__version__#maximum/minimumz做上下界的限值 tensor tf.random.shuffle(tf.range(10)) print(tensor)#maximum(x, y, nameNone) #对…

数据可视化 pycharts实现地理数据可视化(全球地图)

自用版 紧急整理一点可能要用的可视化代码,略粗糙 以后有机会再改 requirements: python3.6及以上pycharts1.9 数据格式为: 运行结果为: import pandas as pd from pyecharts.charts import Map, Timeline from pyecharts im…

Unity3D正则表达式的使用

系列文章目录 unity工具 文章目录 系列文章目录前言一、匹配正整数的使用方法1-1、代码如下1-2、结果如下 二、匹配大写字母2-1、代码如下1-2、结果如下 三、Regex类3-1、Match()3-2、Matches()3-3、IsMatch() 四、定义正则表达式…

TypeScript 学习笔记(Day2)

「写在前面」 本文为 b 站黑马程序员 TypeScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. TypeScript 学习笔记(Day1) 目录 3 TypeScript 常…

Java-并发高频面试题

1.说一下你对Java内存模型(JMM)的理解? 其实java内存模型是一种抽象的模型,具体来看可以分为工作内存和主内存。 JMM规定所有的变量都会存储再主内存当中,再操作的时候需要从主内存中复制一份到本地内存(c…

面试题:MySQL数据库索引失效的10连问你学会了吗?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

【2024.1.30练习】李白打酒加强版(25分)

题目描述 题目思路 在最多数据的情况下,有100个店100朵花,总情况为的天文数字,暴力枚举已经不可能实现,考虑使用动态规划解决问题。最后遇到的一定是花,所以思路更倾向于倒推。 建立二维数组,容易联想到为…