hive优化

本文介绍了Hive优化的多种方法,包括表顺序调整、使用相同连接键、早过滤数据、原子化操作、利用limit语句、开启本地模式、并行执行、调整mapper和reducer个数、开启严格模式以及解决数据倾斜问题等,还给出了相应的参数设置和示例。

hive优化:
1、将大表放在后头
hive假定查询中最后一个表是大表,它会将其他表缓存起来然后扫描最后那个表。
因此通常需要将小表放前面,或者标记哪张表是大表:/streamtable(table_name)/

2、使用相同的连接键
当对三个或者更多个表进行join连接时,如果每个on子句都使用相同的连接键的话,那么只会产生一个mapreduce job

3、尽量早的过滤数据
减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段。

4、尽量原子化操作
尽量避免一个sql包含复杂逻辑,可以使用中间表来完成复杂的逻辑

order by :对查询结果进行全局排序,消耗时间长,需要set hive.mapred.mode=nostrict
sort by:局部排序,并非全局有序,提高效率

5、limit语句快速出结果
一般情况下,limit语句还是需要执行整个查询语句,然后再返回部分结果
有一个配置属性可以开启,避免这种情况,–对数据源进行抽样
hive.limit.optimize.enable=true --开启对数据源进行采样的功能
hive.limit.row.max.size --设置最小的采样容量
hive.limit.optimize.limit.file --设置最大的采样样本数
缺点:有可能部分数据永远不会被处理到

6、本地模式
对于小数据集,为查询出发执行任务小号的时间>实际执行job的时间,因此可以通过本地模式,在单台机器上(或者某些时候在单个进程上)处理所有的任务
–set oldjobtracker = ${hiveconf:mapred.job.tracker};

–set mapred.job.tracker=local;

–set marped.tmp.dir=/home/edward/tmp; sql语句 set mapred.job.tracker=${oldjobtracker};

–可以通过设置属性hive.exec.mode.local.auto的值为true 来让hive在适当的时候自动启动这个优化,也可以将这个配置写在
$HOME/.hiverc文件中
–当一个job满足如下条件才能真早使用本地模式:
1、job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128m)
2、job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max(默认4)
3、job的reduce数必须为0或者1
可用参数hive.mapred.local.mem(默认0)控制child jvm使用的最大内存数

7、并行执行
hive会将一个查询转化为一个或多个阶段,包括mapreduce阶段,抽样阶段,合并阶段,limit阶段等。
默认情况下,一次只执行一个阶段,不过如果某些阶段不是互相依赖,是可以并行执行的。
set hive.exec.parallel=true 可以开启并发执行。
set hive.exec.parallel.thread.number=16;//同一个sql允许最大并行度,默认为8
会比较消耗系统资源

8、调整mapper和reducer的个数
1、map阶段优化:
map个数的主要决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小(默认128m,不可自定义)
举例:
a) 假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块)从而产生
7个map数
b) 假设input目录下有3个文件a,b,c,大小分别为10m,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m)从而产生
4个map数,就是说,如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。
map执行时间:map任务启动和初始化的时间+逻辑处理的时间。
1)减少map数
若有大量小文件(小于128m)会产生多个map,处理方法是:
set mapred.max.split.size=100000000; set mapred.min.split.size.per.node=100000000;
set mapred.min.split.size.per.rack=100000000;
–前面三个参数确定合并文件块的大小,文件块大于128的按照128来分割,小于128的按照100来分割,小于100的(包括小文件和分割大文件剩下的)进行合并
set hive.input.format = org.apache.hadoop.hive.ql.io.ConbineHiveInputFormat;–执行前进行小文件合并
2)增加map数
当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加map数,来使得每个map处理的数据量减少。从而提高任务的执行效率.
set mapred.reduce.tasks=?

2、Reduce阶段优化
调整方式:
–set mapred.reduce.tasks=?
–set hive.exec.reducers.bytes.reducer=?
一般根据输入文件的总大小,用它的estimation函数来自动计算reduce的个数:reduce个数=InputFileSize/bytes per reducer

9、严格模式
set hive.mapred.mode=strict–防止用户执行那些可能意想不到的不好的影响的查询
–分区表,必须选定分区范围。
–对于使用order by的查询,要求必须使用limit语句,因为order by为了执行排序过程会将所有的结果数据分发到同一个reducer中进行处理
–限制笛卡尔积查询:两张表Join时必须有on语句

10 数据倾斜
表现:任务进度长时间维持在99%(或者100%)查看任务监控页面,发现只有少量(1个或者几个)reduce子任务未完成。
因为其处理的数据量和其他reduce差异过大。
单一reduce的记录数与平均记录数差异过大,通常可能达到3倍甚至更多,最长时长远大于平均时长
原因:
key分布不均匀
业务数据本身的特性
建表时考虑不周
某些sql语句本身就有数据倾斜

join:
情形:其中一个表较小,但是key集中,
后果:分发到某一个或者几个reduce上的数据远高于平均值

情形: 大表与大表,但是分桶的判断字段0值或者空值过多
后果:这些空值都由一个reduce处理,非常慢

group by
情形:group by维度过小,某值的数量过多。
后果:处理某值的reduce非常耗时

count distinct
情形:某特殊值过多。
后果:处理此特殊值reduce耗时。

解决方案:参数调节:hive.map.aggr=true

参考:https://www.cnblogs.com/sandbank/p/6408762.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值