Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask

这个问题是hive进行map join 而机器内存不够导致
map join会把join中的小表读到内存中,然后再对比较大的表格进行map操作。join就发生在map操作的时候,每当扫描一个大的table中的数据,就要去去查看小表的数据,哪条与之相符,继而进行连接。这里的join并不会涉及reduce操作。map端join的优势就是在于没有shuffle。
但我们机器内存不够,所以悲剧了。


修改这个文件下的参数可以把map join 关闭,使用common join

$KYLIN_HOME/conf/kylin_hive_conf.xml
:

hive.auto.convert.join
false//true修改为false
Enables the optimization about converting common join into mapjoin


common join也叫做shuffle join,reduce join操作。这种情况下生再两个table的大小相当,但是又不是很大的情况下使用的。具体流程就是在map端进行数据的切分,一个block对应一个map操作,然后进行shuffle操作,把对应的block shuffle到reduce端去,再逐个进行联合,这里优势会涉及到数据的倾斜,大幅度的影响性能有可能会运行speculation,这块儿在后续的数据倾斜会讲到。因为平常我们用到的数据量小,所以这里就不具体演示了。