用eagle对集群的所有hive任务进行监控上线不久就下线了,在集群任务过多过密的情况下出现了很多问题,应该是0.4版本eagle本身的问题。
1、之前文章中提到过的hostname的问题
2、eagle会把运行任务的id记录到zookeeper上,每一个job创建一个节点挂在根节点下。因为集群任务数量过大,造成节点数太多,zookeeper的节点的子节点数超过限额之后会直接报错,任务也就直接失败。且对zookeeper造成的压力过大,如果直接打到hadoop或者kafka集群的zookeeper上回对集群造成很大影响。
3、集群中很多任务是通过shell脚本来执行的,执行语句大多为hive –e 执行sql,在sql中会添加中文注释。当这个sql运行完后,sql语句会以string的形式保存到jobhistory上。eagle无法识别其中的中文,所以无法对sql进行解析导致报错。
4、eagle解析sql是通过jobhistory上任务的配置文件信息中的”hive.query.String”项来得到sql语句。集群中有不少任务在运行sql时执行了use database语句,运行完毕到jobhistory上后,配置信息中的该项只有use database这个语句,导致eagle无法解析sql从而报错。真正的sql在 “mapreduce.workflow.name”项中可以得到。
5、eagle首先都是通过resourcemanager的reset api去拿到任务信息,这个方式得到的任务信息在job运行完毕后一段时间后会删除,所以当eagle去尝试拿这个信息的时候就会返回错误。从目前日志信息看,eagle监控程序会去读取一段时间之前的job并非只读取正在运行的job,产生这个错误。