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:
<property>
        <name>mapred.tasktracker.map.tasks.maximum</name>
        <value>12</value>
        <final>true</final>
    </property>
    <property>
        <name>mapred.tasktracker.reduce.tasks.maximum</name>
        <value>4</value>
        <final>true</final>
    </property>
    <property>
        <name>mapred.map.child.java.opts</name>
        <value>-Xmx1224M</value>
    </property>
    <property>
        <name>mapred.reduce.child.java.opts</name>
        <value>-Xmx2048M</value>
    </property>
对于map槽位的内存占用,我的理解是这样,内存总数/CPU核数/4,上下可以浮动几百兆。
对于reduce槽位是内存总数/cpu核数/2。
然后简单说下调度器的问题,hadoop默认的调度器是FIFO,就是先入先出,通常来说,这就比较够用了。但是如果集群规模较小,计算任务又比较多,还需要细分不同任务的槽位分配,就还是配置其他的调度器比较好。
常用的有两种第三方调度器,yahoo开发的Capacity Scheduler和Facebook贡献的Fair Scheduler。翻译过来叫计算能力调度器和公平调度器,可能大家听公平调度器听的比较多,不过目前我们公司主要是用计算能力调度器。
因为配置的XML太长,我就不贴了,需要了解计算能力调度器的配置方法,可以访问我的同事老赵的技术博客。
http://blog.csdn.net/azhao_dn/article/details/7070327
在我们的应用场景里,计算能力被分为了3类,每个分类的map/reudce槽位数是不同的,根据统计平时的计算量来固定分配的槽位数。default,rush,和hive,其中普通的streaming的计算方式放入default的分类中执行,日志清洗和入库单独使用rush分类,hive,顾名思义,就是给hive数据库单独使用的。这个分配的map/reduce是最多的。平时定时任务的70%左右都是用hive跑的,临时数据查询95%依赖hive。
这样做的好处是计算任务的计算能力被隔离,互不干扰。可根据业务需求进行分类。避免任务抢占造成的资源大量消耗。

转载于:https://blog.51cto.com/slaytanic/823321

FreeBSD下安装配置Hadoop集群(性能调优)相关推荐

  1. FreeBSD下安装配置Hadoop集群(三)

    先给自己做个广告: 开源Hive管理工具phpHiveAdmin今日更新0.05 beta2 ChangeLog: 1. sql查询页全部重写,复杂查询现在可以用异步非阻塞的方式实时的查看map/re ...

  2. FreeBSD下安装配置Hadoop集群(一)

    Hadoop其实本身是Linux下开发的应用,不过得益于虚拟机技术,也可以运行在其他平台.例如FreeBSD. 不过,Linux用的好好的,为什么用FreeBSD呢? 这个问题的回答其实比较复杂,基于 ...

  3. FreeBSD下安装配置Hadoop集群(四)

    前面说过了NameNode,DataNode的配置方法,这次说Secondary的配置方法.hadoop为实现高可用,支持配置失效备份的Namenode,这样当主的Namenode挂掉了之后,可以从S ...

  4. [ hadoop ] 集群性能调优全面总结

    [ hadoop ] 集群性能调优全面总结_bone_ds的博客-CSDN博客_hadoop集群优化 引子 文章涵盖了hadoop框架的三个组成架构各自的优化方法,涉及存储,计算,故障排除等多个方面的 ...

  5. 千亿级数据量kafka集群性能调优实战总结

    1.(千亿级kafka集群性能调优)集群信息 一个kafka集群,40台broker,基于Ambari,hdp管理(ambari_v2.5,hdp_v2.6) 10台broker配置5块3T盘 30台 ...

  6. Linux中安装配置hadoop集群

    原文:http://www.cnblogs.com/lijingchn/p/5574476.html 一. 简介 参考了网上许多教程,最终把hadoop在ubuntu14.04中安装配置成功.下面就把 ...

  7. CentOS7下安装配置zookeeper集群及设置开机自启

    1.在做zookeeper集群之前需要有至少三台centos机器或虚拟机 一.Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程 ...

  8. 3.5.CentOS7下安装配置Zookeeper集群与一键启动小脚本

    python编程快速上手(持续更新中-) 推荐系统基础 文章目录 python编程快速上手(持续更新中-) 推荐系统基础 一.事前准备 1.VMware下CentOS7虚拟机(三台) 2.Zookee ...

  9. linux环境下快速配置hadoop集群免密登录

    背景 在hadoop的日常使用过程中经常需要登录某些机器,如何更好的免密登录呢?这将为我们节省大量的时间 操作 假设你需要在A机器上免密登录B机器,那么你首先要确定B机器下是有秘钥文件的.如何确定是否 ...

最新文章

  1. GIS项目中数据开源、工具开源、开发开源的解决方案
  2. guava中的Joiner
  3. linux 命令:ls命令
  4. Sublime Text 的快捷方式的用法
  5. [MySQL基础]MySQL常见命令介绍
  6. QuartZ.net 常用配置说明
  7. python星号*在函数中、传参时的含义
  8. c语言课后答案谢延红,C语言程序设计基础第4,5章 课后习题答案
  9. android播放视频来源库,一个强悍而优美的Android视频播放器
  10. Mac添加中国法定节假日安排
  11. 你知道战国四大名将都有谁吗
  12. invalid byte sequence for encoding utf8 0xcb 0xef
  13. html显示svg图片,HTML5/CSS3系列教程:使用SVG图片
  14. python 二维列表_python二维列表
  15. 软件开发人员如何自我学习?
  16. 2020-8-15词汇
  17. MATLAB scatter 画二维/三维散点图时 用颜色表示数值大小 colorbar
  18. 更改app图标和名称
  19. GAMS系列分享14——综合能源系统——CHP机组运行区域
  20. MySQL数据表字段类型有哪些

热门文章

  1. mysql 以数组的形式插入更新表
  2. Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系
  3. Axis2 POJO实现WebService(一)发布
  4. 提高网站首页载入速度的常用方法
  5. 「产品规划」的那些事儿
  6. PMCAFF微课堂 | 奇酷运营总监类类教你如何利用金字塔模型提高用户忠诚度
  7. 趣说API HTTP 状态码的使用
  8. notepad++添加插件管理器
  9. Maven使用详解视频课程——笔记(一)
  10. 现代化自定制 - 页面上的自定制