热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据基础之Hive(一)——Hive概述

作者:duktig博客:https:duktig.cn(文章首发)优秀还努力。愿你付出甘之如饴,所得归于欢喜。

作者:duktig

博客:https://duktig.cn (文章首发)

优秀还努力。愿你付出甘之如饴,所得归于欢喜。

更多文章参看github知识库:https://github.com/duktig666/knowledge



背景

学习完Hadoop,有没有感到编写一个MapReduce程序非常复杂,想要进行一次分析和统计需要很大的开发成本。那么不如就来了解了解Hadoop生态圈的另一名成员——Hive。让我们一起来了解,如何使用类SQL语言进行快速查询和分析数据吧。

Hive系列文章如下:


  • 大数据基础之Hive(一)—— Hive概述
  • 大数据基础之Hive(二)—— DDL语句和DML语句
  • 大数据基础之Hive(三)—— 分区表和分桶表
  • 大数据基础之Hive(四)—— 常用函数和压缩存储
  • 大数据基础之Hive(五)——Hive实战(统计电影排名的各种问题)

Hive概述


什么是 Hive ?


Hive简介

Hive:由Facebook 开源用于解决 海量结构化日志的数据统计 的工具。

Hive 是基于 Hadoop 的一个 数据仓库工具,可以 将结构化的数据文件映射为一张表,并提供类 SQL 查询功能


Hive本质

将 HQL 转化成MapReduce 程序 。主要如下:


  • Hive 处理的数据存储在 HDFS
  • Hive 分析数据底层的实现是 MapReduce
  • 执行程序运行在 Yarn 上

将 HQL 转化成MapReduce 程序


Hive 的优缺点


优点


  • 操作接口采用 类 SQL 语法,提供快速开发的能力(简单、容易上手)。
  • 避免了去写 MapReduce,减少开发人员的学习成本。
  • Hive可以处理大数据量。
  • Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

缺点


  • Hive 的 HQL 表达能力有限
    • 迭代式算法无法表达
    • 数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现。
  • Hive 的效率比较低
    • Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
    • Hive 调优比较困难,粒度较粗
  • Hive的执行延迟比较高。

Hive 的使用场景

因为Hive 的执行延迟比较高,所以


  1. Hive 常用于数据分析,对实时性要求不高的场合。
  2. Hive 优势在于处理大数据,对于处理小数据没有优势。

Hive的架构

Hive架构


  • 用户接口Client: CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问hive)
  • 元数据Metastore:元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、
    表的类型(是否是外部表)、表的数据所在目录等; (默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储Metastore )
  • Hadoop:使用HDFS 进行存储,使用 MapReduce 进行计算,运行在Yarn上。
  • 驱动器Driver
    • 解析器(SQL Parser):将SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对AST 进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
    • 编译器(Physical Plan):将AST 编译生成逻辑执行计划。
    • 优化器(Query Optimizer):对逻辑执行计划进行优化。
    • 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

Hive运行机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixi0lOEd-1635823143449)(C:\Users\rsw\AppData\Roaming\Typora\typora-user-images\image-20211102105231171.png)]

Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver,结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口。


Hive 和数据库比较

由于 Hive 采用了类似 SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的。


查询语言

由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言HQL。熟悉 SQL 开发的开发者可以很方便的使用Hive 进行开发。


数据更新

由于Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不建议对数据的改写,所有的数据都是在加载的时候确定好的

而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修改数据。


执行延迟

Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。

另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架。由于MapReduce 本身具有较高的延迟,因此在利用MapReduce 执行Hive 查询时,也会有较高的延迟。

相对的,数据库的执行延迟较低。

当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。


数据规模

由于Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。


win10安装Hive3.x

win10安装Hive

参看:win10安装Hive3.0.0

注意:在修改 hive-site.xml 时有问题。

官网给出的文件如下:



<configuration>configuration>

注意将 property 属性添加到 configuration 标签内。

jdbc连接属性参考:

jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&characterEncoding=latin1&useSSL=false&serverTimezOne=Asia/Shanghai

hive的启动

# 启动 Hive 元数据
hive --service metastore
# 启动 Hive server2 服务
hive --service hiveserver2
# 启动 hive 命令行
hive

问题


Hive进行drop时终端卡死?

hive删除表时直接卡死


hive show locks异常问题

报错:

ERROR exec.DDLTask: Failed
org.apache.hadoop.hive.ql.metadata.HiveException: show Locks LockManager not specified

解决:

$HIVE_HOME/conf/hive-site.xml中加入:

<property><name>hive.support.concurrencyname><value>truevalue>
property><property><name>hive.txn.managername><value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManagervalue>
property>

然后重启metastore和hiveserver2。

卡死hive的metastore报错:


<property> <name>hive.metastore.event.db.notification.api.authname> <value>falsevalue>
property>

Hive中文乱码问题

在mysql的hive元数据库中执行如下代码:

-- 修改表字段注释字符集
ALTER TABLE COLUMNS_V2 MODIFY COLUMN `COMMENT` varchar(256) CHARACTER SET utf8;
-- 修改表字段名字符集
ALTER TABLE COLUMNS_V2 MODIFY COLUMN `COLUMN_NAME` varchar(767) CHARACTER SET utf8;-- 修改表属性Key和Value字符集
ALTER TABLE TABLE_PARAMS MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8;
ALTER TABLE TABLE_PARAMS MODIFY COLUMN `PARAM_KEY` varchar(256) CHARACTER SET utf8;-- 修改分区属性Key和Value字符集
ALTER TABLE PARTITION_PARAMS MODIFY COLUMN `PARAM_KEY` varchar(256) CHARACTER SET utf8;
ALTER TABLE PARTITION_PARAMS MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8;
-- 修改分区字段Key和Value字符集
ALTER TABLE PARTITION_KEYS MODIFY COLUMN `PKEY_COMMENT` varchar(4000) CHARACTER SET utf8;
ALTER TABLE PARTITION_KEY_VALS MODIFY COLUMN `PART_KEY_VAL` varchar(256) CHARACTER SET utf8;
-- 修改分区的分区名字符集
ALTER TABLE `PARTITIONS` MODIFY COLUMN `PART_NAME` varchar(767) CHARACTER SET utf8;-- 修改索引属性Key和Value字符集
ALTER TABLE INDEX_PARAMS MODIFY COLUMN `PARAM_KEY` varchar(256) CHARACTER SET utf8;
ALTER TABLE INDEX_PARAMS MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8;

修改hive-site.xml中JDBC的连接编码为utf8


Hive实战

建表:

create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by &#39;,&#39;
collection items terminated by &#39;_&#39;
map keys terminated by &#39;:&#39;
lines terminated by &#39;\n&#39;;

表的数据test.txt:

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long
guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

上传表的数据:

load data local inpath &#39;./test.txt&#39; overwrite into table test;

查询数据:

select friends[1],children[&#39;xiao song&#39;],address.city from
test
where name="songsong";

具体的DDL和DML语句将在下篇文章分析。


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Hadoop + Spark安装(三) —— 调hadoop
    ***************************测试hadoop及问题跟进***************************执行以下语句报错datahadoop-2.9. ... [详细]
  • 【原创】七、Hadoop 2.5.2+zookeeper高可用部署
    一、原理(四大要点)(1)保证元数据一致(edits)namenode(fsimage edits)a、NFSb、journalnodec、zk(2)只有一台namenode对外提 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 分布式一致性算法:Paxos 的企业级实战
    一、简介首先我们这个平台是ES专题技术的分享平台,众所周知,ES是一个典型的分布式系统。在工作和学习中,我们可能都已经接触和学习过多种不同的分布式系统了,各 ... [详细]
  • 前期Linux环境准备1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系4.关闭防火墙5.ssh免登陆6.安装JDK,配置环境变量等集群规划主机 IP安装软件运行进 ... [详细]
  • hadoop3.1.2 first programdefault wordcount (Mac)
    hadoop3.1.2安装完成后的第一个实操示例程 ... [详细]
author-avatar
为爱进地狱天堂_954
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有