IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 2.Hive表结构变更时,滥用MSCK REPAIR TABLE语句,导致变更语句执行时间过长 -> 正文阅读

[大数据]2.Hive表结构变更时,滥用MSCK REPAIR TABLE语句,导致变更语句执行时间过长

1.分析原因

? ? ? ? 很多人可能都知道这个语句是用来修复分区的,但具体修复了什么,就说不上来了。

2.解决办法

? ? ? ? 搞清楚这个命令的作用就不会滥用了。

3.实战演习

? ? ? ? (1)查看官方文档

? ? ? ? ? (a)从这一段说明可以看出,元数据中存储着一个关于分区的列表,如果通过hadoop 命令或者其他方式(非hive命令)在hdfs上添加了分区,元数据库并不能自动感知到分区的修改。

Recover Partitions (MSCK REPAIR TABLE)
    Hive stores a list of partitions for each table in its metastore. If, 
however, new partitions are directly added to HDFS (say by using hadoop 
fs -put command) or removed from HDFS, the metastore (and hence Hive) 
will not be aware of these changes to partition information unless the 
user runs ALTER TABLE table_name ADD/DROP PARTITION commands on each 
of the newly added or removed partitions, respectively.

恢复分区(MSCK REPAIR TABLE)  
    Hive在它的元存储中为每个表存储一个分区列表。 如果, 然而,新的分区直接添
加到HDFS(比如使用hadoop fs -put命令)或从HDFS中删除,这些分区信息不会被元存
储感知到,除非用户在每个新添加或删除的分区上分别运行ALTER TABLE table_name
ADD/DROP PARTITION命令。 

? ? ? ? (b)从这一段可以看出,这个命令的默认选项是ADD,可以自动更新添加的分区信息到元数据库中,选择DROP选项,可以自动更新删除的分区信息到元数据库中,选择SYNC选项,相当于调用了ADD和DROP这两个选项。

    However, users can run a metastore check command with the repair table 
option:

    MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

    which will update metadata about partitions to the Hive metastore for 
partitions for which such metadata doesn't already exist. The default 
option for MSC command is ADD PARTITIONS. With this option, it will add
 any partitions that exist on HDFS but not in metastore to the metastore. 
The DROP PARTITIONS option will remove the partition information from 
metastore, that is already removed from HDFS. The SYNC PARTITIONS option 
is equivalent to calling both ADD and DROP PARTITIONS. See HIVE-874 and 
HIVE-17824 for more details. When there is a large number of untracked 
partitions, there is a provision to run MSCK REPAIR TABLE batch wise to 
avoid OOME (Out of Memory Error). By giving the configured batch size for 
the property hive.msck.repair.batch.size it can run in the batches 
internally. The default value of the property is zero, it means it will 
execute all the partitions at once. MSCK command without the REPAIR option 
can be used to find details about metadata mismatch metastore.

    但是,用户可以使用repair table选项运行metastore检查命令:

    MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

    对于这些元数据还不存在的分区,它将更新关于分区的元数据到Hive元存储。
MSC命令的默认选项是ADD PARTITIONS。有了这个选项,它将把HDFS上存在但不在
元存储中的任何分区添加到元存储中。DROP PARTITIONS选项将从metastore中删除
已经从HDFS中删除的分区信息。SYNC PARTITIONS选项相当于同时调用这两个选项。
查看HIVE-874和HIVE-17824获取更多细节。当存在大量未跟踪的分区时,可以通过
批量运行MSCK REPAIR TABLE来避免OOME(内存不足错误)。通过为属性hive.msck
.repair.batch.size提供配置的批处理大小,它可以在内部运行批处理。该属性的
默认值为零,这意味着它将一次性执行所有分区。不带REPAIR选项的MSCK命令可以
用于查找元数据不匹配的元存储的详细信息。

? ? ? ? (2)演示效果

? ? ? ? (a)使用默认选项(ADD),另外另个选项类似,可以自行实验

? ? ? ? ? ? ? ?step1:建一张表,并通过hive命令添加一个分区,并查看分区情况

CREATE TABLE IF NOT EXISTS test.test
(
     id         INT
    ,name       STRING
    ,gender     STRING
)
PARTITIONED BY (pt_d STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
;

ALTER TABLE test.test ADD PARTITION(pt_d = '20211102');

SHOW PARTITIONS test.test;

? ? ? ? step2:通过hadoop命令和其他方式创建分区?,可以

hadoop fs -mkdir hdfs://hadoop01:9000/user/hive/warehouse/test.db/test/pt_d=20211101

?

?????????step3:查看分区的元数据信息

SHOW PARTITIONS test.test;

????????step4:使用msck repair命令后查看分区的元数据信息?,可以看到,使用命令后,元数据信息已经更新。

MSCK REPAIR TABLE test.test;

SHOW PARTITIONS test.test;

?4.总结

? ? ? ? MSCK命令只有一个作用,就是来检测通过非hive命令的方式添加或者删除分区的情况,添加分区的会将元数据写入到元数据库中,删除分区的会将对应的元数据信息删除。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:55:06  更:2021-11-26 08:55:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:40:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码