使用hive中的另一个表在create table中发出问题

时间:2018-01-08 06:33:36

标签: hadoop memory hive

在蜂巢中有一个测试表。表数据有多个小文件,所以我想使用该测试表创建另一个表,这样新创建的表将具有更少的分区,查询将更快。但我创建新表它给我错误。

CREATE TABLE IF NOT EXISTS test_merge
     STORED AS parquet
AS
  SELECT * FROM test;

错误

ERROR : Status: Failed
ERROR : FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask
INFO  : Completed executing command(queryId=hive_20180108060101_7bca2cc8-e19b-4e6d-aa00-362039526523); Time taken: 366.845 seconds
Error: Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask (state=08S01,code=3)

使用较少的数据工作正常。示例

CREATE TABLE IF NOT EXISTS test_merge
     STORED AS parquet
AS
  SELECT * FROM test limit 100000;

这可能是记忆问题,我不知道。请帮忙

1 个答案:

答案 0 :(得分:1)

当您尝试编写镶木地板格式文件时,spark会将一批行捕获到名为“Row Group”的数据块中,然后再将其刷新到磁盘。因此通常它需要比面向行的格式更多的内存。尝试增加“spark.executor.memory”或减少“parquet.block.size”,这可能会有所帮助