Hive优化

hive优化总结 优化时,把hive sql当做map reduce程序来读,会有意想不到的惊喜。 理解hadoop的核心能力,是hive优化的根本。这是这一年来,项目组所有成员宝贵的经验总结。   长期观察hadoop处理数据的过程,有几个显著的特征: 1.不怕数据多,就怕数据倾斜。 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几 阅读详情

Hive简单优化与定期ETL

Hive优化

  • Hive的执行依赖于底层的MapReduce作业,因此对Hadoop作业的优化或者对MapReduce作业的调整是提高Hive性能的基础。
  • 大多数情况下,用户不需要了解Hive内部是如何工作的。但是当对Hive具有越来越多的经验后,学习一些Hive的底层实现细节和优化知识,会让用户更加高效地使用Hive。如果没有适当的调整,那么即使查询Hive中的一个小表,有时也会耗时数分钟才得到结果。也正是因为这个原因,Hive对于OLAP类型的应用有很大的局限性,它不适合需要立即返回查询结果的场景。然而,通过实施下面一系列的调优方法,Hive查询的性能会有大幅提高。

启用压缩

  • 压缩可以使磁盘上存储的数据量变小,例如,文本文件格式能够压缩40%甚至更高比例,这样可以通过降低I/O来提高查询速度。

    • 一个复杂的Hive查询在提交后,通常被转换为一系列中间阶段的MapReduce作业,Hive引擎将这些作业串联起来完成整个查询。可以将这些中间数据进行压缩。
  • 在hive/conf/hive-site.xml中添加:

    • <!-- Hive 压缩设置 -->
      <property>
          <name>hive.exec.compress.intermediate</name>
          <value>true</value>
      </property>
      <property>
          <name>hive.intermediate.compression.codec</name>
          <value>org.apache.hadoop.io.compress.SnappyCodec</value>
      <description/>
      </property>
      <property>
          <name>hive.intermediate.compression.type</name>
          <value>BLOCK</value>
      </property>
      
  • 当Hive将输出写入到表中时,输出内容同样可以进行压缩。我们可以设置hive.exec.compress.output属性启用最终输出压缩。

    • <!-- Hive 输出压缩 -->
      <property>
          <name>hive.exec.compress.output</name>
          <value>true</value>
          <description> This controls whether the final outputs of a query (to a local/hdfs file or a Hive table) is compressed. The compression codec and other options are determined from hadoop config variables mapred.output.compress* 
          </description>
      </property>
      

优化连接

可以通过配置Map连接和倾斜连接的相关属性提升连接查询的性能。

  • 自动Map连接

    • 当连接一个大表和一个小表时,自动Map连接是一个非常有用的特性。如果启用了该特性,小表将保存在每个节点的本地缓存中,并在Map阶段与大表进行连接。开启自动Map连接提供了两个好处。首先,将小表装进缓存将节省每个数据节点上的读取时间。其次,**它避免了Hive查询中的倾斜连接,因为每个数据块的连接操作已经在Map阶段完成了。**设置下面的属性启用自动Map连接属性。

    • <!-- 自动map连接 -->
      <property>
          <name>hive.auto.convert.join</name>
          <value>true</value>
      </property>
      <property>
          <name>hive.auto.convert.join.noconditionaltask</name>
          <value>true</value>
      </property>
      <property>
          <name>hive.auto.convert.join.noconditionaltask.size</name>
          <value>10000000</value>
      </property>
      <property>
          <name>hive.auto.convert.join.use.nonstaged</name>
          <value>true</value>
      </property>
      
      • hive.auto.convert.join:是否启用基于输入文件的大小,将普通连接转化为Map连接的优化机制。

      • hive.auto.convert.join.noconditionaltask:假设参与连接的表(或分区)有N个,如果打开这个参数,并且有N-1个表(或分区)的大小总和小于hive.auto.convert.join.noconditionaltask.size参数指定的值,那么会直接将连接转为Map连接。

      • hive.auto.convert.join.use.nonstaged:对于条件连接,如果从一个小的输入流可以直接应用于join操作而不需要过滤或者投影,那么不需要通过MapReduce的本地任务在分布式缓存中预存。

  • 倾斜Map连接(某个连接键对应的行数过多的情况)

    • <property>
          <name>hive.optimize.skewjoin</name>
          <value>true</value>
      </property>
      <property>
          <name>hive.skewjoin.key</name>
          <value>100000</value>
      </property>
      <property>
          <name>hive.skewjoin.mapjoin.map.tasks</name>
          <value>10000</value>
      </property>
      <property>
          <name>hive.skewjoin.mapjoin.min.split</name>
          <value>3354432</value>
      </property>
      
    • hive.optimize.skewjoin:是否为连接表中的倾斜键创建单独的执行计划。

    • hive.skewjoin.key:决定如何确定连接中的倾斜键。

    • hive.skewjoin.mapjoin.map.tasks:指定倾斜连接中,用于Map连接作业的任务数。

    • hive.skewjoin.mapjoin.min.split:通过指定最小split的大小,确定Map连接作业的任务数。

  • 桶Map连接(连接中使用的表是按特定列分桶)

    • <property>
          <name>hive.optimize.bucketmapjoin</name>
          <value>true</value>
      </property>
      <property>
          <name>hive.optimize.bucketmapjoin.sortedmerge</name>
          <value>true</value>
      </property>
      
    • hive.optimize.bucketmapjoin:是否尝试桶Map连接。

    • hive.optimize.bucketmapjoin.sortedmerge:是否尝试在Map连接中使用归并排序。

避免全局排序

  • Hive中使用order by子句实现全局排序。orderby只用一个Reducer产生结果,对于大数据集,这种做法效率很低。如果不需要全局有序,则可以使用sortby子句,该子句为每个reducer生成一个排好序的文件。如果需要控制一个特定数据行流向哪个reducer,可以使用distribute by子句。例如:

    • Selectid,name, salary, dept fromemployee
      distribute by dept sort by id asc, name desc;
      
    • 属于一个dept的数据会分配到同一个reducer进行处理,同一个dept的所有记录按照id、name列排序。最终的结果集是全局有序的。

优化limit操作

  • 默认时limit操作仍然会执行整个查询,然后返回限定的行数。在有些情况下这种处理方式很浪费,因此可以通过设置下面的属性避免此行为。

    • <property>
          <name>hive.limit.optimize.enable</name>
          <value>true</value>
      </property>
      <property>
          <name>hive.limit.row.max.size</name>
          <value>100000</value>
      </property>
      <property>
          <name>hive.limit.optimize.limit.file</name>
          <value>10</value>
      </property>
      <property>
          <name>hive.limit.optimize.fetch.max</name>
          <value>50000</value>
      </property>
      
  • hive.limit.optimize.enable:是否启用limit优化。当使用limit语句时,对源数据进行抽样。

  • hive.limit.row.max.size:在使用limit做数据的子集查询时保证的最小行数据量。

  • hive.limit.optimize.limit.file:在使用limit做数据子集查询时,采样的最大文件数。

  • hive.limit.optimize.fetch.max:使用简单limit数据抽样时,允许的最大行数。

启用并行执行

  • 每条HiveQL语句都被转化成一个或多个执行阶段,可能是一个MapReduce阶段、采样阶段、归并阶段、限制阶段等。默认时,Hive在任意时刻只能执行其中一个阶段。如果组成一个特定作业的多个执行阶段是彼此独立的,那么它们可以并行执行,从而整个作业得以更快完成。通过设置下面的属性启用并行执行。

  • <property>
        <name>hive.exec.parallel</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.exec.parallel.thread.number</name>
        <value>8</value>
    </property>
    
  • hive.exec.parallel:是否并行执行作业。

  • hive.exec.parallel.thread.number:最多可以并行执行的作业数。

使用单一Reduce

通过为group by操作开启单一reduce任务属性,可以将一个查询中的多个group by操作联合在一起发送给单一MapReduce作业。

<property>
    <name>hive.multigroupby.singlereducer</name>
    <value>true</value>
</property>

控制并行Reduce任务

  • Hive通过将查询划分成一个或多个MapReduce任务达到并行的目的。确定最佳的mapper个数和reducer个数取决于多个变量,例如输入的数据量以及对这些数据执行的操作类型等。如果有太多的mapper或reducer任务,会导致启动、调度和运行作业过程中产生过多的开销,而如果设置的数量太少,那么就可能没有充分利用好集群内在的并行性。对于一个Hive查询,可以设置下面的属性来控制并行reduce任务的个数。

  • <property>
        <name>hive.exec.reducers.bytes.per.reducer</name>
        <value>256000000</value>
    </property>
    <property>
        <name>hive.exec.reducers.max</name>
        <value>1009</value>
    </property>
    
  • hive.exec.reducers.bytes.per.reducer:每个reducer的字节数,默认值为256MB。Hive是按照输入的数据量大小来确定reducer个数的。例如,如果输入的数据是1GB,将使用4个reducer。

  • hive.exec.reducers.max:将会使用的最大reducer个数。

启用向量化

  • 通过查询执行向量化,使Hive从单行处理数据改为批量处理方式,具体来说是一次处理1024行而不是原来的每次只处理一行,这大大提升了指令流水线和缓存的利用率,从而提高了表扫描、聚合、过滤和连接等操作的性能。

  • <property>
        <name>hive.vectorized.execution.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.vectorized.execution.reduce.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.vectorized.execution.reduce.groupby.enabled</name>
        <value>true</value>
    </property>
    
  • hive.vectorized.execution.enabled:如果该标志设置为true,则开启查询执行的向量模式,默认值为false。

  • hive.vectorized.execution.reduce.enabled:如果该标志设置为true,则开启查询执行reduce端的向量模式,默认值为true

  • hive.vectorized.execution.reduce.groupby.enabled:如果该标志设置为true,则开启查询执行reduce端group by操作的向量模式,默认值为true。

启用基于成本的优化器

  • Hive的CBO也可以根据查询成本制定执行计划,例如确定表连接的顺序、以何种方式执行连接、使用的并行度等。设置下面的属性启用基于成本优化器。

  • <property>
        <name>hive.cbo.enable</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.compute.query.using.stats</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.stats.fetch.partition.stats</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.stats.fetch.column.stats</name>
        <value>true</value>
    </property>
    
  • hive.cbo.enable:控制是否启用基于成本的优化器,默认值是true。

  • hive.compute.query.using.stats:该属性的默认值为false。如果设置为true,Hive在执行某些查询时,例如selectcount(1),只利用元数据存储中保存的状态信息返回结果。为了收集基本状态信息,需要将hive.stats.autogather属性配置为true。为了收集更多的状态信息,需要运行analyzetable查询命令。

  • hive.stats.fetch.partition.stats:该属性的默认值为true。操作树中所标识的统计信息,需要分区级别的基本统计,如每个分区的行数、数据量大小和文件大小等。分区统计信息从元数据存储中获取。如果存在很多分区,要为每个分区收集统计信息可能会消耗大量的资源。这个标志可被用于禁止从元数据存储中获取分区统计。当该标志设置为false时,Hive从文件系统获取文件大小,并根据表结构估算行数。

  • hive.stats.fetch.column.stats:该属性的默认值为false。操作树中所标识的统计信息,需要列统计。列统计信息从元数据存储中获取。如果存在很多列,要为每个列收集统计信息可能会消耗大量的资源。这个标志可被用于禁止从元数据存储中获取列统计。

Crontab

  • cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
  • Linux下的任务调度分为两类,系统任务调度和用户任务调度。
    • 系统任务调度:系统需要周期性执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
    • 用户任务调度:用户要定期执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab命令来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中,其文件名与用户名一致。

Crontab权限

  • Linux系统使用一对allow/deny文件组合判断用户是否具有执行crontab的权限。
  • 如果用户名出现在/etc/cron.allow文件中,则该用户允许执行crontab命令。如果此文件不存在,那么如果用户名没有出现在/etc/cron.deny文件中,则该用户允许执行crontab命令。
  • 如果只存在cron.deny文件,并且该文件是空的,则所有用户都可以使用crontab命令。
  • 如果这两个文件都不存在,那么只有root用户可以执行crontab命令。allow/deny文件由每行一个用户名构成。

Crontab命令

crontab [-u user] file
crontab [-u user] [-e | -l -r]
  • -u user:用来设定某个用户的crontab服务,此参数一般由root用户使用。
  • file:file是命令文件的名字,表示将file作为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入,通常是键盘上键入的命令,并将它们载入crontab。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。如果文件不存在,则创建一个。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  • 注意: 如果不经意地输入了不带任何参数的crontab命令,不要使用Control-d退出,因为这会删除用户所对应的crontab文件中的所有条目。代替的方法是用Control-c退出。

Crontab文件

  • 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置。它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
    • 56038931785
  • 星号(*):代表所有可能的值。
  • 逗号(,):指定一个列表范围,例“1,2,5,7,8,9”。
  • 中杠(-):表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

执行

  • 脚本中涉及文件路径时写绝对路径;
  • 脚本执行要用到环境变量时,通过source命令显式引入
  • 当手动执行脚本没问题,但是crontab不执行时,可以尝试在crontab中直接引入环境变量解决问题
  • 可以将crontab执行任务的输出信息重定向到一个自定义的日志文件中
Hive SQL 优化 要想做好hive优化,首先要理解MR过程,HiveSQL转换为MR的过程,以及Hive表的分区分桶机制。 本质上的优化是,减少读,避免shuffle 和 增加并发度。 优化的手段: 跳过不必要的读 减少Shuffle 读延迟问题 数据倾斜 Partition、Bucket 使用 Skew(hive对声明了Skew的列会单独使用文件存储,并且在资源分配上有优待) MapJoin(Broadcast Join),避免ReduceJoin 增加热数据备份数 对于倾斜部分单独拿出来,做Map Joi 阅读详情

相关推荐

Hive常用优化参数

常用调优测试语句 :   ①显示当前hive环境的参数值: set 参数名; 如:   ②设置hive当前环境的参数值,但仅对本次连接有效 set 参数名 = 值; 如: hive job优化 1、并行优化 hive job的并行化执行,在job之间没有依赖关系时可以同时执行,并行数另外配置,默认为8,开启并行会消耗更

雲的博客 4919

Hive优化总结

一、SQL本身的优化 1、只select需要的列,避免select * 2、where条件写在子查询中,先过滤再关联 3、关联条件写在on中,而不是where中 4、数据量大时,用group by代替count distinct 5、数据量小时,用in代替join 6、避免笛卡尔积 7、join时大表放后面,使用相同的连接键 7、严格格式 Hive.mapred.mode,分 nonstrict,strict,默认是nonstrict, 如果设置为strict,对三种情况限制: (1)分区表必须加分区。

GodxvA 9059

【大数据Hive】hive 优化策略之job任务优化

hive job优化策略

congge_study的博客 9520

Hive总结篇及Hive的优化

概述 Hive学习也有一段时间了,今天来对Hive进行一个总结,也是对自己的总结,作者还是个小白,有不对的地方请大家指出相互学习,共同进步。今天来谈一谈什么是Hive,产生背景,优势等一系列问题。 什么是Hive 老规矩:官网地址 Hive wiki. 先来谈谈自己的理解: 有些人可能会说Hive不就是写SQL的吗,那我们其实可以从另一个角度来理解:Hive很强大,只要写SQL就能解...

4万+

ComfyUI面部修复FaceDetailer保姆级教程:从模型选择到参数调优全解析

本文提供ComfyUI面部修复FaceDetailer的保姆级教程,深度解析从模型选择到参数调优的全过程。针对常见的五官模糊、肤色不均等问题,详细对比了BBox与Segm检测器的优劣,并给出SD1.5与SDXL模型的核心参数联动策略与实战方案,帮助用户精准掌控AI绘画中的面部修复效果。

weixin_29073241的博客 470

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 341

hive 优化

hive 优化

qq_43192537的博客 3004

舵机操作手册

微型伺服马达原理与控制(中鸣) 1、微型伺服马达内部结构一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反馈可调电位器;及一块电子控制板。其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。 2、微行伺服马达的工作原理一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示: 减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把

HEIMENGER的博客 3133

hive的优化策略

以 on,where 多条件字段顺序,建【多重】分区表,默认开启支持,以分区字段为条件筛选数据,tez引擎:动态分区剪裁支持。控制Mapper和Reducer数量,mapper的启动和初始化开销较大,【数量过多】导致开销大于逻辑处理,浪费资源。从表:不存在以NULL填充,where不能下推,on可以下推。主表:全部显示, on条件不能下推,where可以下推。配置压缩格式,表存储格式,查看是否支持压缩,是否支持切片。【连接键】的值分布不均:值集中的少数分区,其他分区没有值。分桶=>拉链表(分桶表)、抽样。

inori1256的博客 2561

MCU工程迁移实战:从STM32到MSPM0L1306的完整指南

在嵌入式系统开发中,MCU工程迁移是开发者常面临的核心挑战,涉及从旧平台向新芯片的完整适配。其原理在于不同MCU在硬件架构、外设寄存器映射、时钟树及开发工具链上存在差异,迁移的本质是将应用逻辑与底层硬件实现解耦。这一过程的技术价值在于提升代码复用性、降低硬件切换成本,并确保产品能快速响应供应链或技术栈变化。典型应用场景包括产品升级换代、芯片缺货替代以及技术生态统一。本文以TI MSPM0L1306为例,详解如何通过对比清单分析、DriverLib API替换及分步调试,高效完成从STM32等平台到Arm C

weixin_27625589的博客 329

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

Hive优化方法汇总

1、Fetch抓取 Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。例如:SELECT * FROM employees;在这种情况下,Hive 可以简单地读取 employee 对应的存储目录下的文件,然后输出查询结果到控制台。 在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive 默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limi

南洲.的博客 4854

Authentication Assertion Tickets,SAP 系统到系统单点登录里的短命凭证

SAP 系统间的身份传递机制存在 Authentication Assertion Ticket 和 SAP Logon Ticket 两种易混淆的凭证。前者用于系统间短时身份委托(有效期2分钟,通过HTTP头传输),后者用于浏览器SSO(可配置有效期,通过Cookie传输)。Assertion Ticket依赖签发系统的数字签名和严格的时间同步,适用于ABAP/Java系统间的后台作业调用。现代SAP架构已转向OAuth 2.0等标准协议,但老系统中仍需注意两种票据的关键差异:传输方式、有效期、接收方限制

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 601

hive部分:hive的优化,MapReduce的优化

hive 核心思想: 把 Hive SQL 当做 Mapreduce 程序去优化。 以下 SQL 不会转为 Mapreduce 来执行: select 仅查询本表字段; where 仅对本表字段做条件过滤。 explain 命令可以显示执行计划: EXPLAIN [EXTENDED] query; EXTENDED 可以看到更详细 的信息。 本地模式提高执行效率 本地模式: map...

wyqwilliam的博客 2694

SAP 创建PO时提示“不能确定任何组件”

SAP 创建委外加工的PO时提示“不能确定任何组件” 而如果BOM已经创建了,但还是提示该错误保存。 解决办法:1. BOM selection 未配置好; 2. 由于Purchasing prosessing time的设置,如果PO中的delivery time - Purchasing prosessing time是过去的日期,那么会找不到BOM,BOM的有效期需早 于PO审批的有效期。 3. BOM未...

willieyuan的博客 6114

RepHead一种重参数化检测头用于提升YOLOv8在困难样本上的检测性能

在目标检测任务中,困难样本通常是指那些由于特殊背景、遮挡、低分辨率或极度小物体等因素,导致模型难以识别的样本。这类样本对传统YOLO系列模型的影响较大,常常造成漏检或误检。重参数化(Reparameterization)是一种深度学习中常用的技术,旨在通过对网络参数的变换,使得模型在训练过程中能够更加灵活地适应不同的数据特征。通过对原始网络结构的参数进行重新表达,能够引导模型在训练过程中学习到更加有效的特征。本文详细介绍了YOLOv8的改进——RepHead检测头,并深入分析了它在解决困难样本检测中的应用。

博客 1209

Hive之——Hive SQL优化

一、Hive优化目标在有限的资源下,提高执行效率二、Hive执行HQL——&gt; Job——&gt; Map/Reduce三、执行计划查看执行计划explain [extended] hql四、Hive表优化1、分区静态分区动态分区set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstric...

冰河的专栏 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

hive中groupby优化_关于Hive优化的四种方法总结

一、整体架构优化现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez、Spark等。根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点:1、根据不同业务需求进行日期分区,并执行类型动态分区。 相关参数设置: 0.14中默认hive.exec.dynamic.partition=ture2、为了减少磁盘存储空间以及I/O次数,对数据进行压缩相关参数...

weixin_32154667的博客 2319

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Hive之任务优化

Hive 是一个基于 Hadoop 的数据仓库工具,提供了 SQL-like 的查询语言来分析存储在 HDFS(Hadoop Distributed File System)上的大规模数据集。为了提高查询性能,Hive 提供了多种优化方法,涵盖不同层次的改进,从 SQL 查询层到执行层。

youziguo的专栏 1414

【hive】limit查询优化

limit不优化会全部查询后,再返回部分 优化后:对数据源抽样返回 开启优化参数: hive.limit.optimize.enable=true //开启对数据源进行采样的功能 hive.limit.row.max.size=100000 //设置最小采样容量。默认10万 hive.limit.optimize.file=10 //可抽样的最大文件数。默认10个 缺点:可能输入中有用的数据永远都不会被抽样到。 (1)配置文件 Hive 的配置文件包括:   A. 用...

开发随笔-猫咪酱 2750

hive执行语句优化

一、类SQL语句优化 1、跟SQL基本一致的优化原则 1.1 尽量原子化操作 尽量避免一个SQL包含复杂逻辑,可以使用中间表来完成复杂的逻辑。 1.2 尽量尽早地过滤数据 尽量先where筛选后再join,减少每个阶段的数据量,对于分区表要加分区条件,只选择需要使用到的字段。 1.3 表链接时尽量使用相同的连接键 当对3个或者更多个表进行join连接时,如果每个on子...

abc200941410128的博客 4583

Hive 优化

Hive 优化并行优化小文件优化矢量化查询读取零拷贝优化数据倾斜优化JOIN的时候的倾斜方案一方案二方式1:运行时判断方式2:编译时判断Union优化GROUP BY分组统计的倾斜处理优化1:优化2:MapReduce迭代计算的概念(补充)MapReduce的计算模型MR的迭代Hive优化小总结 并行优化 并行编译 Hive默认情况下,只能同时编译一个SQL到MapReduce代码的转换,并对这个过程上锁。 为了提高效率,同时减少死锁发生的可能性,我们需要将这个一次只能编译一个的操作,优化为并行执行。

qq_45798620的博客 1281

hive中groupby优化_Hive MR 优化

背景:最近接到一个任务,有一批hive任务,执行太慢,占用集群资源不说,业务方数据也迟迟出不来,这就问题很大了。正好最近公司有这方面的培训,叫我想办法能不能进行优化下。目录减少处理的数据量合理的设置map、reduce数量小文件合并Shuller过程优化join优化数据倾斜优化减少处理的数据量分区裁剪为了尽早的过滤掉数据,减少每个阶段的数据量,对于分区表要加分区查询涉及分区表时,在where子句或...

weixin_34331744的博客 1091

hive优化大全(hive的优化这一篇就够了)

文章目录写在前面一、概述1.1 数据倾斜1.2 MapReduce二、产生原因三、解决方案和避免方案3.1建表层面3.1.1 分区表 写在前面 前几天发的大数据组件之Hive(Hive学习一篇就够了),其访问量和点赞数很多,这次打算更新一点关于hive的语句优化和关于hive的一些配置的文章。希望大家持续关注,我会继续更新更多的文章。 一、概述 首先。我们为啥要进行优化。从事大数据开发的人员都体验过这样的感觉。当我们写完一个查询指令。当我们按下回车的时候,我们等到map的进度条到99%时,系统就像卡住一样。

m0_43405302的博客 4268

【Hive】8-Hive性能优化及Hive3新特性

Hive性能优化及Hive3新特性

qq_45917176的博客 1697
上一篇: 初始装载
下一篇: 使用 Hugo 进行持续集成写作及同步
zealscott
博客等级 码龄9年 327粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值