报错日志:java.lang.OutOfMemoryError: GC overhead limit exceeded或者java.lang.OutOfMemoryError: Java heap space
。
解决方法:调大Container的内存
set spark.executor.memory=4g;
报错日志:
22/11/28 08:24:43 ERROR Executor: Exception in task 1.0 in stage 0.0 (TID 0)
java.lang.OutOfMemoryError: GC overhead limit exceeded
at org.apache.hadoop.hive.ql.exec.GroupByOperator.updateAggregations(GroupByOperator.java:611)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processHashAggr(GroupByOperator.java:813)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processKey(GroupByOperator.java:719)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.process(GroupByOperator.java:787)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:897)
at org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:95)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:897)
at org.apache.hadoop.hive.ql.exec.TableScanOperator.process(TableScanOperator.java:130)
at org.apache.hadoop.hive.ql.exec.MapOperator$MapOpCtx.forward(MapOperator.java:148)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:547)
原因分析:GroupBy的HashTable占用太多内存导致OOM。
解决方法:
mapreduce.input.fileinputformat.split.maxsize=134217728
或 mapreduce.input.fileinputformat.split.maxsize=67108864
。spark.executor.instances
增加并发数。spark.executor.memory
增大 spark executor 内存。报错日志:
FAILED: Execution ERROR, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timeout
原因分析:作业异常的可能原因是表分区太多,Drop耗时较长,导致Hive Metastore client网络超时。
解决方法:
hive.metastore.client.socket.timeout=1200s
alter table [TableName] DROP IF EXISTS PARTITION (ds<='20220720')
原因分析:select count(1)使用的是Hive表统计信息(statistics),但这张表的统计信息不准确。
解决方法:修改配置不使用统计信息。
hive.compute.query.using.stats=false
或者使用analyze命令重新统计表统计信息。
analyze table <table_name> compute statistics;
异常现象:
解决方法:
set hive.optimize.skewjoin=true;
spark.executor.instances
增加并发数。spark.executor.memory
增大 spark executor 内存。问题描述:创建完外部表后查询没有数据返回。
外部表创建语句示例如下。
CREATE EXTERNAL TABLE storage_log(content STRING) PARTITIONED BY (ds STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 'hdfs:///your-logs/airtake/pro/storage';
查询没有数据返回。
select * from storage_log;
问题分析:Hive不会自动关联指定Partitions目录。
解决方法:
需要您手动指定Partitions目录。
alter table storage_log add partition(ds=123);
查询返回数据。
select * from storage_log;
返回如下数据。
OK
abcd 123
efgh 123