1. 寻找问题原因
在两个集群上遇到的问题都是catalog启不起来,产生问题的原因是不同的,但是impala-shell中给出的报错信息都是一样的,不能反映具体原因,需要以日志给出的信息为准
/usr/lib/impala
impala的HOME目录
/etc/impala/conf
impala配置目录
/var/log/impala
impala日志目录
2. hive异常
impala对hive和hdfs组件有依赖,需要hive的sql解析和metastore,hdfs文件系统
在92-95集群上出现此问题,因为此前没有在小集群部署hive,在自行部署过程中有一些错误。
catalog报错:
impala catalog failed to start database Unable to open a test connection to the given databas
原因:
部署mysql时创建数据库操作有误,在下面的解决办法中具体分析。
解决办法:
$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';
//mypassword替换为所要设置的密码,metastorehost替换为部署metastore节点的实际ip
...
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';
mysql> GRANT ALL ON metastore.* TO 'hive'@'metastorehost' IDENTIFIED BY 'hive';
//此处的hive即为上文中的mypassword,即实际设置的密码是hive,应在部署文档中写明,或保持上下文一至
//这里所设置的用户名和密码以及metastore,需要和hive配置文件中设置的相同,上面的catalog报错正是由于两者不一致造成的
mysql> GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> ALTER DATABASE metastore CHARACTER SET latin1;
mysql> quit;
mysql报错:
Operation CREATE USER failed for 'hive'@'192.168.20.93'
原因:
创建用户失败,之前的错误操作占用了hive这一用户名,需要删除用户重建
解决办法:
drop user hive;
CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';
报错:
Schema initialization Duplicate entry '1' for key 'PRIMARY' (state=23000,code=1062)
原因:
启动hive必须格式化数据库,主键重复导致格式化失败。
解决办法:
进入MySQL,删掉metastore数据库再重新创建metastore数据库即可。
3. impala异常
在100-105集群上遇到此问题。
这个集群上的hive是之前由别人部署的已经可以使用。
catalog报错:
impala catalog java.lang.NullPointerException
原因:
找不到hive metastore。
metastore部署在101节点,但是hive的配置中,指定了去100和101节点去找metastore,实际运行中程序只会去100中找,因此这样配置会使hive不可用。
之前仅在100上修复了这个问题,但没有同步配置到其他节点,导致hive仅在100上可用,而catalog是部署在101上的(因为hive metastore在101),hive在101上不可用导致问题发生。
解决办法:
同步或修改hive配置即可。
vim /usr/lib/hive/conf/hive-site.xml
修改配置项hive.metastore.uris
,去掉100节点,仅留下metastore节点,即101节点。
修改后如下
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.20.101:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
catalog报错:
ThriftServer 'CatalogService' (on port: 26000) exited due to TException: Could not bind: Transport endpoint is not connected
原因:
端口被占用。
解决办法:
查看端口使用情况
netstat -apn | grep 26000
netstat -apn | grep 23000
确实看到端口被占用了,26000应该是catalog连接statestore的端口,23000应该是impalad连接statestore的端口。
重启impala-catalog,/etc/init.d/impala-catalog restart
,问题依然存在。
停掉所有impala进程(impala-state-store, impala-catalog, impala-server),重新启动,问题解决。