解决hbase跑mapreduce时遇到内存及超时问题

这两天让PM给烦死了,这边是python跑mapreduce回溯任务,已经做好平台自动化方面,但出点小问题,先前是因为数据做迁移,运行环境又有所不同,所以自动化跑任务出点小问题。 今上午,自动化都解决后,又………..


下面这是跑mapreduce回溯作业时返回的错误,mapreduce如果有一个map任务失败,最后的结果也是无意思的。 所以我们要避免这样的情况发生,我这边是直接在java代码里面调整了timeout参数。  下面的还有个 Error: Java heap space的错误 ,这是内存不够用引起的,默认是800m内存,我调整了好几次,显示1.5G,但还是会报错,现在调整到2G … …

15/08/04 11:41:25 INFO mapreduce.Job: Running job: job_1434436132792_528525
15/08/04 11:41:50 INFO mapreduce.Job: Job job_1434436132792_528525 running in uber mode : false
15/08/04 11:41:50 INFO mapreduce.Job:  map 0% reduce 0%
15/08/04 11:56:48 INFO mapreduce.Job: Task Id : attempt_1434436132792_528525_m_000314_0, Status : FAILED
AttemptID:attempt_1434436132792_528525_m_000314_0 Timed out after 600 secs
15/08/04 12:00:59 INFO mapreduce.Job:  map 1% reduce 0%
15/08/04 12:01:42 INFO mapreduce.Job: Task Id : attempt_1434436132792_528525_m_000371_0, Status : FAILED
Error: Java heap space
15/08/04 12:05:37 INFO mapreduce.Job:  map 2% reduce 0%

关于hbase跑mapreduce问题的文章,原文地址   http://xiaorui.cc/?p=1825

在下面的mapreduce代码中,我增加了timeout超时的时间,以及内存的使用,可以看到我调整到了2000m。 因为hbase属于公共服务,不能调节的太大,这样会影响别的业务的正常运行,尤其那种每天的日报。 

conf.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, 6000000);
conf.setInt("mapred.task.timeout", 1800000);
conf.set("mapred.child.java.opts","-XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:GCTimeRatio=10 -XX:YoungGenerationSizeIncrement=20 -XX:TenuredGenerationSizeIncrement=20 -XX:AdaptiveSizeDecrementScaleFactor=2 -Xmx2000m");

我们再来看看调整超时和内存大小后,最终的结果. 

15/08/04 16:08:58 INFO mapreduce.Job:  map 99% reduce 0%
15/08/04 16:18:20 INFO mapreduce.Job:  map 100% reduce 0%
15/08/04 16:23:15 INFO mapreduce.Job:  map 100% reduce 33%
15/08/04 16:23:18 INFO mapreduce.Job:  map 100% reduce 100%
15/08/04 16:23:19 INFO mapreduce.Job: Job job_1434436132792_529857 completed successfully
15/08/04 16:23:19 INFO mapreduce.Job: Counters: 60
        File System Counters
                FILE: Number of bytes read=5053
                FILE: Number of bytes written=95786204
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=137106
                HDFS: Number of bytes written=4841
                HDFS: Number of read operations=1707
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters
                Launched map tasks=852

对于我这python当来说,java实在是闹腾的东西,每次修改个东西,还要用IDE来调整,好在我们这跑mapreduce的逻辑简单。 


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

2 Responses

  1. 云开发 2015年8月27日 / 下午5:49

    对于数据不严谨的情况,可以把计算好的数据扔到kafka

  2. dcgolang 2015年8月5日 / 上午8:22

    一般不都在配置里面指明内存大小么?

发表评论

邮箱地址不会被公开。 必填项已用*标注