复现
beeline -u jdbc:hive2://linux01:10000 -n root -e "alter table tmp.user_action_log add partition(dt='${pre_day}') location '/events_log/${pre_day}'"
在Linux命令行中跑HiveSQL统计行数,每次统计出来都为0,后来发现是查询语句压根就没执行。
原因
Hive中跑复杂SQL会导致内存溢出,查询失败,报错:FAILED:Execution Error,return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
解决:修改Hadoop及Hive配置参数
1. 修改Hive配置参数
修改hive客户端目录下hive-site.xml配置文件中对应值,如果该配置中已存在mapred.map.child.java.opts配置项,则只需要修改对应的值即可;如果该配置中没有该配置项则需要加入对应的信息,如下:
<property>
<name>mapred.map.child.java.opts</name>
<value>-Xmx2048m</value>
</property>
2. 修改Hadoop配置参数
在Hadoop的配置文件Hadoop-env.sh中修改如下配置:
export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"