impala版本:1.1.1
hive:0.10.0-cdh4.4.0
hadoop:hadoop-2.0.0-cdh4.2.2
数据存储在hadoop的HDFS,文件格式是RCFile,用impala创建external table方式关联文件。一直都正常运行,但因为数据量太大,业务应用访问太慢,需要将table分区,但没想分区太多。出现了异常,异常内容如下:
ERROR: AnalysisException: Failed to load metadata for table: my_table CAUSED BY: TableLoadingException: TableLoadingException: Failed to load metadata for table: my_table CAUSED BY: TTransportException: java.net.SocketTimeoutException: Read timed out CAUSED BY: SocketTimeoutException: Read timed out
或者
AnalysisException:Failed to load metadata for table:my_table
CAUSED BY:TableLoadingException:Failed to load metadata for table:my_table
CAUSED BY: TTransportExeption: null
查找原因,发现impala与hive都不能正常读取metadata信息。但进程仍正常。只好kill掉进程再重启
1)ps -ef|grep metastore
2)返回hive进程pid,执行kill -9 pid
3)./hive --service metastore
4)service impala-server stop
5)service impala-server start
6)impala-shell -r
可以获取到metadata数据,看到表信息
但是仍然不能访问my_table
查询hive的log,在/tmp/root/hive.log目录下(可以在hive-site.xml中修改路径)
发现报java.lang.OutOfMemoryError:GC overhead limit exceed
修改hive/conf/hive-env.sh,将export HADOOP_HEAPSIZE=** 改大,并重启hive就可以了。(据说也可以升级impala到1.2.4版本解决)
如果进入impala-shell,访问某些表时仍有如下错误:
ERROR: TApplicationException:get_table failed:out of sequence response
执行:invalidate metadata my_table;
再执行你的sql语句应该就可以了。