在首次启动Dr.Elephant时,因为配置不当或者环境因素可能会导致启动失败。当启动失败后,我们可以从Dr.Elephant的日志文件(默认的启动日志是dr.log)中查看启动过程日志,找到Error和Exception,定位问题所在。
下面,是我总结的自己以及大家在启动过程中遇到的一些问题,如果大家也遇到了这些问题,希望可以帮助到你们。
问题一
问题描述
日志中记录ERROR:“Specified key was too long; max key length is 767 bytes [ERROR:1071, SQLSTATE:42000]”, “Database 'default' is in an inconsistent state!”
解决办法
以上两个提示如果都出现,那么原因是:在Dr.Elephant往MySQL的表中创索引时,索引过长导致的,关于这个问题的详细描述,可以查看我的另一篇文章“MySQL索引长度受限怎么办?”。这个问题在Dr.Elephant刚开源时出现的,以后的版本中可能会修复这个问题。问题的原因是:Dr.Elephant的建表语句有一些问题,例如在Dr.Elephant源码文件1.sql中有如下的创建索引语句:
create index yarn_app_result_i4 on yarn_app_result (flow_exec_id);
create index yarn_app_result_i5 on yarn_app_result (job_def_id);
create index yarn_app_result_i6 on yarn_app_result (flow_def_id);
列flow_exec_id、job_def_id和flow_def_id的类型是VARCHAR(800),在这三个列上各自建索引是,索引长度都是3*800=2400,远超过了MySQL对单列索引长度的限制767,所以抛出异常导致启动失败。大家可以查看https://github.com/linkedin/dr-elephant/issues/31 中我和LinkedIn大神akshayrai关于这个问题的沟通,可以了解的更详细一些以及解决办法。具体解决办法是将上面的三个SQL语句修改为:
create index yarn_app_result_i4 on yarn_app_result (flow_exec_id(100));
create index yarn_app_result_i5 on yarn_app_result (job_def_id(100));
create index yarn_app_result_i6 on yarn_app_result (flow_def_id(100));
限制每个索引的长度。就不会再抛出异常了。
还有一点需要注意,如果没有提示“Specified key was too long; max key length is 767 bytes [ERROR:1071, SQLSTATE:42000]”, 而只有“Database 'default' is in an inconsistent state!”。这个时候,很可能是DB的状态确实有问题。比如,可能忘记了创建使用到的数据库,可能数据库连接突然中断等等。需要我们详细的验证数据库的问题。
问题二
问题描述
Dr.Elephant启动正常,但是无法收集到任务数据。具体表现为,hadoop平台已经运行过很多任务,Dr.Elephant正常启动后,通过浏览器访问host+port可以打开Dr.Elephant UI页面,但是没有任何任务信息。数据库中表也是空的。
解决办法
- 确保编译配置文件compile.conf中Hadoop平台版本号和工作中的Hadoop版本号一致
- 确保Hadoop平台的配置文件目录、内容无误