00:01
好来,那我们接着说啊呃,接下来我们解决这个问题吧。就是red这个连接这个问题啊,我们先来这个简单分析一下啊,呃,这个问题的原因呢,就是我们在这个分流你这个维度数据的时候,因为我们是要去连接你这个的。对吧,那目前我们写的代码是,呃,当我们拿到你的每一条数据以后,我们接下来要往这个写的时候,那我就开了一个链接,然后写完以后呢,我就立马把这个链接给它关掉了。对吧,这样的话就相当于你的每一条维度数据的这个写入,写这个写入啊,我们都需要。开启一个连接,然后呢,用完以后把它关掉。对吧,这个是不太好的啊,为什么不太好呢?因为太频繁了啊,来解释一下,就是此处啊,好在此处这个开关red的这个连接啊,太频繁啊对吧,太频繁了肯定不好,因为我们知道呃,你外联的时候呢,其实这个连接获取的这个过程,它就会呃消耗一定的时间的。
01:08
对吧,所以说把这个问题我们去解决一下啊,行,那如果你要解决这个问题的话,那接下来就是大家分析一下,我们应该把它写到什么地方比较好。就什么时候把它打开。什么时候把它关掉?对吧,好大家想想啊,呃,那这样吧,你看啊,我们这个代码还是这样子的啊,就是呃,分析一下啊,我们有一个就是比如说写到什么for r DD的外面对吧,然后呢,For r DD的里面,然后呢,这个里面,然后这个for。Partition外面对吧,再一个就是什么。帕提声里面。OK啊,这是你的这个链接啊,好,这个写到哪里。
02:10
OK,现在给你这个三个位置啊,因为现在我们好像就就这三个位置是吧?啊,那你选择一下吧,你会选择哪一个。嗯。来投个票吧。第三个。这个应该都能想得到,应该是第三个是吧?好呃,那我想问一下,为什么前两个大家不选呢。啊,为什么前两个我们不选呢。啊。为什么前两个不选啊?
03:00
能不能想到原因?来吧,一起来分析一下好吧,呃,大家可能还在想啊,就是当你看到这几个。的位置不对是吧?那肯定位置不对啊,但是不对的原因是什么呢?是不是啊,来说一下,大家看到这个时候,你肯定还想到啊,它是在这个就是excuure执行对不对,它呢也是在这个CU执行,然后这个呢,是在呃,错了错了错了driver啊。心里想的Java,然后手上写的是excu啊好,它是在这个excu执行对不对?好,这是我们这个执行的一个位置,OK,那我们就假设啊,现在你写到这个for partition里面,其实现在我们就在这个for partition里面写的,只不过我是把它写到循环里面了,对不对。啊,我会把它写到循环里面的啊好呃,那这样吧,我再加一个吧里面,然后呢,这个循环外面好这也是啊。
04:05
写的更详细一点啊里面,然后呢,循环里面对吧,那这个同样也是在这个E执行的,对不对啊,那这个时候如果你要选的话,大家应该选择哪个呀,应该还是选择这个吧。对吧,应该选择这个,因为我们现在就在这里面写的它不合适嘛,对吧,那我肯定还会选择它啊行,那现在我想说的事情,为什么不选这两个呢?大家注意啊,如果说你要选择这两个的话,那你来看啊,假如说我把这个链接呢,放到这个外面,或者说我放到这个位置,对吧,这个位置或者说你的这个位置。啊,这两个地方如果你要开了连接,那么他们是在你这个driver站执行的,那就说白了,我的连接呢,其实是在我这个driver站开启的。但是我将来这个真正用的时候,我是在你的EXQQ里面去使用的。好,那么这就涉及到一个什么问题,你在driver端你开了一个连接,然后呢,你想到你的里面去使用。
05:04
就说白了,你要把Java端的一个对象要传到你的Q里面去使用,那这个过程就会涉及到一个序列化,对不对?好,那这个时候大家首先想的就是说,那我赶紧去看看吧,看看你这个jes啊,它这个支不支持这个数列化。对不对啊,那我告诉你,你甭看了。啊。不用看了,为什么呢?你就记住一个点,所有的连接对象。不支持序列化。你能明白了吧,这个连接对象它是不能跟你序列化的,你能听懂吧,因为它维护的是一个连接的一个状态,就是我要去记录我跟谁去连着的,对吧,而且我们之间是要有什么有这个通信的。那你说现在我创建和的对象啊,他就这是我那个呃加对象对不对,他目前呢,跟你的这个red是做了一个什么连接的,然后呢,你现在说来把它给我拍扁了啊,序列化成什么序列化的这个字节对吧,然后呢,发送到这个SQ里面,你再把它反序列化过来。
06:05
对吧,虽然说它也是一个je对象了,但是你还能够保证它跟这个是有连接的吗?啊,你们两个通话都断开了。你还指望着说还能再回复,再再恢复吗?同学们,不行的,能听懂吧,所以说这个连接对象啊,你一定要注意一个问题,就是它可千千万万啊。不能进行这个传输的。所以说你现在写到这个位置,写到这个driver中肯定是不行的。明白了吧,写到Java中肯定不行啊,解释一下,这个连接对象不能序列化对吧,不能传输啊好吧,哎,这个地方也是一样的啊,连接对象不能序列化,不能传输,明白我的意思吧。啊,说是这个这两个方案我们肯定是不能够选择的啊好,那接下来就是我们的这种方案和这种方案了,那很明显你写到它里面的话,就相当于我的每条数据啊,这就是我相当于每条数据啊,每条数据开启一个链接,用完关闭。
07:07
对吧,这个太频繁了,那我是不是可以这么去想啊。我在你的forit partition里面循环的外面,这相当于什么,这个相当于是每分区对吧,每个分区的啊,每分区数据开启一个连接,那我用完关闭,这样是不是会更好一点了。能理解吧,我就你的一个分区的数据,你这么多数据,我就统一给你开一个链接,你处理完以后呢,我再把它什么统一关掉。这个就比较好了吧,同学们对吧,所以说现在啊,我们这个red这个连接的开启关闭,你要把它写到你的for part声里面,然后呢,循环的外面什么地方呢?就这个地方,这么循环的外面吗?For盘里面就这个位置,所以说你要在这个位置呢,去啊开启red连接明白了吧,好,那我们就把它把这个注释掉了啊把它注释掉。
08:00
这个地方不能开了哈,把它复制过来,复制到什么地方呢?复制到我们的这个地方,好,那你在这个地方开的,那我们是不是要代表的,就是在你的for循环结束以后,来这个括号啊往下翻。是在这样。对吧,这是你的for循环们看清楚了啊,这是你的for循环啊,那什么在这个for循环的外面,是在这个地方再给它什么关闭了吧,对吧,关闭red连接好,所以说我们把它注释掉,注释掉以后来把它拿过来好放到这个位置,这就可以了。明白了吧?所以说这个还是涉及到一个,就是你代码的一个执行位置啊,以及对象的,就是你代码的执行位置就决定了你的对象是在哪里的,如果你的对象是在这个Java端的,你将来要在这个exq里面去使用,那就会涉及到一个传输,那如果你要传输,我就要求你是支持序列化的,但很明显我们的连接对象它是不支持这个序列化的,你就甭考虑这个事情了,那么你只能是在你的用的地方把它创建出来。
09:02
那我们将来在你的SQ这个SQ里面去使用,那我就只能在它里面去创建,但是呢,我还不能创建的太频繁。对吧,所以说我们选择了一个地方,就是呃,在这个for party里面,然后呢,循环的外面,这样我就可以保证每个分区我开启一个连接,然后呢,用完以后呢,把它这个关闭掉。对吧,说把它这个做一个优化啊,这样就会什么变得更加的好一点。理解了吧,同学们好,来这是我们这个连接这个问题啊,OK。
我来说两句