优化了联盟的命令
HDFS数据定位率会影响Hive性能
对于一定量的数据,500 128M文件和2个30G文件运行了Hive任务,并且性能是不同的。两者之间的最大区别是,当阅读文件时,后者需要在整个网络上传输,并且后者需要在整个网络上传输,而后者需要跨网络传输。前者是本地阅读和写作。数据的。
Hive提供诸如文本,序列文件,rcfile,orc,parquest和其他格式之类的格式。
摘要:分区表的含义实际上很容易理解。它是在系统上建立一个文件夹,将分类数据放在不同的文件夹下,并加快查询速度。
了解该分区是文件夹的划分。查询时,它可以用作列名来显示查询范围。
子句分区中定义的列是表格中的形式列,并成为分区列。但是,数据文件中的这些值,只有目录中没有这些值。
为什么我们使用动态分区?让我们举个例子。如果中国有50个省,每个省的50个城市以及每个城市的100个地区,我们需要使用静态分区来完成多长时间。我们需要使用动态分区。
默认情况下未打开动态分区。打开默认值后,它将在严格的模式下实现。在此模式下,至少一个分区字段是静态的。这有助于防止由于错误引起的查询而引起的大量分区。Column:用户可以将时间戳用作分区表。然后导致每秒分区!以此方式!,我们还可以使用相应的措施:
每个表或分区,Hive可以进一步组织成桶。换句话说,枪管分为细化的数据范围。
分区规则:对于拆分桶的片段的哈希值,哈希值除以枪管数,其余数字确定枪管中记录的桶的数量,这意味着其余数字在桶中是相同的。拆分枪管不会更改原始表的组织方法和原始分区目录。它只是更改了文件中的数据分布。
优点:1。提高加入查询效率2.提高采样效率
详细信息如下:
在没有数据倾斜的情况下,使用的用途比组更好
默认情况下,距离将通过Hive重新操作为全局唯一的减少任务,因此并行性为1,并且可能导致数据倾斜。
该组将由Hive Translo Compontion Group计算,并且将有多个减少任务并行处理。每组数据组将汇总每种减少。
注意:在最新的Hive版本中:添加了计数的新优化(不同)。通过配置的hive.optimize.countdistincts,即使数据倾斜确实出现,也可以自动优化它。
使用指定为带有少量数据的小表格的MAPJOIN(B)支架,这表明MAP阶段中两个表的连接已完成。
将原始连接操作推到地图阶段。
大手表在右侧使用流t的SQL
普通桌子的联接也称为重型加入。通常在此阶段进行操作
默认值已关闭,并将普通查询转换为矢量化查询。切片扫描,过滤和其他查询。一次处理标准查询时,矢量查询可以一次查询1024行数据,从而减少系统的上下文切换开销。
### 3.打开地图结束
但这并不能完全控制会员的数量,并且调整任务数需要一个完整的算法。MAPREDUCE的切片大小。顾名思义,将数据分为数据膜。实际上,此切片与地图阶段的地图数量以及每个地图处理的数据处理量有关。在MapReduce中,如何确定每个地图过程的数据量?另外,每个地图如何读取输入文件的内容?用户可以确定输入方法并自行确定地图个人的数量。
MapReduce操作将根据输入目录生成多个地图任务,并通过多个MAP任务提高操作速度。IT将增加计划费用。因此,根据输入生成的合理地图编号,将适当的数据分配给每个地图,这可以有效地提高资源利用率并加快操作速度。
通过上面的逻辑:
在先前研究的所有情况下,简单地减少了MAP.TASK的数量,并且没有更改地图的数量。读者可以尝试自己。
解释依赖性用于描述SQL部分所需的数据源
解释依赖性有两个用法方案
请注意,使用加入时,不同的联接(例如内联接左联接)具有非等效过滤条件,并且过滤效果不同。
方案1:快速排除该岛岛主要任务的主要任务数据输出的输出。由于生产过程中不可控制的因素,上游任务是异常或空的,导致下游任务异常。
方案2:帮助表的输入,特别是有助于了解多个自我Query,多表连接依赖项输入。
案件:
下面有两个SQL:
实际上,通过解释依赖性,以上两个SQL不是等效的。如果内部连接中连接条件下的非等效过滤条件,则不会根据过滤条件过滤内部连接的左右表格。在执行过程中阅读零件= 0的分区数据
案例2:
通过Expalin依赖性,使用在连接条件下在连接条件下添加非等效过滤到左侧的连接条件的条件。(表A)完整表扫描,
如果过滤条件针对左表,则根本没有过滤角色,则将用完整表扫描两个表。
因此,通常的优化是尽快滤除数据。
通常,加入是一个重新分配工作,它发生在洗牌中并减少阶段。如果未指定,则是重新分配工作。
地图联接首先启动作业,阅读小表的数据,在内存中构建哈希表,将哈希表写入本地磁盘,然后将哈希表上传到HDFS并将其添加到分布式缓存中,然后将读取表B数据的任务。连接时,MAP将数据存储在缓存中。表B将匹配哈希表的数据。时间复杂度为O(1)后,将输出结果。
通常不建议使用hinit /+mapjoin(b) /此用法。在最坏的情况下,它容易出现记忆喷雾。
您可以使用配置尝试将重新连接转换为地图连接,hive.smalltable.filesize
枪管的地图连接将普通地图连接转换为枪管。拆分枪管的蜂巢表将计算枪管值的霉菌值,以获取枪管数。剩余的数字将发送到同一桶,每个枪管对应于文件。连接两个表时,您可以快速过滤出不需要的数据。
请注意,连接的两个表的管子数用于使用枪管的地图连接是乘数关系。
当数据倾斜时表连接。当数据倾斜时,它将导致单个任务花费大量时间和资源来处理倾斜键,从而成为整个工作的瓶颈。SkewJoin将分配数据在工作中分为两个部分,一个是倾斜数据,其中一部分是所有其余数据,这些数据由两项作业分别处理。
orc.c.compress代表ORC的文件压缩类型。可选类型无,Zlib,活泼
orc.bloom.filter.columns需要创建一个Bloom过滤器组
orc.bloom.filter.fpp使用Bloom过滤器的误报概率为默认为0.05
在Hive中使用Bloom过滤器,您可以快速确定数据中是否存在文件空间较小的数据
现象是,任务需要处理大量相同键的数据。这种情况有以下4个表演:
当该文件用于使用GZIP压缩等。不支持排序和分配操作时,将来有作业读取压缩文件时,更改文件只能通过一个任务读取。如果压缩文件很大,则该地图将变成瓶颈。
如果文件为200m,则每个地图处理数据的数量设置为128m,但计算引擎无法剪切该文件。该文件将不会移交给要读取的两个地图任务。只有一个地图任务。
支持剪切的压缩算法可用于支持文件,例如bzip2和zip
对于空值,NULL需要在计算过程中排除它们。
解决方案1:USER_ID是空的,不参与关联
解决方案2:给空值的空值
方法2比方法1好,不仅少于IO,而且更少的操作。在计划1中,徽标读了两次。作业必须为2,而方案2为1。这是适合倾斜ID(例如-99,'',null)的优化。
使用字符串和随机数,导致数据倾斜的数据可以分为不同的还原以解决数据倾斜的问题。
更改:使所有零记录都不会在同一yucetask中拥挤,并且由于存在替代性随机字符串值,因此它将散布到多个shoducetask中。由于无关联的零值,因此不在处理后。与最终结果相吻合。
在以下方案中,从t组中选择A,B,C数(1)b,b,引用汇总;
因为上述SQL可以分为(a,b,c),(a,b,null),(a,null,null),(null,null,null,null)
方法1:手动拆分此SQL
方法2:可以通过通过参数控制操作来拆除它。hive.new.job.grouping.cardination的目标是分组集,汇总,立方体。处理大于此值的组合的任务
当两个普通表执行重新分配连接时,如果连接键的表倾斜,则洗牌阶段不可避免地会导致数据倾斜
通常,这种情况仍然可以实现两项作业。第一个工作处理不会倾斜数据,第二个作业将倾斜的数据存储到分布式缓存中,并将其分为每个地图任务所在的节点。
原始:https://juejin.cn/post/7102304965552504869