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

一、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.mzph.cn/news/657160.shtml

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

相关文章

4D毫米波雷达分类和工程实现

4D毫米波目标检测信息丰富,可获得目标3维位置信息、径向速度vr和rcs等,能够对目标准确分类。 4D毫米波和激光做好时空同步,可以用激光目标给4D毫米波做标注,提升标注效率。 1 激光用做4D毫米波分类真值 128线激光推理的结果作为4…

ChatGPT学python: 用json文件传参

目录 json语法最简陋版python解析语法小结 json语法最简陋版 param.json [{"Table_name": "table1","Event_name_colum": 4,"update_colum": 9},{"Table_name": "table2","Event_name_colum": 3,&quo…

Windows编程入门-窗口控件-资源操作

window控件: 控件是常见的窗口上的交互元素例如:一个按钮,一个复选框,一个列表框等。 当控件的特定功能被触发后,会主动发送消息通知父窗口,父窗口可以通过发送消息给控件控制控件的行为。 控件的本质是一个…

[AG32VF407]国产MCU+FPGA Verilog编写控制2路gpio输出不同频率方波实验

视频讲解 [AG32VF407]国产MCUFPGA Verilog编写控制2路gpio输出不同频率方波实验 实验过程 根据原理图,选择两个pin脚作为输出 修改VE文件,clk选择PIN_OSC,使用内部晶振8Mhz,gpio使用PIN_51和52,pinout是数组 添加pll…

Uniapp小程序端打包优化实践

背景描述: 在我们最近开发的一款基于uniapp的小程序项目中,随着功能的不断丰富和完善,发现小程序包体积逐渐增大,加载速度也受到了明显影响。为了提升用户体验,团队决定对小程序进行一系列打包优化。 项目优化点&…

CentOS 7如何修改用户密码

一、问题 CentOS 7如何修改用户密码? 二、解答 1、passwd命令 [rootlocalhost ~]# passwd 用户名#需要在root用户下修改 [rootlocalhost ~]# su root#切换到root下,输入密码 #修改用户的密码,按提示输入新密码和确认密码,密码是…

EPSON RC 机器人-第一个程序

创建项目 有机械人且用USB线连接好。可以USB。没有真机的选择 C4 Sample 可以运行程序。 否刚会提示【不能连接到控制器,未安装USB驱动器】 代码 按F5打开运行窗口 再点【开始】 点 【是】,查看运行结果

安装并开始设置 Windows 终端(命令提示符或Windows PowerShell或Azure Cloud Shell)

安装 安装 若要试用最新的预览功能,可能还需要安装 Windows 终端预览。 ‼️备注 如果你无法访问 Microsoft Store,GitHub 发布页上发布有内部版本。 如果从 GitHub 安装,Windows 终端将不会自动更新为新版本。 有关使用包管理器&#xff…

跟着cherno手搓游戏引擎【15】DrawCall的封装

目标: Application.cpp:把渲染循环里的glad代码封装成自己的类: #include"ytpch.h" #include "Application.h"#include"Log.h" #include "YOTO/Renderer/Renderer.h" #include"Input.h"namespace YO…

Android Studio使用小记

复制了一个原来的项目&#xff0c;准备基于它调整一个OEM版本 因为svn服务器上分出了一个单独的版本&#xff0c;于是在工程目录下手工删除了.svn文件&#xff0c;并手工去除了vcs.xml <?xml version"1.0" encoding"UTF-8"?> <project versi…

第4章 python深度学习——(波斯美女)

第4章 机器学习基础 本章包括以下内容&#xff1a; 除分类和回归之外的机器学习形式 评估机器学习模型的规范流程 为深度学习准备数据 特征工程 解决过拟合 处理机器学习问题的通用工作流程 学完第 3 章的三个实例&#xff0c;你应该已经知道如何用神经网络解决分类问题和回归…

高通GAIA V3命令参考手册的研读学习(十三):GAIA通知

如前文《高通GAIA V3命令参考手册的研读学习&#xff08;四&#xff09;》所述&#xff0c;PDU一共有四种&#xff0c;前面已经讲了命令、回应以及错误码&#xff0c;现在来看最后一种&#xff1a;通知。 4. QTIL GAIA通知 通知发送的方向&#xff0c;是由设备发送到移动应用…

【Node.js】fs与path模块的基础使用

文章目录 前言一、什么叫做模块二、fs模块2.1 fs模块是干什么的&#xff1f;2.2 fs模块的使用导入fs模块读取文件的内容写入文件内容处理路径问题path路径模块 总结 前言 在Node.js中&#xff0c;fs模块&#xff08;文件系统模块&#xff09;是一个重要的核心模块&#xff0c;…

【操作系统】调用硬盘并且实现MBR与Loader的过渡——实战篇

一.概述 有了上一篇文章&#xff1a;【操作系统】调用硬盘并且实现MBR与Loader的过渡——原理篇的理论支持&#xff0c;我们就可以开始代码实操了&#xff0c;接下来我们将优化MBR程序&#xff0c;使其从扇区中读取出loader加载器&#xff0c;并将其存放到内存处&#xff0c;将…

excel怎么设置密码?轻松保护您的工作表

在数字化时代&#xff0c;数据的安全性显得尤为重要。excel作为我们日常工作中广泛使用的办公软件&#xff0c;其中可能包含了大量的敏感数据。为了确保这些数据不被未授权的人访问&#xff0c;本文将为您详细介绍excel怎么设置密码&#xff0c;从而有效地保护您的数据安全。 方…

基于Redis的高可用分布式锁——RedLock

目录 RedLock简介 RedLock工作流程 获取锁 释放锁 RedLock简介 Redis作者提出来的高可用分布式锁由多个完全独立的Redis节点组成&#xff0c;注意是完全独立&#xff0c;而不是主从关系或者集群关系&#xff0c;并且一般是要求分开机器部署的利用分布式高可以系统中大多数存…

delphi fmxui 做的一些跨平台app

pascal语音显然已经没落&#xff0c;但delphi还在坚挺着&#xff0c;每年都会发布新版本&#xff0c; 主要是做跨平台应用。 如果你觉得qt qml 写android app 比较麻烦&#xff0c;那可以尝试delphi 12&#xff0c;可以用c builder 尝试 android&#xff0c;ios 开发 下面的…

适用于 Windows 7/8/10/11电脑的 12 款顶级数据恢复软件

很多时候&#xff0c;我们在 Windows 7 /8/10/11下不小心按了删除键&#xff0c;从而丢失了硬盘或 USB 驱动器中的重要文件和数据。在某些情况下&#xff0c;病毒或软件错误可能会损坏您的硬盘&#xff0c;从而影响您的文件。在这种情况下&#xff0c;您迫切需要一款适用于 Win…

Labview 图像处理系统设计

1. 总体主界面设计 前面板界面如下&#xff1a; 界面总共分为一个实时采集加拍照控制模块&#xff0c;两个图像显示模块&#xff08;实时图像显示和直方图显示&#xff09;以及三个图像处理模块 前面板中各模块具体功能及使用说明如下&#xff1a; 1.当实时按钮关闭时&#x…

mysql .ibd 文件过大清理方法

问题 有一个 info_track 表用来临时存储告警推送数据&#xff0c;逻辑处理完成后&#xff0c;会执行 Delete 语句删除对应的记录。 问题&#xff1a;项目现场运行了几个月后&#xff0c;发现磁盘空间莫名占用了过多的存储&#xff0c;> 100GB&#xff0c;且无法释放。 生…