一、 控制hive任务中的map数:
1. 通常情况下,作业会通过input的目录产生一个或者多个map任务。
主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);
2. 举例:
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),那么会拆分,如果小于块大小,则把该文件当成一个块。
3. 是不是map数越多越好?
答案是否定的。如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成,
而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。
而且,同时可执行的map数是受限的。
4. 是不是保证每个map处理接近128m的文件块,就高枕无忧了?
答案也是不一定。比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,
如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。
针对上面的问题3和4,我们需要采取两种方式来解决:即减少map数和增加map数;
如何合并小文件,减少map数?
假设一个SQL任务:
Select count(1) from popt_tbaccountcopy_mes where pt = ‘2012-07-04’;
该任务的inputdir /group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04
共有194个文件,其中很多是远远小于128m的小文件,总大小9G,正常执行会用194个map任务。
Map总共消耗的计算资源: SLOTS_MILLIS_MAPS= 623,020
我通过以下方法来在map执行前合并小文件,减少map数:
set mapred.max.split.size= 8000000000000 ;
set mapred.min.split.size.per.node= 8000000000000 ;
set mapred.min.split.size.per.rack= 8000000000000 ;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
再执行上面的语句,用了74个map任务,map消耗的计算资源:SLOTS_MILLIS_MAPS= 333,500
对于这个简单SQL任务,执行时间上可能差不多,但节省了一半的计算资源。
大概解释一下,100000000表示100M, set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;这个参数表示执行前进行小文件合并,
前面三个参数确定合并文件块的大小,大于文件块大小128m的,按照128m来分隔,小于128m,大于100m的,按照100m来分隔,把那些小于100m的(包括小文件和分隔大文件剩下的),
进行合并,最终生成了74个块。
如何适当的增加map数?
当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
假设有这样一个任务:
Select data_desc,
count(1),
count(distinct id),
sum(case when …),
sum(case when ...),
sum(…)
from a group by data_desc
如果表a只有一个文件,大小为120M,但包含几千万的记录,如果用1个map去完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这一个文件合理的拆分成多个,
这样就可以用多个map任务去完成。
set mapred.reduce.tasks=10;
create table a_1 as
select * from a
distribute by rand(123);
这样会将a表的记录,随机的分散到包含10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。
每个map任务处理大于12M(几百万记录)的数据,效率肯定会好很多。
看上去,貌似这两种有些矛盾,一个是要合并小文件,一个是要把大文件拆成小文件,这点正是重点需要关注的地方,
根据实际情况,控制map数量需要遵循两个原则:使大数据量利用合适的map数;使单个map任务处理合适的数据量;
二、 控制hive任务的reduce数:
1. Hive自己如何确定reduce数:
reduce个数的设定极大影响任务执行效率,不指定reduce个数的情况下,Hive会猜测确定一个reduce个数,基于以下两个设定:
hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G)
hive.exec.reducers.max(每个任务最大的reduce数,默认为999)
计算reducer数的公式很简单N=min(参数2,总输入数据量/参数1)
即,如果reduce的输入(map的输出)总大小不超过1G,那么只会有一个reduce任务;
如:select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt;
/group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04 总大小为9G多,因此这句有10个reduce
2. 调整reduce个数方法一:
调整hive.exec.reducers.bytes.per.reducer参数的值;
set hive.exec.reducers.bytes.per.reducer=500000000; (500M)
select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 这次有20个reduce
3. 调整reduce个数方法二;
set mapred.reduce.tasks = 15;
select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt;这次有15个reduce
4. reduce个数并不是越多越好;
同map一样,启动和初始化reduce也会消耗时间和资源;
另外,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;
5. 什么情况下只有一个reduce;
很多时候你会发现任务中不管数据量多大,不管你有没有设置调整reduce个数的参数,任务中一直都只有一个reduce任务;
其实只有一个reduce任务的情况,除了数据量小于hive.exec.reducers.bytes.per.reducer参数值的情况外,还有以下原因:
a) 没有group by的汇总,比如把select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 写成 select count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04';
这点非常常见,希望大家尽量改写。
b) 用了Order by
c) 有笛卡尔积
通常这些情况下,除了找办法来变通和避免,我暂时没有什么好的办法,因为这些操作都是全局的,所以hadoop不得不用一个reduce去完成;
同样的,在设置reduce个数的时候也需要考虑这两个原则:使大数据量利用合适的reduce数;使单个reduce任务处理合适的数据量;
相关推荐
付费进群源码,不和外面的一样跳转卡顿,这个跳转不卡顿,支持三级分销
"Qt平台下的差分压缩升级工具:源码解析与实现,采用LZMA、bsdiff及SHA256算法,高效固件差分升级解决方案",差分压缩升级工具qt上位机源码和下位机源码! Qt 5.14.2 MinGW 32 64 bit 已经经过长期验证。 使用lzma,bsdiff,sha256算法。 该工具使用差分算法制作差分包并自带压缩功能,差分升级是将新老固件具有差异的部分剥离出来,例如固件从V1.1.0升级到V1.1.1,两个固件相比只修改了1K的内容,将该部分剥离出来生成差分包pach.bin(v1.1.0~v1.11),通过串口将差分包升级到设备端,设备端接收完成之后,先解压差分包,再通过差分恢复算法,根据差分包中的数据标志,将新老固件进行融合,变成新的固件,从而完成升级。 直接升级使用也会压缩,减小固件大小。 减少传输数据量,节约升级时间。 ,核心关键词:差分压缩升级工具; Qt上位机源码; Qt下位机源码; 差分算法; 差分包; 固件升级; lzma算法; bsdiff算法; sha256算法; 串口传输; 融合固件。,“基于QT与LZMA+Bdiff算法的差分压缩升级工具:支持差分
2022年7月环境管理体系基础
2022年12月管理体系认证基础
本资源包包含了一系列关于B站(哔哩哔哩)UP主的粉丝数据Excel文件,主要方便大家学习如何利用FineBI平台对这些数据进行深入分析。通过本资源,用户可以学习到如何连接多源数据、加工和可视化数据,从而实现数据驱动业务决策。 数据概述: 数据覆盖了7000多个兴趣圈层的多元文化社区,聚焦于中国年轻一代高度聚集的文化社区和视频平台。 文件包括总粉丝排行、充电排行、创作人气排行、掉粉排行和涨粉排行等,帮助理解不同领域UP主的受欢迎程度及其粉丝分布情况。 分析目的: 利用FineBI的多源数据连接和自助数据加工能力,确保数据的真实、准确、完整。 通过FineBI的自助分析与简便易上手的可视化组件,制作对应仪表板,实现数据驱动业务。分析并展示B站粉丝数量最多的区域、播放量前10的UP主、男女UP主对比及UP主投稿与涨粉量之间的关系等,以了解运营策略。 适用人群: 适合希望提高自身数据分析技能的UP主、内容创作者,以及对社交媒体数据分析感兴趣的个人或团队。
《COMSOL在新能源仿真领域的应用研究:固体氧化物燃料电池与海水电渗析淡化模拟分析》 研究生探讨微纳尺度光伏与CFD仿真的三维瞬态模型构建——甲烷乙醇重整与PCB相变材料耦合水冷热管理研究》,COMSOL-SOFC(固体氧化物燃料电池);甲烷 乙醇重整;光伏 PCB相变材料耦合水冷却热管理;微纳尺度海水电渗析淡化等模拟讨论,本人交大研究生CFD仿真方向 SOFC平板单电池:25流道,包含进气管路,密封装置,外部集流体(计算资源要求较大)第一个套 SOFC单通道模型:经过与实验对比验证,三维单通道 第二个套 电子元件相变材料耦合水冷热管理三维瞬态模型(含自然对流) 第三个套 默认是第一个非全部 ,COMSOL; SOFC(固体氧化物燃料电池); 甲烷乙醇重整; 光伏; PCB相变材料; 水冷却热管理; 微纳尺度海水电渗析淡化; SOFC平板单电池; SOFC单通道模型; 电子元件相变材料耦合水冷热管理。,交大CFD仿真研究:SOFC及多元系统的热管理模拟与优化分析
2023月03月Python一级理论
《基于NRBO-Transformer-BiLSTM的Matlab回归预测代码:优化光伏功率及负荷预测》,NRBO-Transformer-BiLSTM回归 Matlab代码 基于牛顿拉夫逊优化算法优化Transformer结合双向长短期记忆神经网络(BiLSTM)的数据回归预测(可以更为分类 单、多变量时序预测 回归,前私我),Matlab代码,可直接运行,适合小白新手 程序已经调试好,无需更改代码替数据集即可运行数据格式为excel Transformer 作为一种创新的神经网络结构,深受欢迎。 采用 Transformer 编码器对光伏、负荷数据特征间的复杂关系以及时间序列中的长短期依赖关系进行挖掘,可以提高光伏功率、负荷预测的准确性。 NRBO作为24年新算法,表现出较强的性能,前可以更为其他算法,需要私信 1、运行环境要求MATLAB版本为2023b及其以上【如果没有可私信我,我】 2、评价指标包括:R2、MAE、MSE、RPD、RMSE等,图很多,符合您的需要 3、代码中文注释清晰,质量极高 4、测试数据集,可以直接运行源程序。 替你的数据即可用 适合新手小白 ,关键词:
基于高频方波电压注入的PMSM无感起动与运行技术及其仿真研究,基于高频方波电压注入的永磁同步电机无感起动运行 1.采用方波电压注入,带转子初始位置检测,可实现任意初始位置下无位置传感器起动运行; 2.支持带载起动和突加负载运行; 提供算法对应的参考文献和仿真模型,支持技术解答。 PMSM控制相关电子资料。 ,核心关键词:高频方波电压注入; 永磁同步电机; 无感起动运行; 初始位置检测; 算法; 参考文献; 仿真模型; PMSM控制相关电子资料。,高频方波电压注入的PMSM无感起动与运行技术及其应用
OpenCVSharp实战教程:基于C#与Winform的五十余个图像处理Demo解析与实现,OpencvSharp资料,采用C#加Winform编写,包含接近50个Demo,直接运行即可。 例程包含:模板匹配、边缘识别、人脸识别,灰度变化、标定等。 ,核心关键词:OpencvSharp资料;C#;Winform编写;Demo;模板匹配;边缘识别;人脸识别;灰度变化;标定。,"OpenCVSharp实践指南:C#与Winform下的50个图像处理Demo"
基于T型三电平逆变器的下垂控制技术及其仿真研究:中点电位平衡控制与电压电流双闭环控制详解,(仿真原件+报告)下垂控制-基于T型三电平逆变器的下垂控制,电压电流双闭环,采用LCL滤波,SPWM调制方式 1.提供simulink仿真源文件 2.提供下垂控制原理与下垂系数计算方法 3.中点平衡控制,电压电流双闭环控制 4.提供参考文献 提供下垂控制原理解析,基于零序电压注入法的中点电位平衡控制详解,电压电流双闭环控制方法详解,三电平调制方式 支持simulink2022以下版本,联系跟我说什么版本,我给转成你需要的版本(默认发2016b)。 ,T型三电平逆变器;下垂控制;LCL滤波;SPWM调制;simulink仿真源文件;下垂系数计算;中点平衡控制;电压电流双闭环控制;零序电压注入法中点电位平衡控制详解;三电平调制方式。,基于T型三电平逆变器的下垂控制仿真研究:电压电流双闭环与LCL滤波技术应用
Unity Shader Graph 2D 实例 - UV滚动背景动画
基于Comsol谷霍尔光子晶体VPC的太赫兹拓扑光子学模型:复现文章Terahertz Topological Photonics的能带与拓扑相位计算研究,Comsol谷霍尔光子晶体(VPC)-片上通信的太赫兹拓扑光子学 本模型复现文章:Terahertz topological photonics for on-chip communication DOI: 10.1038 s41566-020-0618-9 本模型主要是计算谷霍尔光子晶体能带和拓扑相位(磁场分布及坡印廷矢量) 同时附上美化能带的matlab程序 本模型基于二维三角晶格模型,拉伸工作平面构建三维模型展开计算 ,关键词:Comsol;谷霍尔光子晶体(VPC);太赫兹拓扑光子学;片上通信;复现文章;计算能带;拓扑相位;磁场分布;坡印廷矢量;matlab程序;二维三角晶格模型;三维模型。,基于太赫兹拓扑光子学的谷霍尔光子晶体模型研究
"Qt5.15升级版:灵活多能的工业自动化3D视觉测量与检测软件系统",qt5.15以上,工业自动化3d视觉测量与检测软件系统。 适配3d线激光轮廓仪(基恩士,smartray,海康等),可改造适配其他种类3d相机。 功能: 1、成像接口、渲染、可视化; 2、流程; 3、滤波; 4、测高、平面度等测量工具; 5、逻辑工具; 6、通信工具; 7、2d算法接口(注意无2d算子); 8、代码生成的ui界面。 特点: 1、纯底层代码,自主研发,资深博士级水平; 2、软件有架构,工具以算子形式封装,可灵活调用,奔标准软件写的; 3、功能不丰富(视频里没演示到的工具不一定有内容),但是基础功能均有,可应对基础3d检测项目,如测高、断差、平面度、共面度、轮廓等功能,若有其他测量与检测需求,自行增加算法即可; 4、软件工程,实话说有bug,但是经过工业检测项目打磨,在不同客户现场稳定运行多年。 工业3d项目落地降本与学习的不二之选。 C++源码,需要有一定基础的开发人员方能上手。 可改造成自己品牌的标准 专用软件 ,关键信息: 1. QT5.15以上 2. 工业自动化3D视觉测量与检测软件系统 3.
这是一款`在线工具箱`程序,您可以通过安装扩展增强她的功能 通过插件模板的功能,您也可以把她当做网页导航来使用~ 觉得该项目不错的可以给个`Star`~ 环境要求 `PHP` >= 7.3 `MySQL` >= 5.6 `fileinfo`扩展 使用`Redis`缓存需安装`Redis`扩展 部署 *下载源代码 *设置运行目录为`public` *设置伪静态 *安装依赖 + 配置阿里镜像源 ``` composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ ``` + 升级compose ``` composer self-update ``` + 安装依赖 composer install --no-dev ``` * 设置目录权限 + 一般是默认允许的(如有无法上传、无法打开页面或其他未知问题可以设置一下目录权限) + `Apache`的所属组为`www-dat
CaF2掺杂对热压SmCo5CaF2复合磁体磁性能和电阻率的影响.pdf
关于Comsol模型下多场耦合现象研究:水力压裂与岩石的热水力损伤机制的瞬态求解相场法及陶瓷、涂层热震损伤研究,comsol 水力压裂,热损伤,岩石水-力-热-损|||伤(|||THMD) 三场耦合,陶瓷热震损伤,涂层热震损伤相场法,瞬态求解. ,关键词:comsol水力压裂;热损伤;岩石水-力-热-损伤(THMD);三场耦合;陶瓷热震损伤;涂层热震损伤;相场法;瞬态求解。,"水力压裂与热损伤:岩石三场耦合相场法瞬态求解研究"
基于Music算法的Matlab时序信号频率估计方法及其在电力系统中谐波与突变检测的应用与对比研究,Matlab 基于Music算法的时序信号频率估计 可用于其他频率估计方法对比 可用于电力系统中谐波,突变检测 ,基于Matlab的Music算法时序信号频率估计; 多种频率估计方法对比; 电力系统谐波分析; 突变检测; 频率跟踪分析。,"Matlab中的Music算法:时序信号频率估计与多种频率分析方法对比"
"基于MATLAB的永磁同步电机匝间短路故障仿真设计:文档与Simulink源文件详解",永磁同步电机匝间短路故障MATLAB仿真设计 说明文档和simulink仿真源文件 ,核心关键词:永磁同步电机; 匝间短路故障; MATLAB仿真设计; 说明文档; Simulink仿真源文件;,《MATLAB仿真研究:永磁同步电机匝间短路故障分析》
高速PXIe PXI背板技术:全混合架构、14GB/s系统带宽与多槽位支持,兼容主流PXIe控制器,设计与应用详解(含设计文件与FPGA源码)基于PXIe架构的新特性和技术应用问题及解决方案探讨。,PXIe PXI背板 全混合8槽 4 Link架构 系统带宽14GB s 兼容主流PXIe厂商PXIe控制器 PXIe PXI背板 全混合8槽 4 Link架构 系统带宽14GB s 单槽4GB s 兼容主流PXIe厂商PXIe控制器 远程开关控制接口 设计文件 原理图&PCB FPGA源码 可直接制板 问 1.FPGA加载哪一份mcs?最新20220314么?功能是否已测试完善? 2.机箱的结构设计是否有注意事项要求文档? 3. PXIe 中断能不能正常使用? 4.背板能否在线复位(包括PC端和板卡端) ? 5.BOM中的元器件是否有停产的或者很难买到的? 6.该背板有无集成到机箱中的使用经历? 答 1、对的,加载20220314.mcs,功能都OK了。 2、没有结构要求文档,注意连接器位置就可以。 3、中断可以正常使用,项目中用过。 4、目前没办法在线复位,PXI标准没有这项功能,如果