【大数据技术基础】 课程 第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

整数、浮点数或者字符串

1327882394Unix新纪元秒)

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/hadoop

mkdir input

(2)在input文件夹中创建两个测试文件file1.txt和file2.txt,命令如下:

cd  /usr/local/hadoop/input

echo "hello world" > file1.txt

echo "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的这一优点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923790.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js.二叉树的层序遍历2

链接&#xff1a;107. 二叉树的层序遍历 II - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统&#xff0c;后端框架使用Springboot和mybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同级别…

从入门到精通数据结构----四大排序(上)

目录 首言&#xff1a; 1. 插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 3. 交换排序 3.1 冒泡排序 3.2 快排 结尾&#xff1a; 首言&#xff1a; 本篇文章主要介绍常见的四大排序&#xff1a;交换排序、选择排序、插入排序、归并排…

SpringCloud+SpringCloudAlibaba学习笔记

SpringCloud 服务注册中心 eureka ap 高可用 分布式容错 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency><groupId…

Sentinel服务保护

Sentinel是阿里巴巴开源的一款服务保护框架&#xff0c;目前已经加入SpringCloudAlibaba中。官方网站&#xff1a; home | Sentinel Sentinel 的使用可以分为两个部分: 核心库&#xff08;Jar包&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以…

【Redis 】Bitmap 使用

Redis Bitmap介绍 Redis Bitmap 是一种特殊的数据类型&#xff0c;它通过字符串类型键来存储一系列连续的二进制位&#xff08;bits&#xff09;&#xff0c;每个位可以独立地表示一个布尔值&#xff08;0 或 1&#xff09;。这种数据结构非常适合用于存储和操作大量二值状态的…

【spark-spring boot】学习笔记

目录 说明RDD学习RDD介绍RDD案例基于集合创建RDDRDD存入外部文件中 转换算子 操作map 操作说明案例 flatMap操作说明案例 filter 操作说明案例 groupBy 操作说明案例 distinct 操作说明案例 sortBy 操作说明案例 mapToPair 操作说明案例 mapValues操作说明案例 groupByKey操作说…

C++ 红黑树:红黑树的插入及应用(map与set的封装)

目录 红黑树 红黑树的概念 红黑树的性质 红黑树节点的定义 一、如果默认给黑色 二、如果默认给红色 红黑树的插入操作 1.按搜索树的规则进行插入 2.检测新节点插入后&#xff0c;红黑树的性质是否造到破坏 情况一&#xff1a;cur为红&#xff0c;parent为红&#xff…

elementUI非常规数据格式渲染复杂表格(副表头、合并单元格)

效果 数据源 前端代码 (展示以及表格处理/数据处理) 标签 <el-table :data"dataList" style"width: 100%" :span-method"objectSpanMethod"><template v-for"(item, index) in headers"><el-table-column prop"…

HTML详解(1)

1.HTML定义 HTML&#xff1a;超文本标记语言。超文本&#xff1a;通过链接可以把多个网页链接到一起标记&#xff1a;标签&#xff0c;带括号的文本后缀&#xff1a;.html 标签语法&#xff1a;<strong>需加粗文字</strong> 成对出现&#xff0c;中间包裹内容&l…

两数之和--leetcode100题

一&#xff0c;前置知识 1&#xff0c;vector向量 二&#xff0c;题目 1. 两数之和https://leetcode.cn/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下…

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…

李宏毅机器学习课程知识点摘要(14-18集)

线性回归&#xff0c;逻辑回归&#xff08;线性回归sigmoid&#xff09;&#xff0c;神经网络 linear regression &#xff0c; logistic regression &#xff0c; neutral network 里面的偏导的相量有几百万维&#xff0c;这就是neutral network的不同&#xff0c;他是…

Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析

文章目录 Spring Bean的生命周期一、为什么知道 Bean 的生命周期&#xff1f;二、生命周期大致了解三、详细分析生命周期3.1 ① 初步划分为 5 步&#xff1a;3.1.1 spring 框架中怎么理解3.1.2 spring boot 项目中怎么理解 3.2 ② 细分 5 步为 7 步&#xff1a;3.2.1 spring 框…

gRPC 双向流(Bidirectional Streaming RPC)的使用方法

gRPC 是一个支持多种语言的高性能 RPC 框架&#xff0c;拥有丰富的 API 来简化服务端和客户端的开发过程。gRPC 支持四种 RPC 类型&#xff1a;Unary RPC、Server Streaming RPC、Client Streaming RPC 和 Bidirectional Streaming RPC。下面是双向流 API 的使用方法。 双向流…

ffmpeg视频滤镜:替换部分帧-freezeframes

滤镜描述 freezeframes 官网地址 > FFmpeg Filters Documentation 这个滤镜接收两个输入&#xff0c;然后会将第一个视频中的部分帧替换为第二个视频的某一帧。 滤镜使用 参数 freezeframes AVOptions:first <int64> ..FV....... set first fra…

解决SpringBoot连接Websocket报:请求路径 404 No static resource websocket.

问题发现 最近在工作中用到了WebSocket进行前后端的消息通信&#xff0c;后端代码编写完后&#xff0c;测试一下是否连接成功&#xff0c;发现报No static resource websocket.&#xff0c;看这个错貌似将接口变成了静态资源来访问了&#xff0c;第一时间觉得是端点没有注册成…

Leetcode322.零钱兑换(HOT100)

链接 代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount1,amount1);//要兑换amount元硬币&#xff0c;我们就算是全选择1元的硬币&#xff0c;也不过是amount个&#xff0c;所以初始化amoun…

网络安全期末复习

第1章 网络安全概括 &#xff08;1&#xff09;用户模式切换到系统配置模式&#xff08;enable&#xff09;。 &#xff08;2&#xff09;显示当前位置的设置信息&#xff0c;很方便了解系统设置&#xff08;show running-config&#xff09;。 &#xff08;3&#xff09;显…