这个错误的产生一般是因为你在设置了这个参数:
set hive.exec.dynamic.partition =true;
这个参数的含义是:开启强制分桶;是实现分桶,能够根据你设置的规则,把数据分配到指定位置的桶中,方便后期的抽样。
出现标题上的错误的原因有可能是:spark的版本问题,spark版本过低不兼容等。
验证spark版本问题:
你把上面的参数改为:
注意:下面的 4 是要跟你创建的表时,设置的桶数一致;
set hive.enforce.bucketing =false;
set hive.enforce.sorting =false;
set mapred.reduce.tasks =4;
然后再次执行就会发现,分桶创建完成,但是里面的数据存放的规则不是你定义的规则,这是因为 以上的参数,也就验证了 以上spark 版本不兼容的问题: 无法 启动hive的分桶机制。
本文探讨了在使用Spark时,开启`sethive.exec.dynamic.partition=true`导致的错误,分析了可能是由于Spark版本过低无法支持分桶机制。通过将参数改为`sethive.enforce.bucketing=false`进行验证,并给出了版本兼容性问题的解决建议。

2219

被折叠的 条评论
为什么被折叠?



