hadoop-Hive的基本操作指南

引言

在大数据处理领域,Hive 是一个强大的数据仓库,能够提供数据的查询、分析和管理功能。它基于 Hadoop 构建,允许用户使用类似 SQL 的查询语言(HiveQL)来操作存储在 Hadoop 分布式文件系统(HDFS)中的数据。本文将详细介绍如何手动部署 Hive 3.1.3,包括从下载、安装到配置的每一个步骤。此外,我们还将探讨如何在多台虚拟机上实现 Hive 的高可用性(HA),确保在集群环境中能够稳定高效地运行 Hive 服务。

一、Hive和关系型数据库的一些区别

  • 应用场景不同。Hive要将hive sql转成mapreduce任务执行,所以尽管查询数据量很少,查询延时都很大,它只适合做海量离线数据统计分析
  • 默认情况下,hive不支持数据的更新、删除。因为hive一般用做数据仓库,仓库存储的数据是海量且不经常更新的
  • 生产环境往hive表存数据时,不建议直接使用insert语句。因为每执行一次insert语句,等价于执行一次mapreduce任务,如果多次执行insert,那么效率将会非常低。

二、Hive架构

三、Hive3.1.3安装

  1. 安装jdk、hadoop以及mysql。这些组件,之前都已经安装好,故无需额外处理
  2. 到网盘下载hive3.1.3的安装包(apache-hive-3.1.3-bin.tar.gz),然后上传到Centos7
  3. 登录到Centos7,将apache-hive-3.1.3-bin.tar.gz解压到/usr/local路径下(请参考以前的解压命令或者百度)
  4. 设置HIVE_HOME环境变量以及PATH环境变量(请参考Hadoop

将当前路径切换到hive的配置文件路径:cd $HIVE_HOME/conf,并在该路径下创建一个hive-site.xml文件,该文件内容如下(mysql地址信息、密码等要按实际情况修改):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- mysql jdbc驱动 -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
  <!-- mysql 地址 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.159.128:3306/hive_metadata?serverTimezone=UTC&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
  </property>
  <!-- mysql 用户名 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <!-- mysql 密码 -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>Lzzy@2022</value>
  </property>
  <property>
    <name>datanucleus.schema.autoCreateAll</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>
</configuration>
  1. 将mysql驱动mysql-connector-java-8.0.15.jar上传到hive安装目录的lib路径下
  2. 将$HIVE_HOME/lib的guava-19.0.jar删掉(版本太低了),然后将拷贝一个新的guava版本(拷贝命令:cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib)
  3. 在mysql上创建一个数据库,用来存hive的元数据信息(表名、表结构等信息)。mysql数据库建表语句:CREATE DATABASE hive_metadata DEFAULT CHARACTER SET UTF8
  4. 启动hadoop(已经运行则无需启动)

hive初始化(只初始化一次,后续不用再初始化):schematool -initSchema -dbType mysql

1.执行hive命令,验证hive是否安装成功。以下是安装成功的一些输出信息。

四、hive建库

hive建库和mysql建库一样:CREATE DATABASE 数据库名。下图演示了在hive上创建一个名为hive_test数据库。

五、hive建表以及加载数据

5.1建表

hive建表语句和mysql稍微不太一样。下面演示了在hive_test库中创建一个student表,该表有三个字段:name(姓名,数据类型是String,即字符串)、id(学号,数据类型是String)、age(年龄,数据类型是int)

另外,上面的示例创建的是内部表,还有个概念,为外部表

5.2将数据加载到student表中

hive中,可以通过insert语句往表插入数据,也可以通过LOAD DATA命令,将指定文件的数据加载到hive表中。

我们知道,大部分hive sql执行时,本质是转成mapreduce任务,insert语句就属于其中一员,又由于mapreduce任务相对比较耗时(相对来说的,mapreduce任务适合处理海量数据),所以如果频繁执行insert语句,效率会很低,也会占用hadoop集群很多资源。故根据实际情况使用insert。

下面通过LOAD DATA命令,演示如果将本地文件系统的文件,加载到hive表中:

5.3hive表的元数据以及hive表的数据存储位置

之前的hive架构图提到,关联的mysql用来存放hive表的元数据(表名、字段信息等),那么student表的元数据存在哪里呢?见下图说明:

另外,加载到student表中的数据存在hdfs的哪个地方呢?见下图说明:

六、查询语句select

和mysql的select用法基本一致。下面通过几个小案例介绍select语句的使用。

首先准备好数据。这两个文件的数据数据说明hive_vin.data的第一列是新能源车辆的车架号、第二列是车型、第三列表示插入到数据库的时间hive_candata.data表示车辆上报的明细数据,第一列是新能源车辆车架号、第二列是采集时间、第三列是当前车速、第四列是行驶里程,第五列是剩余电量分别存到Hive的hive_test的vin表和candata表中。操作步骤:将这两个数据文件上传到虚拟机 -> 在hive_test库创建两个表 -> 用load data命令将数据加载到对应表中。两个表的建表语句如下:

create table vin (vin String, type String, insert_time String)
row format delimited
fields terminated by ","
lines terminated by "\n"
stored as textfile

create table candata (vin String, collect_time String, speed int, mileage int, soc int)
row format delimited
fields terminated by ","
lines terminated by "\n"
stored as textfile

6.1查询某个表所有行列

下图演示了用select语句查询candata这个表所有行所有列。

说明:语句中的*表示查询所有列,select和from都是关键字,select关键字后面跟要查询的字段列表,from后面跟要查询的表名。

 6.2条件查询

下图演示了仅查询vin003的所有数据

说明:where关键字后面跟查询条件。用and(且)或者or(或者)组合多个条件。如:select * from candata where vin=”vin003” and speed > 80 表示查询vin003所有车速大于80的所有行。

6.3排序 

下图演示了按照vin对数据进行降序排列

6.4分组聚合 

下图演示了计算每个vin上报的最大车速。(求最值属于聚合操作中的一种,常见的聚合操作/函数还有求最小值求和计数等。所谓的聚合就是由多条数据计算/聚合得到一个值

说明:select vin, max(speed) from candata group by vin 这个语句底层的执行逻辑大概是:先对candata的数据按照vin进行分组(即有几个vin就有几组数据),然后计算每一组vin的最大车速,最后将每组以及对应的车速输出。

6.5连表查询 

下图演示了通过内连接查询两个表的数据。自行了解左连接、右连接、内连接的区别!

七、总结 

以上是我的学习心得,祝大家学习愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值