`
zhangxiong0301
  • 浏览: 357057 次
社区版块
存档分类
最新评论

HADOOP OS部分优化

 
阅读更多

open file descriptors and files

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

 

在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集群下,可以尝试使用noatime和nodiratime。

 

在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内核设置能够支持NameNode和JobTracker的大量爆发性的HTTP请求。

 

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

 

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

net.core.somaxconn=32768

或者:echo 2048 >   /proc/sys/net/core/somaxconn    但是这样系统重启后保存不了。 

 

设置txqueuelen到4096及以上能够更好地适应在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工作负载的问题,在设置了Compaction的Hadoop 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来进行修改。

 

 也可以如下:echo 0 > /proc/sys/vm/swappiness

 

当前集群已经设置:

vm.swappiness=0
分享到:
评论

相关推荐

    mac 下hadoop3.0.2编译的native库

    Hadoop是一个分布式文件系统,它依赖于特定的本地库来实现性能优化和与操作系统更深入的交互。当Hadoop在非默认配置下运行,特别是在Mac OS这样的Unix-like系统上,可能会遇到因缺少本地库而导致的错误。 **Hadoop ...

    Hadoop源码编译.pdf

    在IT行业中,对开源软件的理解和使用经常需要深入到源码层面,Hadoop作为大数据处理领域的重要组件...熟练掌握源码编译不仅有助于理解Hadoop的工作原理,还可以根据需要自定义修改和优化Hadoop,以适应特定的业务场景。

    Hadoop实战手册—实验需要的材料

    5. **Chap 5:Hadoop MapReduce实战** - 通过具体的案例,如WordCount,读者可以掌握MapReduce程序的开发和调试技巧,并了解如何优化MapReduce作业的性能。 6. **Chap 6:Hadoop高级特性** - 本章涵盖了Hadoop的...

    Hadoop Beginner's Guide 书里面的例子源码

    其核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,这两个部分构成了大数据处理的基础架构。 1. HDFS:分布式文件系统 HDFS是一种高度容错性的文件系统,设计用于运行在廉价硬件上。它将大文件...

    Hadoop FAQ--浙江大学数学系方建勇.doc

    Hadoop 主要由两个部分组成:HDFS(Hadoop Distributed File System)和 MapReduce。 - **HDFS**:用于存储数据。 - **MapReduce**:用于处理数据。 #### 2. Hadoop 运行于哪些平台? Hadoop 支持多种操作系统和 ...

    hadoop:Apache Hadoop

    在Hadoop的核心组件中,有两个至关重要的部分:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS是一种分布式文件系统,它将大型文件分割成多个块,并在集群的不同节点上存储这些块的副本,以提高容错性和...

    HADOOP监控GANGLIA安装文档.docx

    在Hadoop集群中,有效地监控系统资源至关重要,...完成以上步骤后,你将拥有一个能够监控Hadoop集群性能的Ganglia系统,能够实时显示CPU使用率、I/O操作和MapReduce任务的带宽使用情况,有助于优化集群性能和故障排查。

    Hadoop2.X/YARN环境搭建--CentOS7.0系统配置

    谷歌的MapReduce编程模型是Hadoop的灵感来源,它将大规模数据处理任务拆分成可并行执行的部分,适合在大量计算节点上处理海量数据。 选择CentOS7.0作为Hadoop2.X/YARN环境的搭建平台有以下几个主要原因: 1. **...

    分布式os的课件

    命名服务是分布式系统中重要的组成部分,它提供了一种机制,使用户能通过易记的名字访问分布式资源。命名服务需要解决的问题包括命名空间管理、名称解析、名称冲突等。例如,DNS(域名系统)就是一种常见的命名服务...

    os.zip_answers

    操作系统(OS)是计算机系统的核心组成部分,它管理硬件资源,提供软件接口,使得用户和应用程序能够与硬件交互。"os.zip_answers"中的内容可能包含了关于操作系统的重要问题和解答,而"os.doc"文档很可能是这些内容...

    技术特点和应用分析PPT教案.pptx

    和Amazon等公司,它们利用Hadoop处理PB级别的用户行为数据,优化服务并提升业务效率。 总的来说,Hadoop及其HDFS技术是应对大数据挑战的重要解决方案,它们提供了一种经济高效、可扩展且容错性强的方式来管理和分析...

    大数据Oozie架构原理.pdf

    Oozie 需要 Unix box(测试于 Mac OS X 和 Linux)、Java JDK 1.6+、Maven 3.0.1+、Hadoop 0.20.2+、Pig 0.7+ 等环境要求。FusionInsight C50 安装完成后默认满足以上要求。 Oozie 的版本说明包括 4.0.1、4.1.0 等...

    拥抱开源,打造极致性能与体验的操作系统.pdf

    Deepin Technology作为中国首个具备国际影响力的Linux发行版,其Deepin OS已经在用户体验和性能优化上取得了显著成果。自2008年以来,Deepin OS不断迭代,致力于为用户提供极致的使用体验,包括流畅的操作界面、高效...

    计算机导论复习题选择部分剖析.rar

    3. 操作系统:操作系统是管理和控制计算机硬件及软件资源的程序,如Windows、Linux、Mac OS等。它提供用户界面,管理进程、内存分配、文件系统,并实现硬件抽象化。 4. 计算机语言:从机器语言、汇编语言到高级语言...

    Pentaho for Big Data Analytics(2013)

    2. **2159OS_03_Code**: 这部分代码可能涉及数据分析和可视化。Pentaho Business Analytics 提供了丰富的报表和仪表板功能,使得非技术人员也能理解复杂的数据。读者会学到如何设计交互式报表,创建图表,并利用数据...

    xfire整理资料部分

    作为一个游戏社区平台,XFire可能包含了好友系统、群组、论坛等功能,这些都是社交网络的基本组成部分,需要理解数据库设计、安全性、用户体验优化等多方面知识。 6. **跨平台开发**: 为了覆盖更多的用户,XFire...

    os211:操作系统2021-1

    9. **分布式操作系统**:随着云计算和分布式计算的发展,这部分可能会涵盖分布式系统的基本概念,如分布式文件系统(如Hadoop HDFS)、分布式进程通信以及分布式计算模型。 10. **实验与实践**:课程可能包含实际...

    华为云鲲鹏开发工程师技能图谱1

    大数据领域,如Hadoop、Hive、HBase和Spark的处理也是重要的知识点,开发者需要了解如何在鲲鹏平台上优化这些大数据处理框架。 最后,图谱还包括了鲲鹏社区、鲲鹏应用市场和联合运营伙伴等内容,这些都是开发者获取...

    JAVA2024最新资料整理,付费资源,良心推荐,别忘点个赞

    "OS文件系统"这部分可能会介绍操作系统的基本概念,如进程管理、内存管理、文件系统,以及与Java交互的方式,如I/O流的使用。 "云原生"是近年来的热门话题,它涵盖了容器化、持续集成/持续部署(CI/CD)、DevOps...

    高级操作系统(分布式系统)

    5. **分布式文件系统**:如Hadoop HDFS,提供跨多台机器的大规模数据存储和处理能力。 在“课程资源”中,可能包含有更详细的讲解,如分布式系统的模型、通信协议、一致性算法等内容,这些都是理解高级操作系统和...

Global site tag (gtag.js) - Google Analytics