Impala问题实录
一、报错:
File 'hdfs://nameservice1/user/hive/warehouse/dm/dm_sup_manager_duibi/tp=zonghe1/000000_0' has an invalid version number: �ϫ&
This could be due to stale metadata. Try running "refresh dm.dm_sup_manager_duibi".
报错hive元数据过时,需要更新元数据
更新元数据的使用
invalidate metadata 会加载相关表的所有元数据信息,这个操作对于有很多分区的大表成本非常高,refresh加载元数据更快,因为它只要加载新增的数据文件块的位置数据
如果数仓中发生了增删表或改变表结构的行为,如create table、drop table、alter table add column等,就使用invalidate metadata [table]语句。
如果数仓中某表加入了新数据,或者有分区的改动,如load data、alter table add partition等,就使用refresh [table] (partition [partition])语句。
invalidate metadata比起refresh而言要重量级得多,并且它造成impalad之间查询不一致也会更严重。因此,也几乎禁止使用 不带表名的invalidate metadata语句。
如果数仓中涉及到非常大批量的元数据更改,那么建议直接重启catalogd和statestored,这总比使用不带表名的invalidate metadata来得高效一些。
impala刷新元数据方法
1.hue使用Perform incremental metadata update,不要用Invalidate all metadata and rebuild index,如果是invalidate metadata什么都不加,宁愿重新启动catalogd。
2.如果涉及到表的schema改变,使用invalidate metadata [table]
3.如果只是涉及到表的数据改变,使用refresh [table]。
4.如果只是涉及到表的某一个分区数据改变,使用refresh [table] partition [partition]。
5.invalidate metadata操作比refresh要重量级。
错误解决参考
错误1
路径权限问题
Error connecting: TTransportException, Could not connect to master:21000
在日志文件/var/log/impala中查看impalad.ERROR,错误如下
ERROR: short-circuit local reads is disabled because
- dfs.domain.socket.path is not configured.
- dfs.client.read.shortcircuit is not enabled.
解决方法
找到对应参数的下的值,查看该路径是否存在,impala用户是否有权限进行读写
错误2
invalidate metadata 更新元数据出错
错误代码
Query: invalidate metadata
ERROR: Couldn't open transport for hdname:26000 (connect() failed: Connection refused)
查看日志信息,有如下错误,无法读取datanode上的数据块信息
I0507 10:03:36.218281 21562 BlockStorageLocationUtil.java:177] Failed to query block locations on datanode 192.168.73.16:50020: org.apache.hadoop.ipc.RemoteException(java.lang.UnsupportedOperationException): Datanode#getHdfsBlocksMetadata is not enabled in datanode config
at org.apache.hadoop.hdfs.server.datanode.DataNode.getHdfsBlocksMetadata(DataNode.java:1547)
解决方法
注意:这里使用的端口说是26000,事实上在整个配置过程中没有任何的端口设置为26000,同时出现这种错误是在登录终端并且成功连接之后出现,也就是说这跟元数据相关
解决方法:
/etc/default/impala 中的配置项IMPALA_CATALOG_ARGS,需要增加参数 -state_store_host=${IMPALA_STATE_STORE_HOST}
结果如下
该参数告诉了catalog去哪个host找元数据,事实上在state-store的配置中也有重新设置state_store_host参数