【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)
第8章 数据仓库Hive的安装和使用
8.1 Hive的安装
8.1.1 下载安装文件
访问Hive官网(http://www.apache.org/dyn/closer.cgi/hive/)下载安装文件apache-hive-3.1.2-bin.tar.gz
下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下。请在Linux系统中打开一个终端,执行如下命令:
sudo tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv apache-hive-3.1.2-bin hive # 将文件夹名改为hive
sudo chown -R hadoop:hadoop hive # 修改文件权限
8.1.2 配置环境变量
为了方便使用,可以把hive命令加入到环境变量PATH中,从而可以在任意目录下直接使用hive命令启动,请使用vim编辑器打开“~/.bashrc”文件进行编辑,命令如下:
vim ~/.bashrc
在该文件的最前面一行添加如下内容:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
保存该文件并退出vim编辑器,然后,运行如下命令使得配置立即生效:
source ~/.bashrc
8.1.3 修改配置文件
将“/usr/local/hive/conf”目录下的hive-default.xml.template文件重命名为hive-default.xml,命令如下:
cd /usr/local/hive/conf
sudo mv hive-default.xml.template hive-default.xml
同时,使用vim编辑器新建一个文件hive-site.xml,命令如下:
cd /usr/local/hive/conf
vim hive-site.xml
在hive-site.xml中输入如下配置信息:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value><description>username to use against metastore database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value><description>password to use against metastore database</description></property>
</configuration>
8.1.4 安装并配置MySQL
1. 安装MySQL
这里采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据,因此,需要安装MySQL数据库。可以参照“附录B:Linux系统中的MySQL安装及常用操作”,完成MySQL数据库的安装,这里不再赘述。
2. 下载MySQL JDBC驱动程序
为了让Hive能够连接到MySQL数据库,需要下载MySQL JDBC驱动程序。可以到MySQL官网(http://www.mysql.com/downloads/connector/j/)下载mysql-connector-java-5.1.40.tar.gz。
在Linux系统中打开一个终端,在终端中执行如下命令解压缩文件:
cd ~
tar -zxvf mysql-connector-java-5.1.40.tar.gz #解压
下面将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/hive/lib
3. 启动MySQL
执行如下命令启动MySQL,并进入“mysql>”命令提示符状态:
service mysql start #启动MySQL服务
mysql -u root -p #登录MySQL数据库
4. 在MySQL中为Hive新建数据库
现在,需要在MySQL数据库中新建一个名称为hive的数据库,用来保存Hive的元数据。MySQL中的这个hive数据库,是与Hive的配置文件hive-site.xml中的“mysql://localhost:3306/hive”对应起来的,用来保存Hive元数据。在MySQL数据库中新建hive数据库的命令,需要在“mysql>”命令提示符下执行,具体如下:
create database hive;
5. 配置MySQL允许Hive接入
需要对MySQL进行权限配置,允许Hive连接到MySQL。
grant all on *.* to hive@localhost identified by 'hive';
flush privileges;
6. 启动Hive
Hive是基于Hadoop的数据仓库,会把用户输入的查询语句自动转换成为MapReduce任务来执行,并把结果返回给用户。因此,启动Hive之前,需要先启动Hadoop集群,命令如下:
cd /usr/local/hadoop
./sbin/start-dfs.sh
然后,再执行如下命令启动Hive:
cd /usr/local/hive
./bin/hive
8.2 Hive的数据类型
Hive的基本数据类型
类型
描述
示例
TINYINT
1个字节(8位)有符号整数
1
SMALLINT
2个字节(16位)有符号整数
1
INT
4个字节(32位)有符号整数
1
BIGINT
8个字节(64位)有符号整数
1
FLOAT
4个字节(32位)单精度浮点数
1.0
DOUBLE
8个字节(64位)双精度浮点数
1.0
BOOLEAN
布尔类型,true/false
true
STRING
字符串,可以指定字符集
“xmu”
TIMESTAMP
整数、浮点数或者字符串
1327882394(Unix新纪元秒)
BINARY
字节数组
[0,1,0,1,0,1,0,1]
Hive的集合数据类型
8.3 Hive基本操作
8.3.1 创建数据库、表、视图
1. 创建数据库
创建数据库hive
hive> create database hive;
创建数据库hive,因为hive已经存在,所以会抛出异常,加上if not exists关键字,则不会抛出异常
hive> create database if not exists hive;
2. 创建表
在hive数据库中,创建表usr,含三个属性id,name,age
hive> use hive;
hive>create table if not exists usr(id bigint,name string,age int);
在hive数据库中,创建表usr,含三个属性id,name,age,存储路径为“/usr/local/hive/warehouse/hive/usr”
hive>create table if not exists hive.usr(id bigint,name string,age int)
>location ‘/usr/local/hive/warehouse/hive/usr’;
在hive数据库中,创建外部表usr,含三个属性id,name,age,可以读取路径“/usr/local/data”下以“,”分隔的数据。
hive>create external table if not exists hive.usr(id bigint,name string,age int)
>row format delimited fields terminated by ','
location ‘/usr/local/data’;
在hive数据库中,创建分区表usr,含三个属性id,name,age,还存在分区字段sex。
hive>create table hive.usr(id bigint,name string,age int) partition by(sex boolean);
在hive数据库中,创建分区表usr1,它通过复制表usr得到。
hive> use hive;
hive>create table if not exists usr1 like usr;
3. 创建视图
创建视图little_usr,只包含usr表中id,age属性
hive>create view little_usr as select id,age from usr;
8.3.2 删除数据库、表、视图
删除数据库
删除数据库hive,如果不存在会出现警告
hive> drop database hive;
删除数据库hive,因为有if exists关键字,即使不存在也不会抛出异常
hive>drop database if not exists hive;
删除数据库hive,加上cascade关键字,可以删除当前数据库和该数据库中的表
hive> drop database if not exists hive cascade;
删除表
删除表usr,如果是内部表,元数据和实际数据都会被删除;如果是外部表,只删除元数据,不删除实际数据
hive> drop table if exists usr;
删除视图
删除视图little_usr
hive> drop view if exists little_usr;
8.3.3 修改数据库、表、视图
修改数据库
为hive数据库设置dbproperties键值对属性值来描述数据库属性信息
hive> alter database hive set dbproperties(‘edited-by’=’lily’);
修改表
重命名表usr为user
hive> alter table usr rename to user;
为表usr增加新分区
hive> alter table usr add if not exists partition(age=10);
删除表usr中分区
hive> alter table usr drop if exists partition(age=10);
把表usr中列名name修改为username,并把该列置于age列后
hive>alter table usr change name username string after age;
在对表usr分区字段之前,增加一个新列sex
hive>alter table usr add columns(sex boolean);
删除表usr中所有字段并重新指定新字段newid,newname,newage
hive>alter table usr replace columns(newid bigint,newname string,newage int);
为usr表设置tblproperties键值对属性值来描述表的属性信息
hive> alter table usr set tabproperties(‘notes’=’the columns in usr may be null except id’);
修改视图
修改little_usr视图元数据中的tblproperties属性信息
hive> alter view little_usr set tabproperties(‘create_at’=’refer to timestamp’);
8.3.4 查看数据库、表、视图
查看数据库
查看Hive中包含的所有数据库
hive> show databases;
查看Hive中以h开头的所有数据库
hive>show databases like ‘h.*’;
查看表和视图
查看数据库hive中所有表和视图
hive> use hive;
hive> show tables;
查看数据库hive中以u开头的所有表和视图
hive> show tables in hive like ‘u.*’;
8.3.5 描述数据库、表、视图
描述数据库
查看数据库hive的基本信息,包括数据库中文件位置信息等
hive> describe database hive;
查看数据库hive的详细信息,包括数据库的基本信息及属性信息等
hive>describe database extended hive;
描述表和视图
查看表usr和视图little_usr的基本信息,包括列信息等
hive> describe hive.usr/ hive.little_usr;
查看表usr和视图little_usr的详细信息,包括列信息、位置信息、属性信息等
hive> describe extended hive.usr/ hive.little_usr;
查看表usr中列id的信息
hive> describe extended hive.usr.id;
8.3.6 向表中装载数据
把目录’/usr/local/data‘下的数据文件中的数据装载进usr表并覆盖原有数据
hive> load data local inpath ‘/usr/local/data’ overwrite into table usr;
把目录’/usr/local/data‘下的数据文件中的数据装载进usr表不覆盖原有数据
hive> load data local inpath ‘/usr/local/data’ into table usr;
把分布式文件系统目录’hdfs://master_srever/usr/local/data‘下的数据文件数据装载进usr表并覆盖原有数据
hive> load data inpath ‘hdfs://master_srever/usr/local/data’
>overwrite into table usr;
8.3.7 查询表中数据
该命令和SQL语句完全相同这里不再赘述。
8.3.8 向表中插入数据或从表中导出数据
向表usr1中插入来自usr表的数据并覆盖原有数据
hive> insert overwrite table usr1
> select * from usr where age=10;
向表usr1中插入来自usr表的数据并追加在原有数据后
hive> insert into table usr1
> select * from usr
> where age=10;
8.4 Hive应用实例:WordCount
现在我们通过一个实例——词频统计,来深入学习一下Hive的具体使用。首先,需要创建一个需要分析的输入数据文件,然后编写HiveQL语句实现WordCount算法,在Unix下实现步骤如下:
(1)创建input目录,其中input为输入目录。命令如下:
cd /usr/local/hadoopmkdir input
(2)在input文件夹中创建两个测试文件file1.txt和file2.txt,命令如下:
cd /usr/local/hadoop/inputecho "hello world" > file1.txtecho "hello hadoop" > file2.txt
(3)进入hive命令行界面,编写HiveQL语句实现WordCount算法,命令如下:
hive
hive> create table docs(line string);
hive> load data inpath 'input' overwrite into table docs;
hive>create table word_count as
select word, count(1) as count from
(select explode(split(line,' '))as word from docs) w
group by word
order by word;
执行完成后,用select语句查看运行结果如下:

8.5 Hive编程的优势
词频统计算法是最能体现MapReduce思想的算法之一,接下来,我们将比较WordCount算法在MapReduce中的编程实现和Hive中编程实现的主要不同点:
1. 采用Hive实现WordCount算法需要编写较少的代码量
在MapReduce中,wordcount类由63行Java代码编写而成代码位置:%HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar;
而在Hive中只需要编写7行代码
2. 在MapReduce的实现中,需要进行编译生成jar文件来执行算法,而在Hive中不需要。
HiveQL语句的最终实现需要转换为MapReduce任务来执行,这都是由Hive框架自动完成的,用户不需要了解具体实现细节。
8.6 本章小结
Hive是一个构建于Hadoop顶层的数据仓库工具,主要用于对存储在 Hadoop 文件中的数据集进行数据整理、特殊查询和分析处理。Hive在某种程度上可以看作是用户编程接口,本身不存储和处理数据,依赖HDFS存储数据,依赖MapReduce处理数据。
本章介绍了Hive的安装方法,包括下载安装文件、配置环境变量、修改配置文件、安装并配置MySQL等。Hive支持关系数据库中的大多数基本数据类型,同时Hive还支持关系数据库中不常出现的的3种集合数据类型。Hive提供了类似SQL的语句——HiveQL,可以很方便地对Hive进行操作,包括创建、修改、删除数据库、表、视图等。Hive的一大突出优点是,可以把查询语句自动转化成相应的MapReduce任务去执行得到结果,这样就可以大大节省用户的编程工作量,本章最后通过一个WordCount应用实例,充分展示了Hive的这一优点。
相关文章:
【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)
第8章 数据仓库Hive的安装和使用 8.1 Hive的安装 8.1.1 下载安装文件 访问Hive官网(http://www.apache.org/dyn/closer.cgi/hive/)下载安装文件apache-hive-3.1.2-bin.tar.gz 下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的…...
BERT 详解
BERT简介 BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理(NLP)领域取得了重大突破,因为它能够有效地捕捉文本的上下文信息&am…...
使用 MySQL 的 REPLACE() 函数轻松替换表中字段
前言 在数据库操作中,经常需要对存储的数据进行一些处理和修改,替换字段中的部分信息。MySQL 提供了多种字符串函数来帮助开发者完成这些任务。其中一个非常实用的函数就是 REPLACE()。 REPLACE() 函数简介 REPLACE() 函数用于在字符串中查找指定的子…...
Http 响应协议
HTTP的响应协议 响应数据格式 响应行 响应数据的第一行,包括协议、状态码、描述 响应头 从响应数据格式的第二行开始,也是以key:value的格式 响应体 和响应头之间有一个空行,是响应数据格式的最后一部分,用于存放响应的数据 常见响…...
TCP/IP 协议:网络世界的基石(2/10)
一、引言 在当今数字化时代,互联网已经成为人们生活中不可或缺的一部分。而在互联网的背后,TCP/IP 协议扮演着至关重要的角色,堪称互联网的基石。 TCP/IP 协议是一组用于数据通信的协议集合,它的名字来源于其中最重要的两个协议…...
Lua--1.基础知识
Lua基础知识 变量简单的4种变量类型复杂的4种变量类型type函数 字符串操作长度获取--#多行打印字符串拼接别的类型转字符串-- tostring()字符串提供的公共方法 运算符算术运算符-- - * / % ^条件运算符-- > < > < ~(不等于 是 ~)逻辑运算符-- and or not位运算、…...
【GPT】力量训练的底层原理?
详细解读力量训练的每一个底层原理 力量训练之所以有效,是因为它利用了肌肉、神经系统和生物化学反应的基本机制。以下逐一详细解析,并解释相关概念。 1. 应力-恢复-适应理论 概念解析 应力(Stress):指训练带来的负…...
各种排序算法
前置知识 排序: 按照递增或者递减的顺序把数据排列好 稳定性: 值相等的元素在排序之后前后顺序是否发生了改变 内部排序: 数据放在内存上 外部排序: 数据放在磁盘上 内部排序 基于比较的排序 几大排序算法 1. 堆排序 特点: 思想: 1. 创建大根堆,把所有元素放在大根堆里…...
源码解读笔记:协程的 ViewModel.viewModelScope和LifecycleOwner.lifecycleScope
分析下ViewModel.viewModelScope public val ViewModel.viewModelScope: CoroutineScopeget() {val scope: CoroutineScope? this.getTag(JOB_KEY)if (scope ! null) {return scope}return setTagIfAbsent(JOB_KEY,CloseableCoroutineScope(SupervisorJob() Dispatchers.Ma…...
11.27周三F34-Day8打卡
文章目录 1. 学习让我感觉很棒。(什么关系?动作 or 描述?主语部分是?)解析答案:【解析答案分析】【对比分析】【拓展内容】2. 她忽然想起来钥匙放另一个包里了。解析答案:【拓展内容】3. 她来不来都没关系。(该由什么引导?这句话又属于什么关系,动作 or 描述?)解析答案…...
XG(S)-PON原理
前言 近年来,随着全球范围内接入市场的飞快发展以及全业务运营的快速开展,已有的PON技术标准在带宽需求、业务支撑能力以及接入节点设备和配套设备的性能提升等方面都面临新的升级需求XG(S)-PON(10G GPON)是在已有GPON技术标准上演进的增强下一代GPON技…...
C语言实例之9斐波那契数列实现
1. 斐波那契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多・斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为 “兔子数列”。 它的特点是从第三…...
YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】
目录 1 前言2 YOLO在不同领域的应用3 物体检测指标和NMS3.1 mAP和IOU3.2 mAP计算流程3.2.1 VOC 数据集3.2.2 微软 COCO 数据集 3.3 NMS 1 前言 最近在做目标检测模型相关的优化,重新看了一些新的论文,发现了几篇写得比较好的YOLO系列论文综述࿰…...
数据结构--Map和Set
目录 一.二叉搜索树1.1 概念1.2 二叉搜索树的简单实现 二.Map2.1 概念2.2 Map常用方法2.3 Map使用注意点2.4 TreeMap和HashMap的区别2.5 HashMap底层知识点 三.Set3.1 概念3.2 Set常用方法3.3 Set使用注意点3.4 TreeSet与HashSet的区别 四.哈希表4.1 概念4.2 哈希冲突与避免4.3…...
计算机操作系统——进程控制(Linux)
进程控制 进程创建fork()函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出(Exit)由于信号终止非…...
【前端】ES6基础
1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录,也可以使用默认目录 插件: 输入 Chinese,中文插件 安装: open in browser,直接右键文件…...
【排序算法 python实现】
排序算法 python实现 / 默写 # 汉诺塔 import copy import randomdef hanuo(n, a, b, c):if n 1:print(f{a} --> {c})returnhanuo(n - 1, a, c, b)print(f{a} --> {c})hanuo(n - 1, b, a, c)hanuo(3, A, B, C)# 冒泡排序 def bubble_sort(arr):n len(arr)for i in ran…...
Java图书管理系统(简易保姆级)
前面学习了这么多知识,为了巩固之前的知识,我们就要写一个图书管理系统来帮助大家复习,让大家的知识融会贯通~~~ 话不多说,直接开始今天的内容~ 首先呢,我们要有一个大体的思路: 实现效果思路有两种情况&a…...
嵌入式硬件设计:从概念到实现的全流程
嵌入式硬件设计是现代电子技术中一个至关重要的领域,涉及从硬件架构设计到硬件调试的各个方面。它为我们日常生活中的各类智能设备、家电、工业控制系统等提供了强大的支持。本文将介绍嵌入式硬件设计的基本流程、关键技术、常用工具以及常见的挑战和解决方案&#…...
第 4 章 Java 并发包中原子操作类原理剖析
原子变量操作类 AtomicLong 是原子性递增或者递减类,其内部使用 Unsafe 来实现,AtomicLong类也是在 rt.jar 包下面的,AtomicLong 类就是通过 BootStarp 类加载器进行加载的。这里的原子操作类都使用 CAS 非阻塞算法 private static final lon…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

