当前位置: 代码迷 >> 综合 >> FAQ 常见问题 -【Dr.Elephant系列文章-8】
  详细解决方案

FAQ 常见问题 -【Dr.Elephant系列文章-8】

热度:65   发布时间:2023-12-07 22:48:58.0

这篇文章列举了一些常见的问题,以及一些建议来帮助我们解决实际遇到的问题。

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也是可行的。请按照以下步骤来安装:

  1. 拷贝Hadoop集群的所有配置和jar包到要部署的机器上
  2. 拷贝Hadoop集群上的$HADOOP_HOME/lib/native包中的内容到要部署的机器上
  3. 编辑elephant.conf文件,为参数jvm_args添加属性-Djava.library.path=$HADOOP_HOME/lib/native
  4. 编辑start.sh脚本,添加以下内容
  5. 删除131到143行,特别是包含了命令“hadoop version”的行
  6. 删除145行的OPTS中的-Djava.library.path=$JAVA_LIB_PATH
  7. 当用unzip命令解压了需要分发的包之后,按下面的方式修改bin目录中dr-elephant可执行文件
  8. 从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中出现了问题。请尝试以下步骤:

  1. 停止Dr.Elephant。 确保已经杀死Dr.Elephant进程。ps aux | grep elephant
  2. 删除原来的数据库,并删除所有表
  3. 重新创建数据库
  4. 如果evolution设置为禁止使用,请激活,然后启动Dr.Elephant

$> vim ./app-conf/elephant.conf

jvm_props=" -Devolutionplugin=enabled -DapplyEvolutions.default=true"


作者简介:屈世超,对高并发系统设计开发感兴趣,现专注于大数据开发工作。曾任职小米科技公司服务端后台开发工程师,现担任EverString数据平台组高级开发工程师。

  相关解决方案