大数据技术之Hive:先导篇(一)

news2024/12/24 3:44:17

目录

一、什么是Hive

二、思考如何设计出Hive功能

2.1 提问

2.2 案例分析

2.3 小结

三、掌握Hive的基础架构

3.1 Hive组件 - 元数据存储

3.2 Hive组件 - Driver驱动程序

3.3 Hive组件 - 用户接口


一、什么是Hive

什么是分布式SQL计算

我们知道,在进行数据统计分析时,通常是编程语言(如Java、Python) +  SQL,说明SQL是目前数据统计分析最为方便的编程工具

大数据体系中充斥着非常多的统计分析场景。所以,使用SQL去处理数据,在大数据中也是有极大的需求的 。

但是前面我们学习的非常重要的MapReduce,它只支持程序开发(Java、Python等),不支持SQL开发

所以,尽管MapReduce很重要,计算效率很高,由于不支持SQL开发,使用上就显得非常复杂。

由此,Hive应运而生。

什么是Hive

Apache Hive是一款分布式SQL计算的工具, 其主要功能是:

将SQL语句 翻译成MapReduce程序运行

 Hive的好处

使用Hadoop MapReduce直接处理数据所面临的问题:

  • 人员学习成本太高 需要掌握java、Python等编程语言
  • MapReduce实现复杂查询逻辑开发难度太大

使用Hive处理数据的好处

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 底层执行MapReduce,可以完成分布式海量数据的SQL处理

二、思考如何设计出Hive功能

2.1 提问

如果让您设计Hive这款软件,要求能够实现

  1. 用户只编写sql语句
  2. Hive自动将sql转换MapReduce程序并提交运行
  3. 处理位于HDFS上的结构化数据。

如何实现?

2.2 案例分析

针对SQL:SELECT city, COUNT(*) FROM t_user GROUP BY city;

若翻译成MapReduce程序,有如下问题:

  • 数据文件在哪里?
  • 使用什么符号作为列的分隔符?
  • 哪些列可以作为 city 使用?
  • city列是什么类型的数据?

下面我们逐一分析:

数据文件在哪里?

单凭这个”给定的SQL“,怎么知道数据文件放在什么位置呢?

这一点我们不妨借鉴一下数据库(例如MySQL数据库),它通过SQL语句内部就能够定位到数据文件的存储位置。

同理,使用什么符号作为列的分隔符?哪些列可以作为 city 使用?city列是什么类型的数据?这些个问题,在MySQL中通过内部映射关系都能够解决。

那么,最最简单的方法,就是找一个数据库,让它管理我们的数据。我们称为元数据管理

元数据管理

所以,元数据管理的功能,即:

解决数据位置、数据结构等问题,对数据进行描述进行记录。

SQL解析器

解决了元数据管理后,我们还有一个至关重要的步骤, 即完成SQL到MapReduce转换的功能

这个功能,我们称它为SQL解析器,期待它能做到:

  • SQL分析
  • SQL到MapReduce程序的转换
  • 提交MapReduce程序运行并收集执行结果

注意:这里提到的SQL解析和数据库工具(比如Mysql)的SQL解析器不是一回事。MySQL的SQL解析器是内部解析SQL语法的工具。这里的SQL解析器是针对Hive工具设计的,目的是让Hive的SQL能被解析转换成MapReduce程序,同时也能对SQL进行分析等等。因为Hive的SQL和数据库的SQL是有区别的。

至于Hive的SQL和数据库的SQL有什么异同,怎么让MySQL识别到Hive的SQL语法,这个后续慢慢讲~

所以,当解析器也拥有了之后,我们就完成了一款基于MapReduce的,分布式SQL执行引擎的基础构建。

2.3 小结

Apache Hive其2大主要组件就是:SQL解析器以及元数据存储, 如下图。

三、掌握Hive的基础架构

3.1 Hive组件 - 元数据存储

通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

-- Hive提供了 Metastore 服务进程提供元数据管理功能

3.2 Hive组件 - Driver驱动程序

即SQL解析器,包括语法解析器、计划编译器、优化器、执行器。

作用

完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。

生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。

这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar文件即Java代码中。

3.3 Hive组件 - 用户接口

包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。

-- Hive提供了 Hive Shell、 ThriftServer等服务进程向用户提供操作接口

下一章,会讲解Apache Hive的安装部署以及 hello world   

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

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

相关文章

cf 交互题

今天cf遇到了交互题,这个交互题的算法很很很简单,但是在交互上卡了,导致交上的代码都不算罚时。(更伤心了。 所以,现在写一下交互题的做法,印象深刻嘛。 交互题,就是跟机器进行交互。你代码运…

开始撸 Android 源码

启动找工作模式,发现无比困难。搁在往日,大龄程序员找工作都是一件困难的事情,加上今年形势很差,更是难上加难。关键是我这十几年来主攻的浏览器内核方向,需求量更是几乎为零。在 BOSS 直聘上以 Chromium 为关键词&…

DeepSpeed

DeepSpeed概念 DeepSpeed中用到的技术包括以下几个等级: ZeRO-1:只对optimizer进行切片后分布式保存 ZeRO-2:对optimizer和grad进行切片后分布式保存 ZeRO-3:对optimizer、grad和模型参数进行切片后分布式保存 offload&#xff1…

【RocketMQ】设计理念与核心概念扫盲

【RocketMQ】设计理念与核心概念扫盲 文章目录 【RocketMQ】设计理念与核心概念扫盲一、RocketMQ的设计理念和目标1.1、设计理念1.2、设计目标 二、RocketMQ的核心概念扫盲篇2.1、部署架构2.1.1、Nameserver2.1.2、Broker2.1.3、Client 2.2、消息订阅模型2.2.1、消费模式2.2.2、…

【C++基础】简单工程模式、工厂模式、抽象工程模式

本文参考:简单工厂模式 - 人造恶魔果实工厂1 | 爱编程的大丙​​​​​​ ​​​​​​工厂模式 - 人造恶魔果实工厂2 | 爱编程的大丙​​​​​ ​​​​​抽象工厂模式 - 弗兰奇一家 | 爱编程的大丙 工厂我们就可以得到想要的东西,在程序设计中&…

Nacos使用和注册部分源码介绍

Nacos简单介绍 Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例…

社群团购对接,【概率思维】可以增加你做项目的成功率!

社群团购对接,【概率思维】可以增加你做项目的成功率! 今天来聊一个关于概率的问题,我们不管去做社群团购项目、做流量,还是做销售,我们都要有概率思维,有了这个思维以后,就可以增加你的成功率…

input输入框从右边开始输入,光标靠左移动

未设置前 光标在左边 <input type"number" placeholder"请输入分润数量" placeholder-class"shareprofit_placeholder_num" v-model"money">设置后 光标在右边 <input type"number" placeholder"请输入分润数…

C#开发的OpenRA游戏之调试菜单1

C#开发的OpenRA游戏之调试菜单1 在开发一个游戏里,经常需要提供一些调试设置,以便快速地达到需要测试的阶段,否则按正常游戏的进程,就会需要比较久的时间,这样浪费开发人员的时间。 在OpenRA提供一个调试菜单,它就是在下面的界面里: 这个菜单叫做 Debug Menu,当玩家点…

关于游戏开发,还有这些信息你可能不知道

游戏开发是一个复杂而令人兴奋的领域&#xff0c;有许多人不知道的有趣事实和趋势。以下是一些可能令你感兴趣的游戏开发领域的事实&#xff1a; 游戏开发是巨大的产业&#xff1a; 游戏产业已经成为世界上最大的娱乐产业之一&#xff0c;超过电影和音乐产业。这包括移动游戏、…

综合续航达1040公里:腾势计划2024年在香港上市,售价60-100 万

腾势汽车表示&#xff0c;他们计划于2024年在香港地区上市全新的D9车型。这款中大型高端新能源MPV是通过DM-i超级混动技术打造的&#xff0c;由于综合续航能力达到1040公里&#xff0c;且纯电续航最大可达190公里&#xff0c;这款车已经引起了广泛关注。据腾势销售事业部总经理…

华为云云耀云服务器L实例评测|教你如何使用云服务器L实例

目录 一、为什么选择华为云云耀云服务器L实例1、智能不卡顿2、价优随心用3、上手更简单4、管理特省心 二、服务器快速上手1、注册账号2、查看华为云耀云服务器L实例产品信息3、购买4、查看服务器详情5、远程登录6、通过第三方终端连接 三、宝塔面板管理服务器 本篇文章给大家分…

分享一个宝贝,如果你对新奇世界感兴趣,这个绝对不能错过

昨晚没怎么睡好&#xff0c;迷迷糊糊到天亮&#xff0c;6点多起床后反思&#xff0c;应该是因为今天周一&#xff0c;要上班&#xff0c;所以晚上没睡好&#xff0c;好像这叫“周一综合症”&#xff0c;即不想上班。 周末两天其实也没做啥&#xff0c;翻完小说《动物农场》&…

「AIGC」智能美学,AI绘画 API 激发无限创意

引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI绘画 API 正在以惊人的速度改变艺术创作的面貌。它不仅为艺术家和创作者提供了全新的创作工具&#xff0c;还激发了无限的创意和想象力。在这个智能美学的时代&#xff0c;让我们一起探索 AI 绘画 AP…

Three.js-矩形块shader

自定义shader代码在文末 调用方式&#xff1a; new AudioMaterial({ row: 10,column: 5,start: new Color("#00CC99"),end: new Color("#d3039c"),brightness: "(p.y < fft && p.y > fft -0.1)" })就是这样 这样 默认不传递fre…

Neo4j安装教程及版本匹配

Neo4j简介 Neo4j是基于java的图形数据库&#xff08;即环境中需预先安装jdk&#xff0c;jdk8是免费的&#xff0c;但是jdk11及更高的版本是收费的&#xff09;&#xff1b;开源&#xff1b;NoSQL(非关系型数据库) windows环境中neo4j与jdk版本的对应关系 neo4j版本jdk版本3.58…

AUTOSAR-UDS诊断

目录 一.AutoSAR 诊断功能概述 二.UDS 服务分类 诊断报文格式 &#xff08;1&#xff09;带有子服务的请求报文 &#xff08;2&#xff09;不带子服务的请求报文 &#xff08;3&#xff09;含有子服务正响应报文 &#xff08;4&#xff09;不含子服务正响应报文 &#…

无涯教程-JavaScript - PMT函数

描述 PMT功能基于固定的还款额和固定的利率来计算贷款的还款额。 语法 PMT (rate, nper, pv, [fv], [type])争论 Argument描述Required/OptionalRateThe interest rate for the loan.RequiredNperThe total number of payments for the loan.RequiredPv 现在的价值,或一系列…

1462. 课程表 IV

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;Floyd传递闭包方法二&#xff1a;拓扑排序 思考写在最后 Tag 【拓扑排序】【传递闭包】【并查集】【数组】 题目来源 1462. 课程表 IV 题目解读 给你一个表示课程先决条件的数组 prerequisites&#xff0c;prerequis…

LeetCode:88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组…