todd的hadoop world的ppt笔记
todd的ppt是本次hadoop world大会上的亮点。之前知道他让hdfs随机读性能提升了2-3倍。具体他们做了哪些改进呢?这里详细记录一下原理。(都是ppt上翻译过来再加上理解的)
IO cache上的改进:1 增加了预读,避免大量随机seek,对mapreduce这样的只读一次数据的应用很有效2 去掉了write在OS层面的cache,因为对map reduce来说这是不必要的3 脏页数据立即刷新。因为mapreduce会产生大量脏页,为避免OS进行脏页刷新时的block而做的改进效果:1 cpu利用率更加平滑 2 磁盘利用率上升
mapreduce中sort的提升:1 cache提升:使用指针的前4个字节进行比较,让cpu可以cache更多的内容2 writableComparator.compareBytes让cpu的利用率不高,换用sun.misc.Unsafe中的类似方法效果:1TB排序的速度快了20-30%
mapreduce中调度的改进1 tt的心跳3秒一次,改成了在小集群中0.3秒一次2 tt的心跳一次只接收一台机器,改成了一次接收多台机器3 对小job进行优化,对每个job结束阶段的心跳进行特殊处理,让小job提前分配效果:小job的最小延迟缩短一倍,每秒能调度的任务提高10倍
hdfs中cpu的改进:原先消耗了30%-50%的cpu时间在checksum上1 将每次对512字节做checksum改为了64k字节2 crc32的校验算法改为了crc32c算法(该sse指令会快出10倍)效果:随机读的响应延迟下降一倍随机读和顺序读的cpu消耗下降1-1.5倍
hdfs随机读每次要新建连接,有过多的tcp握手1 把socket缓存住,类似keepalive2 重写了BlockReader,消除一些数据拷贝3 消除了在FSDataset类上的锁争夺效果:随机读的吞吐量提长了2.5-3倍hbase随机读的tps提升了33%
mapreduce2中shuffle的改进:1 自动修改io.sort.record.percent的值2 reducer在一个tcp连接上获取多个map的输出值3 shuffle的server用netty来重写了效果:shuffle有30%的吞吐量提升