Hive 安装与架构详解
Hive 安装(基于 Ubuntu 系统)
为了学习 Hive 的相关操作,我们需要先安装 Hive,以下是基于 Ubuntu 系统安装 Hive 的步骤:
- 下载 Hive
我们将使用 hive-0.13.1-cdh5.3.2 版本,当然你可以根据需要下载最新的 Hive 版本。
下载链接:Cloudera Hive 0.13.1
下载后得到一个压缩包:hive-0.13.1-cdh5.3.2.tar.gz。
- 解压 Hive 文件
解压下载的压缩包:
tar zxvf hive-0.13.1-cdh5.3.2.tar.gz
- 设置 Hive 环境变量
打开 ~/.bashrc 文件,并在文件末尾添加以下环境变量设置:
export HADOOP_USER_CLASSPATH_FIRST=true
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/home/yourusername/hadoop-2.6.0-cdh5.5.1
export HIVE_HOME=/home/yourusername/hive-0.13.1-cdh5.3.2
注意:
- 修改 HADOOP_HOME 和 HIVE_HOME 为你自己 Hive 和 Hadoop 的实际安装路径。
- 保存并退出文件。
使修改的环境变量生效:
source ~/.bashrc
- 执行 Hive
在终端中输入 hive 进入 Hive 命令模式:
$ hive
- 退出 Hive
如果想退出 Hive 命令行,可以使用以下命令:
hive> exit;
Hive 常用命令
以下是一些 Hive 中常用的基本命令:
- show databases 命令
列出当前 Hive 中的所有数据库。如果是新安装的 Hive,会默认有一个名为 “default” 的数据库。
show databases;
- create database 命令
创建一个新的数据库。
create database test;
- use 命令
切换到指定的数据库。
use test;
- 显示当前数据库
查看当前所处的数据库,可以使用以下命令:
set hive.cli.print.current.db=true;
默认情况下,hive.cli.print.current.db 为 false,设置为 true 后,会显示当前所在的数据库名。
5. drop 命令
删除数据库或表。
drop database test;
drop table employee;
- create table 命令
创建新表。以下是创建表的示例,字段包括姓名、ID、手机号和薪水:
create table employee (Name String comment 'Employee Name',Id int,MobileNumber String,Salary Float
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
- 查看当前库的所有表
查看当前数据库中的所有表:
show tables;
- alter table 命令
用于修改表的属性,如修改表名、添加列、删除列等。
ALTER TABLE employee RENAME TO demo1;
- 加载数据到 Hive 表
将本地文件中的数据加载到 Hive 表中:
LOAD DATA LOCAL INPATH '/home/dataflair/Desktop/details.txt' OVERWRITE INTO TABLE employee;
Hive 架构概述
Hive 架构建立在 Hadoop 和 MapReduce 的基础之上,主要用于简化大数据的查询和分析过程。它的架构由多个关键组件组成,可以分为服务端组件和客户端组件。
服务端组件
Driver 组件: Driver 是 Hive 中的核心组件,包括三个子组件:
(1)Compiler:负责将 HiveQL 语句解析为执行计划。
(2)Optimizer:对生成的执行计划进行优化。
(3)Executor:执行优化后的计划,并将其转换成底层的 MapReduce 作业。
Metastore 组件: Metastore 是 Hive 用来存储元数据的服务,元数据包括表结构、列类型、分区信息等。Metastore 通常存储在关系数据库中(如 Derby 或 MySQL)。它的作用非常重要,因此 Hive 允许将 Metastore 服务独立出来,运行在单独的服务器集群上,以提高系统的健壮性和可扩展性。
Thrift 服务: Thrift 是 Facebook 开发的跨语言服务框架,Hive 使用 Thrift 来允许不同编程语言与 Hive 交互。通过 Thrift,Hive 可以暴露其接口,使得不同语言的客户端能够与 Hive 进行通信。
客户端组件
- CLI(命令行接口): Hive 提供了一个类似于 SQL 的命令行接口,用户可以通过命令行执行 HiveQL 查询。
- Thrift 客户端: Hive 的客户端接口大多数是通过 Thrift 客户端实现的,包括 JDBC 和 ODBC接口,允许其他编程语言与 Hive 进行交互。
- Web GUI: Hive 提供了基于 Web 的图形用户界面(HWI,Hive Web Interface),用户可以通过 Web
浏览器访问 Hive。HWI 需要在服务器上启动后才能使用。
Hive 数据处理流程
Hive 的数据处理流程主要包括以下步骤:
-
UI 调用 Driver: 用户通过 Web 界面或 CLI 输入 HiveQL 查询,Hive 会调用 Driver 的 execute 接口来执行查询。
-
Driver 创建会话: Driver 为每个查询创建会话句柄,并将查询发送给 Compiler 进行解析。
-
Compiler 生成执行计划: Compiler 会根据 HiveQL
查询生成执行计划。执行计划包含一个有向无环图(DAG),每个阶段可能是一个 MapReduce 作业、元数据操作或 HDFS 操作。
在生成执行计划时,Compiler 会向 Metastore 请求元数据信息,用于查询表达式的类型检查。 -
优化执行计划: Optimizer 对生成的执行计划进行优化,确保查询的执行更加高效。
-
执行计划提交给 Execution Engine: 执行引擎将优化后的执行计划提交给适当的组件进行执行,包括 MapReduce 阶段。每个任务(mapper 或 reducer)会处理 HDFS 上的数据,执行特定的操作。
-
数据处理和中间结果存储:
每个 Map 或 Reduce 任务会从 HDFS 读取数据并执行操作。
在没有 Reduce 阶段的情况下,Map 任务的输出会临时保存在 HDFS 上,等待后续阶段的处理。
对于 DML(数据操作语言)操作,临时文件会被移动到目标表的位置,确保不会出现脏数据读取(HDFS 的文件重命名操作是原子的)。 -
查询结果返回给客户端: 执行引擎会从 HDFS 读取最终的查询结果,并通过 Driver 的 Fetch API 返回给客户端。
总结
Hive 的架构通过多个组件分工合作,完成数据查询和分析任务。Hive 通过 CLI 或 Web 界面接收用户查询,并通过复杂的查询解析和优化流程,最终将查询转化为 MapReduce 作业执行。Metastore 提供了查询所需的元数据信息,Thrift 服务则允许外部程序通过不同语言与 Hive 交互。通过这一架构,Hive 提供了一个强大且易于使用的大数据查询工具,简化了 Hadoop 的使用。
相关文章:

Hive 安装与架构详解
Hive 安装(基于 Ubuntu 系统) 为了学习 Hive 的相关操作,我们需要先安装 Hive,以下是基于 Ubuntu 系统安装 Hive 的步骤: 下载 Hive 我们将使用 hive-0.13.1-cdh5.3.2 版本,当然你可以根据需要下载最新的…...

前端入门指南:模块打包器是什么?模块打包器的工作原理与实践
前言 在前端开发的生态系统中,随着项目复杂度和规模的不断提升,代码管理和优化变得至关重要。模块化开发作为一种有效的代码组织方式,极大地提升了代码的可维护性和复用性。 然而,面对大量的模块和复杂的依赖关系,如…...

初识ProtoBuf以及环境搭建(Win和Ubuntu)
初始ProtoBuf 序列化和反序列化的概念 序列化:把对象转换为字节序列的过程 称为对象的序列化。 反序列化:把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化和反序列化? 存储数据:当你想把的内存中的对象状…...

springboot366高校物品捐赠管理系统(论文+源码)_kaic
毕 业 设 计(论 文) 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此ÿ…...

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息
目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉,出现新的请求结果,参数start更新,每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...

递归算法讲解(c基础)
递归的定义 递归是指在函数的定义中使用函数自身的方法。它是一种解决问题的策略,将一个大型复杂的问题逐步分解为规模更小的、与原问题相似的子问题来解决。当子问题的规模足够小,达到一个可以直接求解的基本情况(也称为终止条件)…...

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,
一、AJAX是什么 概念 : AJAX是一种与服务器(后端)通信的技术 二、请求库axios的基本用法 1导包 2使用 // 1. 发请求 axios({ url: 请求地址 }).then(res > { // 2.接收并使用数据 }) <body><p class"province"…...

QT6学习第六天 初识QML
QT6学习第六天 创建Qt Quick UI项目使用Qt Quick DesignerQML 语法基础导入语句 import对象 object 和属性 property布局注释表达式和属性绑定QML 编码约定 设置应用程序图标 创建Qt Quick UI项目 如果你有只测试QML相关内容快速显示界面的需求,这时可以创建Qt Qui…...

映射vim键位,基本功能键位表(未更完)
键位映射:建议使用jj代替esc,毕竟esc离手那么远 linux下修改方法是:vim /etc/vim/vimrc 在该文件尾添加inoremap jj <Esc>该方法可以同样可以用到其他键位映射上 i:表示这个映射是在插入模式(insert mode)下有效…...

Python学习笔记(5)Python的创建型设计模式
创建型设计模式(Creational Design Patterns),主要关注对象的创建机制。这类模式可以使得系统更加独立于如何创建、组合和表示其对象。通过将这些职责分离出来,创建型设计模式有助于提高代码的灵活性和复用性。 本书的范例代码已经…...

qt QAnimationDriver详解
1、概述 QAnimationDriver是Qt框架中提供的一个类,它主要用于自定义动画帧的时间控制和更新。通过继承和实现QAnimationDriver,开发者可以精确控制动画的时间步长和更新逻辑,从而实现丰富和灵活的动画效果。QAnimationDriver与QAbstractAnim…...

零拷贝相关知识点(一)
前言 大家好,我是程序员田螺。 零拷贝是老生常谈的问题啦,大厂非常喜欢问。比如Kafka为什么快,RocketMQ为什么快等,都涉及到零拷贝知识点。最近技术讨论群几个伙伴分享了阿里、虾皮的面试真题,也都涉及到零拷贝。因此…...

STM32的CAN波特率计算
公式: CAN波特率 APB总线频率 / (BRP分频器 1)/ (SWJ BS1 BS2) SWJ一般为1。 例如STM32F407的,CAN1和CAN2都在在APB1下,频率是42000000 如果想配置成1M波特率,则计算公式为:...

简单好用的折线图绘制!
折线图的概念及作用: 折线图(Line Chart)是一种常见的图表类型,用于展示数据的变化趋势或时间序列数据。它通过一系列的数据点(通常表示为坐标系中的点)与这些点之间的线段相连,直观地展示变量…...

Hadoop批量计算实验
参考: Hadoop(一)之实验一CentOS7配置Hadoop系统:配置CentOS和下载安装包_基于虚拟机cents7搭建hadoop实验目的-CSDN博客 --------------------------------------------------------- 一、安装Vmware 二、创建虚拟机 1.安装centos7 ①打开VMware,点击新建虚拟机。 …...

基于rpcapd与wireshark的远程实时抓包的方法
基于rpcapd与wireshark的远程实时抓包的方法 服务端安装wireshark侧设置 嵌入式设备或服务器上没有图形界面,通常使用tcpdump抓包保存为pcap文件后,导出到本地使用wireshark打开分析,rpcapd可与wireshark配合提供一种远程实时抓包的方案&…...

ubuntu多版本安装gcc
1.ubuntu安装gcc 9.3.1 $ sudo apt update $ sudo apt install gcc-9 g-9 二、配置GCC版本 安装完成后,需要使用update-alternatives命令来配置GCC版本。这个命令允许系统在多个安装的版本之间进行选择 1.添加GCC 9.3.1到update-alternatives管理 $ sudo update-a…...

算法刷题Day1
BM47 寻找第k大 第一天就随便记录吧,万事开头难,我好不容易开的头,就别难为自己,去追求高质量了。嘿嘿嘿 题目 传送门 解题思路一:维护一个大小为k的最小堆。最后返回堆顶元素。 代码: # # 代码中的类名…...

泛化调用 :在没有接口的情况下进行RPC调用
什么是泛化调用? 在RPC调用的过程中,调用端向服务端发起请求,首先要通过动态代理,动态代理可以屏蔽RPC处理流程,使得发起远程调用就像调用本地一样。 RPC调用本质:调用端向服务端发送一条请求消息&#x…...

Java 泛型详细解析
泛型的定义 泛型类的定义 下面定义了一个泛型类 Pair,它有一个泛型参数 T。 public class Pair<T> {private T start;private T end; }实际使用的时候就可以给这个 T 指定任何实际的类型,比如下面所示,就指定了实际类型为 LocalDate…...

题解:CF332B Maximum Absurdity
CF332B CF332B 暴力思路 题目要我们找两个不重叠的区间,并使区间的值最大。那我们可以考虑使用双重循环搭配前缀和暴力求最大值。代码如下。 for(int i1;i<n;i) {ll lsum[ik-1]-sum[i-1],maxx;for(int jik;j<n;j){maxxlsum[jk-1]-sum[j-1];if(maxx>ans.…...

Vue 集成和使用 SQLite 的完整指东
1. 引言 SQLite 是一种轻量级的关系型数据库管理系统,以其简单易用、无需服务器等特点广泛应用于嵌入式系统、移动应用和小型应用程序中。在 Web 开发中,尤其是前端应用开发中,SQLite 可以作为客户端本地存储的一种选择,为用户提…...

【JVM什么时候触发YoungGC和FullGC】
YoungGC 年轻代Eden区满,就会触发YoungGC FullGC 老年代空间不足 经过多次GC后的大年龄对象会被放进老年代,或创建的大对象会直接在老年代分配,此时若老年代空间不足,就会触发FullGC。空间分配担保失败 触发YoungGC的时候会进行…...

ubuntu配置网络
1,设置桥接模式 1-1: 确定。 1-2: 编辑--->虚拟网络编辑器 刚安装ubuntu的时候,可能没有任何VMnet. 更改设置的目的: 添加VMnet0,并且设置VMnet为桥接模式--自动桥接。 如果没有VMnet0,选择添加网络…...

第十一课 Unity编辑器创建的资源优化_预制体和材质篇(Prefabs和Materials)详解
预制体(Prefabs) Unity中的预制体是用来存储游戏对象、子对象及其所需组件的可重用资源,一般来说预制体资源可充当资源模版,在此模版基础上可以在场景中创建新的预制体实例。 使用预制体的好处 由于预制体系统可以自动保持所有实例副本同步,…...

2024.11.29(单链表)
思维导图 声明文件 #ifndef __LINKLIST_H__ #define __LINKLIST_H__#include <myhead.h>typedef char datatype; //数据元素类型 //定义节点类型 typedef struct Node {union{int len; //头节点数据域datatype data; //普通节点数据域};struct Node *next; //指针域…...

基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)
乳腺癌是全球女性中最常见的恶性肿瘤之一,早期准确诊断对于提高生存率具有至关重要的意义。传统的乳腺癌诊断方法依赖于放射科医生的经验,然而,由于影像分析的复杂性和人类判断的局限性,准确率和一致性仍存在挑战。近年来…...

opengl 三角形
最后效果: OpenGL version: 4.1 Metal 不知道为啥必须使用VAO 才行。 #include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream> #include <vector>void framebuffer_size_callback(GLFWwindow *window, int width, int heigh…...

23种设计模式-抽象工厂(Abstract Factory)设计模式
文章目录 一.什么是抽象工厂设计模式?二.抽象工厂模式的特点三.抽象工厂模式的结构四.抽象工厂模式的优缺点五.抽象工厂模式的 C 实现六.抽象工厂模式的 Java 实现七.代码解析八.总结 类图: 抽象工厂设计模式类图 一.什么是抽象工厂设计模式?…...

手机上怎么拍证件照,操作简单且尺寸颜色标准的方法
在数字化时代,手机已成为我们日常生活中不可或缺的一部分。它不仅是通讯工具,更是我们拍摄证件照的便捷利器。然而,目前证件照制作工具鱼龙混杂,很多打着免费名号的拍照软件背后却存在着泄漏用户信息、照片制作不规范导致无法使用…...