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

目录

一、什么是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.hqwc.cn/news/109901.html

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

相关文章

C# 辗转相除法求最大公约数

辗转相除法求最大公约数 public static void CalcGCD(int largeNumber, int smallNumber, out int GCD){GCD 1;int remain -1;while (remain ! 0){remain largeNumber % smallNumber;GCD smallNumber;largeNumber smallNumber;smallNumber remain;}}

Python爬虫基础(四):使用更方便的requests库

文章目录 系列文章索引一、requests库的使用1、官方文档2、安装requests库3、简单使用4、使用get请求5、使用post请求6、使用代理 二、实战1、实战:实现古诗文网的登录(1)找到登录页面(2)登录操作需要的数据&#xff0…

MongoDB的搭建 和crud操作

MongoDB docker 下载 docker run --restartalways -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6使用navcat工具使用MongoDB Crud操作 jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>lom…

Web安全与攻防

Web安全概述 在Internet大众化及Web技术飞速演变的今天&#xff0c;在线安全所面临的挑战日益严峻。伴随着在线信息和服务的可用性的提升&#xff0c;以及基于Web的攻击和破坏的增长&#xff0c;安全风险达到了前所未有的高度。Web安全可以从以下三个方面进行考虑&#xff1a;…

负载均衡-ribbon源码解析

负载均衡-ribbon源码解析 1 LoadBalanced注解 /*** 基于ribbon调用服务及负载均衡* return*/ LoadBalanced Bean public RestTemplate restTemplate(){return new RestTemplate(); }Bean ConditionalOnMissingBean public RestTemplateCustomizer restTemplateCustomizer(fin…

基于element-ui的年份范围选择器

基于element-ui的年份范围选择器 element-ui官方只有日期范围和月份范围选择器&#xff0c;根据需求场景需要&#xff0c;支持年份选择器&#xff0c;原本使用两个分开的年份选择器实现的&#xff0c;但是往往有些是不能接受的。在网上找了很多都没有合适的&#xff0c;所以打…

记录一次部署Hugo主题lotusdocs到Github Pages实践

引言 随着开源项目的越来越复杂&#xff0c;项目文档的重要性日渐突出。一个好的项目要有一个清晰明了的文档来帮助大家使用。最近一直有在找寻一个简洁明了的文档主题来放置项目的各种相关文档。最终找到这次的主角&#xff1a;Lotus Docs 基于Hugo的主题。Lotus Docs的样子&…

Axure原型设计累加器计时器设计效果(职业院校技能大赛物联网技术应用项目原型设计题目)

目录 前言 一、本题实现效果 二、操作步骤 1.新建文件 2.界面设计 2.1文本框 2.2 按钮 2.3设计界面完成 3.交互 3.1启动交互设置 3.2 分别设置三个属性 3.2.1 设置值为“0” 3.2.2 文字于文本框 3.2.3 获取焦点时 3.3 停止按钮的交互动作 3.3.1 设置变量值 3.4 重…

RCNA 锐捷培训

第一章 网络基础入门 1.1 OSI参考模型及TCP/IP协议栈 数据是如何传输的&#xff1f; 数据在计算机网络中传输通常依赖于TCP/IP协议模型。 什么是网络&#xff1f; 网络是一种连接多个计算机、设备或系统的通信基础设施&#xff0c;其目的是实现资源共享、信息传递、接收和共享…

mysql 快速上传数据

快速上传数据 这个应该是比inset into values更快的插入数据的办法了。 不过要求挺苛刻的&#xff0c;数据要整理成和表格一致&#xff0c;也就是说每条数据都是完整的一条&#xff0c;而不是一部分。 下面的示例我以***为分割符划分字段&#xff0c;以 \n来分割每条数据。 LO…

自动化运维工具Ansible教程(二)【进阶篇】

文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题&#xff08;例如&#xff1a;角色、动态清单、变量管理等&#xff09;**1. 角色&#xff08;Roles&#xff09;**&#x…

Tomcat修改配置文件

1.Tomcat启动乱码问题 1.1conf目录 说明&#xff1a;找到conf目录下logging.properties文件 1.2打开logging.properties文件 说明&#xff1a;将UTF-8修改成GBK 1.3.效果 2.端口冲突问题 2.1 conf目录 2.2打开 server.xml文件 2.3.修改端口 说明&#xff1a;port指的就是端…