00:00
好,上一节我们已经呃完成了商品维度表的数据装载的SQL语句的编写,呃,然后这一节呢,我们要演示一个拉泽罗索引文件失效的问题啊,大家先看我操作啊,那首先我先把这个商品维度表创建出来。OK,那接下来呢,我们执行一下下边的数据装载语句啊,我们往商品维度表当中导入第一天的数据啊,执行一下。啊,大家不用担心啊,这个装载语句呢,我们是可以重复执行的,因为在这儿我们使用的是insert or right对吧,那所以说我重复执行多次这个数据呢,也不会重复啊。好,这边应该已经执行完毕了啊好,那接下来我们查看一下商品维度表当中的结果。来,双击。大家注意观察啊,这个表里边已经有数据了,对吧?那我们往下翻往下翻往下翻诶翻到最底下的时候呢,大家会注意到有一条异常数据,对吧,那他所有的字段是不是都是不正常的呀,对吧?啊都是闹诶这条数据是怎么来的呢?
01:05
来我给大家解释一下啊,那这个呢,其实是由于have默认情况下会对map端的小文件进行合并导致的啊,那大家都知道,那这个insert语句呢,最终会被解析成一个计算任务啊,是MR也好,还是这个SW的任务也好啊,那总之是一个计算任务,那这个计算任务呢,会去读取数据对吧?那他读的是哪的数据呢?那读的肯定就是我们这个ods层的与商品相关的这些业务表的数据,没错吧?那这些业务表呢,我们的数据格式是拉压缩,然后呢,我们也对其创建了索引,没错吧?那具体是什么样的呢?诶,我们打开看一下,呃,这个路径就是ods层的SQ in for这张表14号分区的这个路径啊,大家来看一下啊,这里边呢,会有一个拉泽勒文件,还有一个与之对应的索引文件啊,大家可以看到啊,那这两个文件呢,是不是相对来说都是比较小的呀,对吧?啊,那所以说have呢,在从这张表当中读取数据的时候。
02:05
时候呢,会误把这两个文件当成小文件进行合并啊,那也就是说它会把索引文件也当成数据文件进行处理啊,那所以说是不是最终就导致了,诶,我们写到SQ info这张表的数据呢,哎,就出现了这样的一条异常数据啊。啊,其实是这么一回事啊,也就这儿最根本的原因啊,就是have把拉泽罗索引文件误当成数据文件啊,然后呢,进行合并了啊,这是我们这个问题的根本原因啊,OK,那具体的现象呢?那肯定就是这出了一条异常数据啊,但其实出现这条异常数据还不是最糟糕的情况啊,最糟糕的是什么呢?最糟糕的是我们的索引文件没有了,对吧?索引文件没有了,那是不是就会出现一个问题?什么问题?啊,就是我们的切片就不能进行了,对吧?哎,这是哎最重要的一个问题啊,那所以说我们现在就需要去解决这个索引文件,哎被误合并的这个问题,那怎么去解决呢。
03:07
啊,其实很简单,那我们只需要关闭have的这个map端的这个小文件合并就可以了,啊,那具体呢,我们这儿要调整一个参数啊,哪个参数呢,打开文档。其实就是这个参数啊,诶,我们先看一下它的默认值是多少啊,给它CTRLC单出来放在这儿,我们执行一下,嗯。好,大家看一下啊,那它的默认值呢,是combine have input,那也就是说它会对map端输入的小文件进行合并啊,那当然现在我们需要关闭这个小文件的合并功能,那怎么关闭呢?那我们要做的就是将这个参数诶设为普通的have input OK,那现在我们再执行一下这个参数来,我们再呃,给它个值。来重新执行,OK,那这个改完这个参数之后呢,那上边这个insert语句我们再重新执行一下啊,这个因为是insert right,它会把原来的数据覆盖掉啊。
04:05
好,已经完事了,那现在我们再重新查看一下这个商品维度表,双击。来大家注意观察,那现在那个是不是异常数据就已经消失了呀,对吧,那现在这个问题呢,我们就解决了啊,然后咱这儿总结一下啊,那什么情况下我们才需要关闭这个Mac端的小文件合并的啊,那其实很简单,那如果说呃,我们读取的这张表啊,它是单纯的拉泽罗文件,并且我们为其创建了索引,那这个时候呢,我们就需要关闭map端的小文件合并的功能啊,这是大家要注意的一个地方。
我来说两句