zoukankan      html  css  js  c++  java
  • hadoop集群调优-OS和文件系统部分

    OS and File System

    根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%

     

    open file descriptors and files

    文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开,文件描述符这一概念往往只适用于UNIXLinux这样的操作系统。

     

    Linux系列的操作系统上,由于Linux的设计思想便是把一切设备都视作文件。因此,文件描述符为在该系列平台上进行设备相关的编程实际上提供了一个统一的方法。

     

    CentOS中通过下面的命令查看:

    cat /proc/sys/fs/file-max
    800000

     

     

    也可以通过查看文件中的内容来查看,其中的fs.file-max定义了最大的打开文件描述符数量:

    cat /etc/sysctl.conf
     
    fs.file-max = 800000
    net.core.rmem_default = 12697600
    net.core.wmem_default = 12697600
    net.core.rmem_max = 873800000
    net.core.wmem_max = 655360000
    net.ipv4.tcp_rmem = 8192 262144 4096000
    net.ipv4.tcp_wmem = 4096 262144 4096000
    net.ipv4.tcp_max_orphans = 300000
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.ip_local_port_range = 1025 65535
    net.ipv4.tcp_max_syn_backlog = 100000
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp.keepalive_time = 1200
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1500
    net.core.somaxconn=32768
    vm.swappiness=0

     

     

    CentOS下可以通过下面的命令来增加最大打开文件描述符数量,在集群中的每台机器上执行:

    # su – (hdfs & Hadoop users)
    # ulimit –S 4096
    # ulimit –H 32832

     

     

    也可以通过修改/etc/sysctl.conf文件中的fs.file-max来达到目的。

     

    由于这部分的数值远远大于文档中所列出的数字,此部分没有做优化。

     

    File System

    Linux的发行版本对于文件系统有着不同的初始设置。经过测试不同的Linux File Systems,发现EXT4格式要比EXT3更好。EXT4中的新特性,比如多块延迟分配,相比于EXT3要提高很大一部分的性能。在EXT3中,当一个文件被创建或数据被添加到一个已经存在的文件时,会直接调用文件block allocator,每个block一次;而EXT4则不同,它会做一个缓冲,以便以后能够最优化地将数据连续地放入硬盘。连续的文件能够很容易地被机械硬盘读写以能够提高存储IO的整体性能。

     

    默认情况下,Linux会把文件访问的时间atime作记录,这在绝大多数场合下都是没有必要的,尤其是IO负载比较高的Hadoop集群下,可以尝试使用noatimenodiratime

     

    Hadoop中,很多中间文件(比如map输出的中间文件)都只会在Hadoop job运行过程中存活,job执行完成就会被删除了,根本没有必要存在访问时间戳。

     

    通过命令cat /etc/fstab来查看当前的设置:

    UUID=5d75c681-1101-46c2-9428-3e48310765ce                 /                       ext3    defaults        1 1
    LABEL=/boot             /boot                   ext3    defaults        1 2
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    LABEL=SWAP-sda3         swap                    swap    defaults        0 0

     

     

    可以看到当前并没有使用EXT4格式以及noatime

     

    注意,修改完设置后需要重新挂载文件系统,不需要重启。

    mount -o remount /

     

     

    另外一个对于dataNodes的优化点就是通过改变文件系统的保留块大小。Linux文件系统中为了保证root能够登录到操作系统中,需要保留一定的磁盘空间,默认这个值设置为5%。但是当前磁盘空间都是TB级别的,因此保留5%就会造成一大部分空间的浪费,对于1TB来说就是50G

     

    通过下面的命令来列出当前的保留磁盘空间。

    tune2fs –l /dev/sdaX

     

     

    下面的命令可以将保留磁盘空间的容量设置成1%:

    tune2fs –m 1 /dev/sdaX

      

     

     

    Network

    两个网络相关的参数可以影响Hadoop的性能。net.core.somaxconn Linux内核设置能够支持NameNodeJobTracker的大量爆发性的HTTP请求。

     

    net.core.somaxconnlisten()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能,当前已经被调整到32768

     

    这个参数同样可以通过编辑/etc/sysctl.conf文件来改变,其中有一行:

    net.core.somaxconn=32768

     

     

    设置txqueuelen4096及以上能够更好地适应在Hadoop集群中的突发流量, txqueuelen代表用来传输数据的缓冲区的储存长度,通过下面的命令可以对该参数进行设置为4096

    sudo ifconfig eth# txqueuelen 4096

     

     

    其他的一系列在/etc/sysctl.conf中的配置,可以对网络产生影响:

    net.core.rmem_default = 12697600
    net.core.wmem_default = 12697600
    net.core.rmem_max = 873800000
    net.core.wmem_max = 655360000
    net.ipv4.tcp_rmem = 8192 262144 4096000
    net.ipv4.tcp_wmem = 4096 262144 4096000
    net.ipv4.tcp_max_orphans = 300000
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.ip_local_port_range = 1025 65535
    net.ipv4.tcp_max_syn_backlog = 100000
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp.keepalive_time = 1200
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1500

     

      

    上述设置需要重新启动整个集群系统。

     

    Transparent Huge Page

    Linux的特性Transparent HugePages在大部分的应用中都提高了整体性能,包括Hadoop的工作负载。但是,其中的一项被称为Compaction的子特性会导致Hadoop工作负载的问题,在设置了CompactionHadoop benchmark测试中,结果会存在25%的浮动,而关闭Compaction后浮动消失。

     

    当进行内存碎片整理时,Compaction会提高CPU资源利用率,这能够帮助优化Transparent HugePages,但是偷取了CPU资源,却影响了hadoop中正在运行的task性能。

     

    通过以下命令可以查看是否启用compaction

    cat /sys/kernel/mm/redhat_transparent_hugepages/defrag

     

     

    以及以下命令来禁用Compaction

    echo never > /sys/kernel/mm/redhat_transparent_hugepages/defrag

     

     

    这个特定暂时没有进行修改,因为CentOS中没找到在哪儿设置。

     

    Linux kernal swappiness parameter

    任何进程只要涉及到换页向磁盘写文件都会降低hadoop的性能,Linux内核进程vm.swappiness会检查无用的内存分页并将它们交换到磁盘上。默认的值是60,可以设置为0——100。对于Hadoop来说,设置成0是一个好主意,这并没有将这个特性关闭,Linux仍然进行换页操作,但是由于这个进程在仍然还有一大部分空闲内存时仍然会进行换页,将它设置成0可以尽可能地减少内存和磁盘的延迟。

     

    这个参数仍然可以通过编辑/etc/sysctl.conf来进行修改。

     

    当前集群已经设置:

    vm.swappiness=0

     

     

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/mmaa/p/5789929.html
Copyright © 2011-2022 走看看