如何在HBase上剖析map reduce作业

时间:2013-12-10 20:15:04

标签: hadoop mapreduce hbase

我有一个在HBase表上运行的map reduce作业。它在应用一些扫描过滤器后扫描Hbase表并进行一些处理。

这项工作需要很长时间,绝对远远超过预期,并且感觉性能恶化是指数级的(即,前90%的完成速度比其余的快得多,并且在大约98%之后(映射器完成),似乎在电影开始时就像陷入困境一样陷入永恒的困境。

从高层开始,应该没有理由说这种性能不均匀,因为扫描中的每一行都应该表现得相似,下游服务应该在HBase表的每一行都有类似的SLA。

如何调试和分析此作业?是否有可用的工具可以帮助我测量系统并查明行为不当的组件?

1 个答案:

答案 0 :(得分:1)

有几种方法可以监控和调试这样的工作。

第一个是查看RegionServers,Datanodes和TaskTrackers的日志,并尝试查找任何错误消息。 JobTracker还将包含每个任务的性能细分,您可以查看是否有任何任务失败或被杀死的消息以及原因。这是最容易开始的最简单的地方

根据我的经验,使用HBase缓慢的MapReduce作业表明您所在地区的密钥分布不均匀。对于TableInputFormats,默认拆分是每个区域的映射器,如果您的某个区域包含您正在访问的行数不均匀,或者特定RegionServer有多个区域被多个映射器读取,则可能导致计算机速度降低,因为磁盘争用或网络io。

为了调试RegionServers,您可以查看JProfiler中提到的HBase Wiki作为他们使用的分析器。我从来没有使用它,但它确实有一个针对HBase的探测器。通过uptimetop的标准CPU负载和来自iostat指标的IO等待也可以让您识别哪些机器正在减慢速度。

如果您不想运行分析工具,您可以监视RegionServer WebUI并查看是否有大量排队的RPC请求,或者如果它们需要很长时间,则可以轻松实现可解析的JSON格式。这样您就可以查明作业正在处理的特定区域的减速情况。

网络IO也可能是一个促成因素。如果您正在运行与HBase集群分开的MapReduce集群,则必须将所有数据发送到TaskTrackers,这样可能会使您的网络饱和。可以使用标准的网络监控工具。

另一个问题可能只是扫描仪本身,根据我的经验,打开缓存块通常会损害MR作业期间的性能。这是因为高级别的缓存流失,因为您通常只在MR作业期间读取一次行。此外,连接到扫描仪的过滤器应用于服务器端,因此如果您正在进行复杂的过滤,可能会导致更长的延迟。