Hive 为什么在配置单元查询中选择较少的列时会发生Java OutOfMemoryError?

Hive 为什么在配置单元查询中选择较少的列时会发生Java OutOfMemoryError?,hive,Hive,我有两个配置单元select语句: select * from ode limit 5; 这将成功地从表“ode”中取出5条记录。所有列都包含在结果中。但是,以下查询导致错误: select content from ode limit 5; 其中“内容”是表中的一列。错误是: hive> select content from ode limit 5; Total jobs = 1 Launching Job 1 out of 1 Number of reduce tasks is

我有两个配置单元select语句:

select * from ode limit 5;
这将成功地从表“ode”中取出5条记录。所有列都包含在结果中。但是,以下查询导致错误:

select content from ode limit 5;
其中“内容”是表中的一列。错误是:

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)
hive>从ode限制5中选择内容;
职位总数=1
正在启动作业1/1
由于没有reduce运算符,reduce任务数设置为0
java.lang.OutOfMemoryError:java堆空间
位于java.util.Arrays.copyOfRange(Arrays.java:3664)
位于java.lang.String。(String.java:207)

第二个查询应该便宜得多,为什么它会导致内存问题?如何解决此问题?

当您选择整个表时,Hive会触发Fetch任务,而不是不涉及解析的MR(就像调用
hdfs dfs-cat…| head-5

据我所知,在您的案例中,配置单元客户端尝试在本地运行map。
您可以选择以下两种方式之一:


  • 您可以找到有关获取任务的更多详细信息。

    当您选择整个表时,Hive会触发获取任务,而不是不涉及解析的MR(就像调用
    hdfs dfs-cat…| head-5

    据我所知,在您的案例中,配置单元客户端尝试在本地运行map。
    您可以选择以下两种方式之一:

  • 您可以找到有关获取任务的更多详细信息