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…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...