首先按照CDH官方文檔對Impala進行升級,但是升級後有幾個小問題需要注意下。
在shell環境下,輸入正常的SQL語句,報錯如下
從報錯信息上可以看出是在讀取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方式壓縮存儲,直接查詢會報錯,如下
問題的原因是impala-lzo沒有進行升級,這一點在CDH官方文檔中並沒有進行說明,所以進行升級就可以正常使用了,命令如下
yum update impala-lzo