Hadoop平台优化综述二.docx[16]主要针对HDFS进行了优化,它分析了HDFS性能低下的两个原因:调度延迟和可移植性假设。调度延迟Hadoop采用的是动态调度算法,即:当某个tasktracker上出现空slot时,它会通过HEARBEAT(默认时间间隔为3s,当集群变大时,会适当调大)告诉jobtracker,之后jobtracker采用某种调度策略从待选task中选择一个,再通过HEARBEAT告诉tasktrackero从整个过程看,HDFS在获取下一个taskZ前,一直处于等待状态,这造成了资源利用率不高。此外,由于tasktracker获取新task后,其数据读取过程是完全串行化的,即:tasktracker获取task后,依次连接namenode,连接datanode并读取数据,处理数据。在此过程中,当tasktracker连接namenode和datanode时,HDFS仍在处于等待状态。为了解决调度延迟问题,可以考虑的解决方案有:重叠I/O和CPU阶段(pipelining),task预取(taskprefetching),数据预取(dataprefetching)等可移植性假设为了增加Hadoop的可移植性,它采用java语言编写,这实际上也潜在的造成了HDFS低效。Java尽管可以让Hadoop的可移植性增强,但是它屏蔽了底层文件系统,这使它没法利用一些底层的API对数据存储和读写进行优化。首先,在共享集群环境下,大量并发读写会增加随机寻道,这大大降低读写效率;另外,并发写会增加磁盘碎片,这将增加读取代价(HDFS适合文件顺序读取)O为了解决该问题,可以考虑的解决方案有:修改tasktrackcr±的线程模型,hreadperclient,即每个client连接由一个线程处理(包括接受请求,处理请求,返回结果);修改之后,可将线程分成两组,一组用于处理client通信(ClientThread),一组用于存取数据(DiskThreads,hreadperdisk)[7]提出了两种优化策略,分别为Prefetching和preshuff1ingoPreFetchingpreFetching包括Block-intraprefetching和Block-interprefetching:Block-intraPrcfctching对block内部数据处理方式进行优化。采用的策略是以双向处理(bi-directionalprocessing)方式提升效率,即一端进行计算,一端预取将要用到的数据(同步机制)。需解决两个问题,一是计算和预取同步。借用进度条(processingbar)的概念,进度条监控两端的进度,当同步将被打破时,调用一个信号。二是确定合适的预取率。通过实验发现,预取数据量并不是越多越好。采用重复实验的方法确定预取数据率。Block-interPrefetching在block层面预取数据。当某个task正在处理数据块A1时,预测器预测它接下来要处理的数据块,假设是A2,A3,A4,则将这几个数据块读到task所在的rack上,这样加快了task接下来数据读取速度。PreShuff1ing数据被maptas
Hadoop平台优化综述二 来自淘豆网m.daumloan.com转载请标明出处.