我有两个hive选择语句。
select * from ode limit 5;
这成功地从表'ODE'中提取了5条记录,所有的列都包含在结果中。
select content from ode limit 5;
其中'content'是表中的一列. 错误是:
hive> select content from ode limit 5;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3664)
at java.lang.String.<init>(String.java:207)
第二个查询应该是便宜了很多,为什么会造成内存问题呢,怎么解决呢?
1条答案
按热度按时间x6yk4ghg1#
当你选择整个表时,hive 触发 fetch 任务,而不是不涉及解析的 mr(就像调用
hdfs dfs -cat ... | head -5
)。据我所知,在你的情况下,hive客户端试图在本地运行map。
你可以选择两种方式之一。
用 "hive.fetch.task.conversion "强制远程执行。
使用
HADOOP_CLIENT_OPTS
环境变量增加hive客户端的堆大小。你可以在这里找到更多关于fetch任务的细节。