在 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;

我不知道这可能是内存问题。请帮忙

最佳答案

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

关于hadoop - 使用配置单元中的另一个表创建表中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48145325/

10-16 02:52