用户12023652
python连接hive数据库count查询慢的解决办法
关注作者
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
用户12023652
社区首页
>
专栏
>
python连接hive数据库count查询慢的解决办法
python连接hive数据库count查询慢的解决办法
用户12023652
关注
发布于 2026-07-29 12:56:01
发布于 2026-07-29 12:56:01
5
0
举报
python连接hive数据库count查询慢的解决办法
一、问题背景
问题说明
公司的项目需要使用Hive数据库,经常报超时的错误。
查看日志,发现是进程卡在执行select count(1) from table 不动了
count语句
经常需要获取一个表的数据量。很自然使用count了
hive的sql语句和mysql是非常相似的
count有三种方式:select count(*)/count(1)/count(字段)from tablename
二、select count超时的原因
更换count()
最开始因为是count(*)因为数据量太大,导致超时,
改成count(1)数据量最小,但仍然超时
是否数据库有问题
执行select *From tablename 和count同一张表,却很快,哪怕数据有10000条,也很快
hive数据库count的原理
网上找了一下资料,因为HIVE会将select count 翻译为MR作业在HADOOP上运行,效率非常低。
select * from table 是直接在hive数据库中直接执行的,select count(1) from table 需要调用了mapreduce来执行。
如果select count 停留不动,可以试试的mapreduce的wordcount是否同样不动,那可能是namenode和datanode之间没有联通。
hadoop运行不去,,则主要检查namenode和datanode之间的通信情况,包括但不限于以下几种:
hosts配置问题,没有把datanode的主机名写入namenode主机的hosts文件中。
slave配置问题,没有把datanode
三、更快的获取记录数的方法
hive正常后count的时间
经过测试,select count(1) from tablename 不管数据多少,都要6.3秒
对于正常的应用来说,这是一个非常慢的慢查询,应用中无法接受
个人的改进方法
我先通过select 1 from tablename 获取所有记录
项目是基于flask,再len(findall的结果),得到记录数
这样得出结果的的时间仅为0.3秒,速度快20倍
个人方法的问题和改进
最大的问题是HIVE的数据可能会100万级的,哪怕是select 1的数据量也很大,客户端的内存会爆
改进,select 1 from tablename limit 100000 限制最大多,对于大部分场景都够了
四、相关知识
mapreduce
MapReduce是面向大数据并行处理的计算模型、框架和平台(构建多节点的分布和并发计算集群),用于大规模数据集(大于1TB)的并行运算。 概念"Map(映射)"和"Reduce(归约)"
软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数, 用来保证所有映射的键值对中的每一个共享相同的键组。
最早有google提出,自发明MapReduce以后,Google公司内部进一步将其广泛应用于很多大规模数据处理问题。
Google公司内有上万个各种不同的算法问题和程序都使用MapReduce进行处理。台
hadoop
2004年,开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting发现MapReduce正是其所需要的解决大规模 Web数据处理的重要技术,因而模仿Google MapReduce,基于Java设计开发了一个称为Hadoop的开源MapReduce并行计算框架和系统。
Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理
特性,4高1低:高可靠性、高扩展性、高效性、高容错性、低成本
Hadoop 最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。 HDFS的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式 文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心
hive
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。
hive不适合用于联机(online)事务处理,也不提供实时查询功能。
hive最适合应用在基于大量不可变数据的批处理作业。
hive 是一种底层封装了Hadoop 的数据仓库处理工具,使用类SQL 的hiveQL 语言实现数据查询,
所有hive 的数据都存储在Hadoop 兼容的文件系统(例如,Amazon S3、HDFS)中。
hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中hive 设定的目录下. 因此,hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。
HIVE特点
支持创建索引,优化数据查询。
不同的存储类型,例如,纯文本文件、HBase 中的文件。
将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
可以直接使用存储在Hadoop 文件系统中的数据。
内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
本文参与
腾讯云自媒体同步曝光计划
,分享自作者个人站点/博客。
原始发表:2020-06-10,如有侵权请联系
cloudcommunity@tencent.com
删除
前往查看
数据库
hive
count
连接
python
本文分享自
作者个人站点/博客
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
数据库
hive
count
连接
python
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
目录
python连接hive数据库count查询慢的解决办法
一、问题背景
二、select count超时的原因
三、更快的获取记录数的方法
四、相关知识
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐