首先按照CDH官方文档对Impala进行升级,但是升级后有几个小问题需要注意下。

    在shell环境下,输入正常的SQL语句,报错如下

    wKioL1P8ToPhCazjAAIEzrJKiDs385.jpg    从报错信息上可以看出是在读取Hive Metadata过程中出了问题。由于在CDH5中配置了NameNode HA,而老版本CDH4中是单NameNode,所以在新版本中读取的时候,希望读取到新配置的fs.defaultFS属性值,即hdfs://dfs.nameservices,但是在Hive的MetaStore中存储的数据库,表以及表分区的位置还是按照老版本的单NameNode节点来配置的,类似hdfs://h031,这个时候需要手动update下Hive的metastore库下的两张表DBS和SDS,DBS主要存储Hive中的数据库名称和HDFS数据目录等信息,SDS存储Hive表以及表分区的HDFS数据目录和数据格式等信息。命令如下

update DBS SET DB_LOCATION_URI=REPLACE(DB_LOCATION_URI, 'h031', 'mycluster'); 
update SDS SET LOCATION=REPLACE(LOCATION, 'h031', 'mycluster');

    上述语句用dfs.nameservices的值替换掉老的NameNode的HOST信息,替换完成后就可以正常查询数据了。也可以使用Hive自带的工具metatool进行替换

metatool -updateLocation hdfs://nameservice1 hdfs://oldnamenode.com

    如果Hive表采用lzo方式压缩存储,直接查询会报错,如下

    wKiom1P8UEih3WQhAALlenTznDE543.jpg    问题的原因是impala-lzo没有进行升级,这一点在CDH官方文档中并没有进行说明,所以进行升级就可以正常使用了,命令如下

yum update impala-lzo