FreeBSD下安装配置Hadoop集群(性能调优)

Hadoop的性能调优是个比较艰难的事情,由于这个系统的整个环境比较复杂,对于接触时间不长的人来说,配置都很难,更别说找出性能优化的点了。


性能优化涉及的方面很广,操作系统,网络配置,配置文件,调度器等等,抓出几点来说,但不敢说这几点就是别人所遇到的性能瓶颈,抛砖引玉而已。应用场景不同,优化配置肯定是各不相同的。


对于操作系统和网络环境的调优,这个需要讲的东西就太多了,无法在一篇文章里赘述。集中于几个关键词:sysctl,ulimit,hosts文件,内网配置。


尽量把hadoop集群配置在内网地址上,这就不用多说了吧。


下面主要探讨hadoop的配置文件和调度器的选择和开发。


以我公司的hadoop集群举例来说,主要是用了数据压缩和索引和对调度器策略的优化。


使用压缩是一个不错的选择,比如我们自己的集群用的是LZO的压缩方式,压缩比大概是原始数据的1/3,也就是说,1G的原始日志大概能压缩成300Mb左右,一方面压缩比不错,另一方面,读取速度也很不错,配合的是Native的lzo库。一个叫hadoop-gpl的东西。前一阵子泰国水灾,硬盘难买,以压缩的方式也可以多撑一阵子。


如果给lzo建立索引,效果就更好了


当然你需要先安装hadoopgpl。

core-site.xml

<property>
                <name>io.compression.codecs</name>
                <value>org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache
.hadoop.io.compress.BZip2Codec</value>
        </property>
        <property>
                <name>io.compression.codec.lzo.class</name>
                <value>com.hadoop.compression.lzo.LzoCodec</value>
        </property>


mapred-site.xml

<property>
                <name>mapred.compress.map.output</name>
                <value>true</value>
        </property>
        <property>
                <name>mapred.map.output.compression.codec</name>
                <value>com.hadoop.compression.lzo.LzoCodec</value>
        </property>
        <property>
                <name>mapred.child.Java.opts</name>
                <value>-Djava.library.path=/opt/hadoopgpl/native/Linux-amd64-64</value>
        </property>


当然每台服务器都需要定义这个才可以。


还有一个很重要的优化是槽位的设置和调度器的选择,这个直接关系到hadoop的计算能力。相同硬件情况下,配置好的集群的在计算相同任务的情况下,要比配置糟糕的集群快几倍乃至几十倍。


对于map/reduce槽位的配置还有job对java虚拟机的配置,我目前总结的规律大概是这样,namenode的槽位总数相加和等于CPU数量,同时map槽位数大概是reduce槽位的3倍,也就是这样,如果你有一个8核的服务器,map数量就应该是6,reduce数量是2。对于datanode,我们需要他的计算能力强一些,就把map和reduce槽位总和设置成cpu数量的2倍,同时map数是reduce数量的3倍,同样是8核的datanode,map数就是12,reduce数就是4。对于内存的使用,还是拿配置文件举例说明吧。


mapred-site on namenode:

<property>
        <name>mapred.tasktracker.map.tasks.maximum</name>
        <value>6</value>
        <final>true</final>
    </property>
    <property>
        <name>mapred.tasktracker.reduce.tasks.maximum</name>
        <value>2</value>
        <final>true</final>
    </property>
    <property>
        <name>mapred.child.java.opts</name>
        <value>-Xmx1536M</value>
    </property>


mapred-site on datanode:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/dfe8d9ba7736aeef0d7ea40fc2096f55.html