这篇文章列举了一些常见的问题,以及一些建议来帮助我们解决实际遇到的问题。
1. Dr.Elephant部署在哪里?
Dr.Elephant需要部署在一个有Hadoop平台环境的机器上。Er.Elephant会在集群上运行“hadoop classpath”命令来获得classpaht中所有的配置和jar包。通过这些配置,可以获得对资源管理器和历史任务服务器的连接。Dr.Elephant还会运行“hadoop version”命令来验证hadoop的版本信息以及hadoop包含了java的library path。
如果想在非Hadoop集群机器上安装Dr.Elephant,然后通过远程连接的方式连接到Hadoop也是可行的。请按照以下步骤来安装:
- 拷贝Hadoop集群的所有配置和jar包到要部署的机器上
- 拷贝Hadoop集群上的$HADOOP_HOME/lib/native包中的内容到要部署的机器上
- 编辑elephant.conf文件,为参数jvm_args添加属性-Djava.library.path=$HADOOP_HOME/lib/native
- 编辑start.sh脚本,添加以下内容
- 删除131到143行,特别是包含了命令“hadoop version”的行
- 删除145行的OPTS中的-Djava.library.path=$JAVA_LIB_PATH
- 当用unzip命令解压了需要分发的包之后,按下面的方式修改bin目录中dr-elephant可执行文件
- 从app_classpath删除“hadoop classpath”,然后替换成我们在1,2步中将那些配置文件和jar包拷贝到的目录
2. Specified key was too long; max key length is 767 bytes [ERROR:1071, SQLSTATE:42000]
出现这个ERROR的原因是,1.sql文件中的部分DDL语句有一些问题。超过了默认的索引长度限制。强烈建议修改1.sql文件中的以下内容:
将49-51行替换,原始内容是:
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);
替换后的内容是:
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));
以上的内容不会更新到代码中,因为h2 内存db不支持以上的语法,会导致所有的测试失败。所以以上的改动需要我们手动来完成,首先需要编译源代码,生成需要分发的zip包,解压缩,将上面的修改更新到1.sql文件中。
另一个解决办法是:修改MySQL服务器的my.cnf配置文件,添加innodb_large_prefix=1,然后重启MySQL,这样就可以支持较大索引了。
3. [ERROR] - from play in main
出现这个问题,可能是因为mysql安装有一些问题。为了能更好的debug问题,请把start.sh脚本中的第151行做一个修改。将:
nohup ./bin/dr-elephant ${OPTS} > 2>&1 &
替换为:
nohup ./bin/dr-elephant ${OPTS} > $project_root/dr.log 2>&1 &
4. Database ‘default’ is in an inconsistent state!
出现这个问题,一般是在play的evolution中出现了问题。请尝试以下步骤:
- 停止Dr.Elephant。 确保已经杀死Dr.Elephant进程。ps aux | grep elephant
- 删除原来的数据库,并删除所有表
- 重新创建数据库
- 如果evolution设置为禁止使用,请激活,然后启动Dr.Elephant
$> vim ./app-conf/elephant.conf
jvm_props=" -Devolutionplugin=enabled -DapplyEvolutions.default=true"