为什么在hive查询中选择较少的列时,会出现java outofmemoryerror?

gk7wooem  于 2021-04-12  发布在  Hive
关注(0)|答案(1)|浏览(591)

我有两个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)

第二个查询应该是便宜了很多,为什么会造成内存问题呢,怎么解决呢?

x6yk4ghg

x6yk4ghg1#

当你选择整个表时,hive 触发 fetch 任务,而不是不涉及解析的 mr(就像调用hdfs dfs -cat ... | head -5)。
据我所知,在你的情况下,hive客户端试图在本地运行map。
你可以选择两种方式之一。
用 "hive.fetch.task.conversion "强制远程执行。
使用HADOOP_CLIENT_OPTS环境变量增加hive客户端的堆大小。
你可以在这里找到更多关于fetch任务的细节。

相关问题