hive大数据教程 hive数据倾斜解决办法?
hive数据倾斜解决办法?
数据向下的原因:在进行shuffle的时候,要将各个节点上相同的key拉取到某个节点上的一个task来进行处理,诸如按照key并且聚合或join等操作。此时假如某个key对应的数据量而且大的话,都会不可能发生数据向下。诸如大部分key不对应10条数据,只不过个别key却不对应了100万条数据,那就大部分task肯定就只会分配到10条数据,接着1秒钟就不运行完了;但是其它task可能先分配到了100万数据,要正常运行一两个小时。
解决方案:
第一点:真接过滤处理掉那些过多下沉的Key。这种方法很简单的,呢既然你倾斜,那我你不你就好了。比如,共有有100万个key。只有2个key,是数据量提升到10万的。其他所有的key,按的数量都是几十,那样join后会紊乱向外倾斜。此时此刻,自己是可以去取舍,如果没有业务和需求这个可以明白和给予的话,在从hive表查询源数据的时候,真接在sql中用where条件,过滤掉某几个key。这样这几个原来有大量数据,会导致数据向外倾斜的key,被过滤后掉之后,那么在的spark作业中,自然就不会再一次发生数据倾斜了。
第二点:HiveETL做处理
通过HiveETL作好对数据听从key参与聚合,也可以是预先和其他表并且join,接着在Spark作业中是对的数据源就不是原来的Hive表了,只是预处理后的Hive表。此时由于数据已经预先参与过聚合或join操作了,这样的话在Spark作业中也就不不需要可以使用原先的shuffle类算子负责执行这类能操作了。Hive ETL中通过group by或是join等shuffle操作时,我还是会直接出现数据倾斜,造成Hive ETL的速度很慢。我们只不过是把数据偏转的发生晚几天到了HiveETL中。
第三点:能提高shuffle的操作分头并进度在对RDD不能执行shuffle算子时,给shuffle算子传去一个参数,比如reducebykey(1000),该参数就系统设置了这个shuffle算子执行时shufflereadtask的数量。对此SparkSQL中的shuffle类语句,.例如group by、join等。
如何查看hive的元数据存储位置?
可以不在hive的配置文件中栏里点,hive在安装好前要配置元数据的存储
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。