当前位置: 首页 > news >正文

Hive 安装与架构详解

Hive 安装(基于 Ubuntu 系统)

为了学习 Hive 的相关操作,我们需要先安装 Hive,以下是基于 Ubuntu 系统安装 Hive 的步骤:

  1. 下载 Hive

我们将使用 hive-0.13.1-cdh5.3.2 版本,当然你可以根据需要下载最新的 Hive 版本。
下载链接:Cloudera Hive 0.13.1
下载后得到一个压缩包:hive-0.13.1-cdh5.3.2.tar.gz。

  1. 解压 Hive 文件

解压下载的压缩包:

tar zxvf hive-0.13.1-cdh5.3.2.tar.gz
  1. 设置 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
  1. 执行 Hive

在终端中输入 hive 进入 Hive 命令模式:

$ hive
  1. 退出 Hive

如果想退出 Hive 命令行,可以使用以下命令:

hive> exit;

Hive 常用命令
以下是一些 Hive 中常用的基本命令:

  1. show databases 命令
    列出当前 Hive 中的所有数据库。如果是新安装的 Hive,会默认有一个名为 “default” 的数据库。
show databases;
  1. create database 命令
    创建一个新的数据库。
create database test;
  1. use 命令
    切换到指定的数据库。
use test;
  1. 显示当前数据库
    查看当前所处的数据库,可以使用以下命令:
set hive.cli.print.current.db=true;

默认情况下,hive.cli.print.current.db 为 false,设置为 true 后,会显示当前所在的数据库名。
5. drop 命令
删除数据库或表。

drop database test;
drop table employee;
  1. 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;
  1. 查看当前库的所有表
    查看当前数据库中的所有表:
show tables;
  1. alter table 命令
    用于修改表的属性,如修改表名、添加列、删除列等。
ALTER TABLE employee RENAME TO demo1;
  1. 加载数据到 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 的数据处理流程主要包括以下步骤:

  1. UI 调用 Driver: 用户通过 Web 界面或 CLI 输入 HiveQL 查询,Hive 会调用 Driver 的 execute 接口来执行查询。

  2. Driver 创建会话: Driver 为每个查询创建会话句柄,并将查询发送给 Compiler 进行解析。

  3. Compiler 生成执行计划: Compiler 会根据 HiveQL
    查询生成执行计划。执行计划包含一个有向无环图(DAG),每个阶段可能是一个 MapReduce 作业、元数据操作或 HDFS 操作。
    在生成执行计划时,Compiler 会向 Metastore 请求元数据信息,用于查询表达式的类型检查。

  4. 优化执行计划: Optimizer 对生成的执行计划进行优化,确保查询的执行更加高效。

  5. 执行计划提交给 Execution Engine: 执行引擎将优化后的执行计划提交给适当的组件进行执行,包括 MapReduce 阶段。每个任务(mapper 或 reducer)会处理 HDFS 上的数据,执行特定的操作。

  6. 数据处理和中间结果存储
    每个 Map 或 Reduce 任务会从 HDFS 读取数据并执行操作。
    在没有 Reduce 阶段的情况下,Map 任务的输出会临时保存在 HDFS 上,等待后续阶段的处理。
    对于 DML(数据操作语言)操作,临时文件会被移动到目标表的位置,确保不会出现脏数据读取(HDFS 的文件重命名操作是原子的)。

  7. 查询结果返回给客户端: 执行引擎会从 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

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

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息

目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉,出现新的请求结果,参数start更新,每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...

递归算法讲解(c基础)

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

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,

一、AJAX是什么 概念 &#xff1a; AJAX是一种与服务器&#xff08;后端&#xff09;通信的技术 二、请求库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相关内容快速显示界面的需求&#xff0c;这时可以创建Qt Qui…...

映射vim键位,基本功能键位表(未更完)

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

Python学习笔记(5)Python的创建型设计模式

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

qt QAnimationDriver详解

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

零拷贝相关知识点(一)

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

STM32的CAN波特率计算

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

简单好用的折线图绘制!

折线图的概念及作用&#xff1a; 折线图&#xff08;Line Chart&#xff09;是一种常见的图表类型&#xff0c;用于展示数据的变化趋势或时间序列数据。它通过一系列的数据点&#xff08;通常表示为坐标系中的点&#xff09;与这些点之间的线段相连&#xff0c;直观地展示变量…...

Hadoop批量计算实验

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

基于rpcapd与wireshark的远程实时抓包的方法

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

ubuntu多版本安装gcc

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

算法刷题Day1

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

泛化调用 :在没有接口的情况下进行RPC调用

什么是泛化调用&#xff1f; 在RPC调用的过程中&#xff0c;调用端向服务端发起请求&#xff0c;首先要通过动态代理&#xff0c;动态代理可以屏蔽RPC处理流程&#xff0c;使得发起远程调用就像调用本地一样。 RPC调用本质&#xff1a;调用端向服务端发送一条请求消息&#x…...

Java 泛型详细解析

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

超短脉冲激光自聚焦效应

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

大话软工笔记—需求分析概述

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

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启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面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Spring数据访问模块设计

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