失败的方案

来源:互联网 发布:手感好的无线鼠标知乎 编辑:程序博客网 时间:2024/05/14 14:45
去年设计了一个MapReduce的单机多线程C++版实现,由于没有充分考虑磁盘读写瓶颈,性能提不上去,宣告失败.
通过这个案例有如下几个方面的思考:
1.MapReduce是集群级别的应用,处理的解决单机无法解决的大文件,海量数据的处理问题.HDFS将文件分块,并将他们分部在不同的节点上,运算的时候多个节点同时进行.数据尽量不通过网络传递,这就是为了避免网络传输影响速度.我的程序是将数据全部集中在本地磁盘,虽然没有通过网络传输导致的读取速率问题,但是由于磁盘读取速率的瓶颈问题,多个线程读取同一个文件的速率没有得到提升.同时由于单机的cpu处理能力限制,不可能多线程就可以利用更多的cpu资源,多线程只是解决了资源竞争的问题,并不能解决资源不足的问题.由此,处理性能无法得到提升.
2.虽然此方案并没有解决处理速率的问题,但是利用MapReduce的分治思想,还是能够处理大文件.由于设计中并不是将所有数据都读入内存之后再处理的,而是一边读取一边写入中间文件,从而可以解决内存开销的问题.在试验中500MB的WordCount试验,在不使用MapReduce方式处理的情况下会出现内存不组,最后导致程序崩溃的异常,但是使用MapReduce确没有遇到这样的情况,并且完成了计算.
原创粉丝点击