- 浏览: 156143 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (113)
- Java工具类 (3)
- Hibernate (1)
- Struts>1&2 (0)
- Spring (0)
- Web前端 (1)
- 数据库 (2)
- 中间件 (3)
- 搜索引擎 (11)
- EJB (1)
- Log日志 (1)
- OS操作系统 (7)
- Java文档 (4)
- Security (1)
- Exception&Error (7)
- 日志&心情 (7)
- 开心一下 (3)
- 云计算 (41)
- Cache缓存 (4)
- MongoDB (1)
- OS操作系统 Linux (7)
- jquery (1)
- 机器学习 (2)
- Plugins (2)
- AJAX (1)
- Java工具 (1)
- WebService (1)
最新评论
-
a420144030:
你好,我想计算n篇文章的相似度,用mahout能处理吗,如何做 ...
mahout使用 -
di1984HIT:
OK,真的很牛啊
hadoop常见错误 -
xwl1991:
还真是这个问题 !
quartz报错java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.ord
转自:http://www.qikan120.com/qydtInfo.asp?ArticleID=78558
摘要:Hadoop技术已经在互联网领域得到广泛的应用,同时也得到了学术界的普遍关注。该文介绍了Hadoop作为基础数据处理平台仍然存在的问题,阐明了Hadoop性能优化技术研究的必然性,并介绍了当前Hadoop优化的三个主要思路:从应用程序角度进行优化、对Hadoop系统参数进行优化和对Hadoop作业调度算法进行优化。Hadoop集群优化对于提高系统性能和执行效率具有重大的意义。
[如何发表论文][摘自:电脑知识与技术 2011年22期]关键词:Hadoop集群;性能优化;配置参数;作业调度
中图分类号:TP14 文献标识码:A文章编号:1009-3044(2011)22-5484-03
Research of Hadoop Performance Tuning Technology
XIN Da-xin, LIU Fei
(Xi'an Technological University, Xi'an 710032, China)
Abstract: Hadoop technology had been wildly used and research around the internet and academics. The article introduce the reminded problems of Hadoop data processing platform and Illustra Configuration parameters imization the hadoop performace to increase the system performace and efficiency.
Key words: Hadoop cluster; performance optimization; configuration parameters; job scheduler
hadoop是隶属于Apache软件基金会(Apache Software Foundation)的开源JAVA项目,它是一个分布式的具有可靠性和可扩展性的存储与计算平台。历经多年发展,Hadoop社区不断扩大,而Hadoop本身也已经演变成为一个拥有众多子项目的项目集合,其中最核心的部分是用于分布式存储HDFS(Hadoop Distributed File System)文件系统和用于分布式计算的MapReduce计算架构,除此以外还有HBase、Hive、Pig和ZooKeeper等。
1 Hadoop数据处理平台存在的问题
随着企业要处理的数据量越来越大,MapReduce思想越来越受到重视。Hadoop是MapReduce的一个开源实现,由于其良好的扩展性和容错性,已得到越来越广泛的应用。Hadoop作为一个基础数据处理平台,虽然其应用价值已得到大家认可,但仍存在很多问题,主要表现在以下几个方面:
1)Namenode/jobtracker单点故障。 Hadoop采用的是master/slaves架构,该架构管理起来比较简单,但存在致命的单点故障和空间容量不足等缺点,这已经严重影响了Hadoop的可扩展性。
2)HDFS小文件问题。在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,每个文件占用一个block,则namenode需要2G空间。如果存储1亿个文件,则namenode需要20G空间。这样namenode内存容量严重制约了集群的扩展。
3)jobtracker同时进行监控和调度,负载过大。为了解决该问题,yahoo已经开始着手设计下一代Hadoop MapReduce。他们的主要思路是将监控和调度分离,独立出一个专门的组件进行监控,而jobtracker只负责总体调度,至于局部调度,交给作业所在的client。
4)数据处理性能。很多实验表明,其处理性能有很大的提升空间。Hadoop类似于数据库,可能需要专门的优化工程师根据实际的应用需要对Hadoop进行调优,有人称之为“Hadoop Performance Optimization” (HPO)。
由于Hadoop平台已经成为了大多数公司的分布式数据处理平台,随着数据规模的越来越大,对集群的压力也越来越大,集群的每个节点负担自然就会加重,而且集群内部的网络带宽有限,数据交换吞吐量也在面临考验,因此也引发了人们对大规模数据处理进行优化的思考。
2 从应用程序角度进行优化
由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。可以从以下7个方面来提高MapReduce的性能:避免不必要的reduce任务、外部文件引入、为Job添加一个Combiner、重用Writable类型、使用StringBuffer而不是String和调试程序跟踪程序的瓶颈。
3 hadoop系统参数优化研究
当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。hadoop系统参数设置优化主要包括三个方面:Linux文件系统参数调整,Hadoop通用参数调整和Hadoop作业调优参数。
3.1 Linux文件系统参数调整
noatime和nodiratime属性,文件挂载时设置这两个属性可以明显提高性能,默认情况下,linux et2/et3文件系统在文件被访问,创建和修改时会记录下文件的时间戳。如果系统运行时要访问大量文件,关闭这些操作可提升文件系统的性能。Readahead buffer参数用以调整linux文件系统中预读缓冲区的大小,可以明显提高顺序读文件的性能。默认buffer为256sectors,可以增大为1024或2408sectors(注意不是越大越好)。避免在TaskTracker和DataNode节点上执行RADI和LVM的操作,这样会降低性能。
3.2 hadoop通用参数调整
dfs.namnode.handler.count或mapred.job.tracker.handler.count是namenode和jobtracker中用于处理RPC的线程数,默认是10,对于较大集群,可适当调大比如64。
dfs.datanode.handler.count是datanode上用于处理RPC的线程数,默认是3,对于较大集群可适当调大比如8。TaskTracker.http.threads是HTTP server上的线程数,运行在每个TaskTracker上,用于处理map task输出,大集群可以设置为40~50。
dfs.block.size,HDFS中的数据block大小,默认是64M,对于较大集群,可以设置为128或264M。mapred.local.dir和dfs.data.dir这两个参数配置的值应当是分布在各个磁盘上的目录,这样可以充分利用IO读写能力。
3.3 hadoop作业调优参数
3.3.1 map task相关配置
io.sort.mb,当map task开始运算并产生中间数据时,其产生的中间结果并非直接写入磁盘,而是利用内存buffer来进行已经产生的部分结果的缓存。当buffer达到一定阈值,会启动一个后台线程对buffer的内容进行排序然后写入本地磁盘(一个spill文件)。默认是100M对于大集群可设置为200M。
io.sort.spill.percent这个值就是上述buffer的阈值,默认是80%,当buffer中的数据达到这个阈值,后台线程会起来对buffer中已有的数据进行排序,然后写入磁盘。
io.sort.factor当一map task执行完之后,本地磁盘上(mapred.local.dir)有若干个spill文件,map task最后做的一件事就是执行merge sort,把这些spill文件合成一个文件(partition)。执行merge sort的时候,每次同时打开多少个spill文件由该参数决定。打开的文件越多,不一定merge sort就越快,所以要根据数据情况适当的调整。
mapred.compress.map.output,是否对中间结果和最终结果进行压缩,如果是,指定压缩方式 ,推荐使用LZO压缩。Inter内部测试表明,相比未压缩,使用LZO的作业运行时间减少60%。
3.3.2 reduce task相关配置
mapred.reduce.parallel.copies表示Reduce shuffle阶段copier线程数。reduce分为三个阶段,分别是copy->sort->reduce。copy即shuffle,当job已完成5%的map tasks数量之后开始启动reduce,从不同的已经完成的map上去下载属于自己这个reduce部分数据,由于map数量很多,对于一个reduce来说,可以并行的从多个map下载。默认值5,对于大集群可调整为16-25。
mapred.job.shuffle.input.buffer.percent(default 0.7),在shuffle阶段下载来的map数据,并不是立刻写入磁盘,而是先缓存在内存中,这个百分比是shuffle在reduce内存中的数据最多使用量为:0.7 × maxHeap of reduce task。
这种基于参数的调优比较“静态”,因为一套参数配置只对于一类作业是最优的。通过对这些参数的研究,可以寻找参数配置与不同作业特征之间的关联。
4 hadoop作业调度算法优化研究
基于集群硬件信息和节点数量的hadoop配置能够很好的提高hadoop集群性能已被大量实验所验证,但是这种方法只是静态地对集群性能做优化,在Job运行时无法动态地修改配置文件并使其加载生效,基于hadoop作业调度算法的优化能很好的解决这个问题。
在hadoop系统中,作业调度组件非常重要,它的作用是将系统中空闲的资源按一定策略分配给作业。在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器。
1)默认的调度器FIFO
最早的Hadoop Map/Reduce计算架构中,JobTracker在进行作业调度时使用的FIFO(First In First Out)算法,所有用户的作业都被提交到一个队列中,然后由JobTracker先按照作业的优先级高低,再按照作业提交时间的先后顺序选择将被执行的作业。其优点是调度算法简单明了,JobTracker工作负担轻。缺点是忽略了不同作业需求差异。例如如果类似对海量数据进行统计分析的作业长期占据计算资源,那么对提交的交互型作业有可能迟迟得不到处理,从而影响用户的体验。
2)计算能力调度器(Capacity Scheduler)
支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。
Capacity Scheduler能有效的对hadoop集群的内存资源进行管理,以支持内存密集型应用。作业对内存资源需求高时,调度算法将把该作业的相关任务分配到内存资源充足的task tracker上。在作业选择过程中,Capacity Scheduler会检查空闲task tracker上的内存资源是否满足作业要求。Task tracker上的空闲资源数量值可以通过task tracker的内存资源总量减去当前已经使用的内存数量得到,而后者包含在task tracker向job tracker发送的周期性心跳信息中。目前,基于内存的调度只能在linux平台下起作用,关于内存调度的相关参数可以通过配置文件来设置。
3)公平份额调度算法(Fair Scheduler)
Fair Scheduler是由Facebook公司提出的,为了解决Facebook要处理生产型作业(数据分析、HIVE)、大型批处理作业(数据挖掘、机器学习)、小型交互型作业(HIVE查询)的问题。同时满足不同用户提交的作业在计算时间、存储空间、数据流量和响应时间上都有不同需求的情况下,使hadoop mapreduce框架能够应对多种类型作业并行执行,使得用户具有良好的体验,所以Facebook提出了该算法。
Fair Scheduler的设计思想是,尽可能保证所有的作业都能够获得等量的资源份额。系统中只有一个作业执行时,它将独占集群所有资源。有其他作业被提交时就会有TaskTracker被释放并分配给新提交的作业,以保证所有的作业都能够获得大体相同的计算资源。
这三种调度算法存在一定的缺陷,目前hadoop集群作业调度算法已近成为是研究的重点之一,例如适用于异构集群的调度器LATE和适用于实时作业的调度器DeadLine Scheduler和Constraint-based Scheduler都提出了新的处理机制。
5 结论
总体来说,对于Hadoop平台,现在主要有三种优化思路,分别为:从应用程序角度角度进行优化,从参数配置角度进行优化,从作业调度算法角度进行优化。对于第一种思路,需要根据具体应用需求而定,同时也需要在长期实践中积累和总结;对于第二种思路,大部分采用的方法是根据自己集群硬件和具体应用调整参数,找到一个最优的。对于第三种思路,难度较大,但效果往往非常明显。
[www.qIkan120.com]参考文献:
[1] Zaharia M,Borthakur D,Sarma J S,et,al.Job scheduling for multi-user mapreduce clusters[C].EECS Department,University of California,Berkeley,Tech.Rep,Apr 2009.
[2] Tian C,Zhou H,He Y.A dynamic mapreduce scheduler for heterogeneous workloads[C]//Proceedings of the 2009 Eighth International Conference on Grid and Cooperative Computing,ser.GCC'09. Washington, DC, USA:IEEE Computer Society,2009:218-224.
[3] http://developer.yahoo.com/blogs/hadoop/posts/2011/02/mapreduce-nextgen/.
[4] Xuhui Liu,Jizhong Han.Implementing WebGIS on Hadoop:A case study of improving small file I/O performance on HDFS[Z].CLUSTER,2009:1-8.
发表评论
-
用Sqoop把数据从HDFS导入到MYSQL
2012-10-27 23:30 2361转自:http://www.kaifajie.cn/mySQL ... -
大数据的储存:百度HDFS集群的数据压缩
2012-08-30 17:48 12202012年4月13日,由IT168(ITP ... -
用sqoop进行mysql和hdfs系统间的数据互导
2012-07-31 16:32 1956转自:http://abloz.com/2012/07/19/ ... -
从hive将数据导出到mysql
2012-07-31 16:31 1834转自:http://abloz.com/2012/07/20/ ... -
Hive SQL
2012-07-19 13:49 1433转自:http://www.tbdata.org/ ... -
Hive优化总结
2012-07-09 15:18 4346优化时,把hive sql当做ma ... -
hadoop/mapred 优化方法
2012-06-12 11:47 1401从三个方面着手优化 : 1. hadoop配置 2. ... -
hadoop集群dfs.data.dir目录权限问题导致节点无法启动
2012-06-11 18:32 6236安装使用Hive的时候发现文件无法从本地拷贝到hadoo ... -
hadoop中的balancer
2012-06-11 15:49 1155对于HDFS集群,经常长时间的运行,尤其是大量的delete操 ... -
Hadoop集群上使用Lzo压缩
2012-05-28 11:03 941转自:http://www.tech126.com/hadoo ... -
使用Hive读取Hbase中的数据
2012-05-23 13:12 2280转自:http://www.4ucode.com/Study/ ... -
在XP系统下配置eclipse集成hadoop开发
2012-05-05 11:09 1056一、目的:由于hadoop只能在Linux环境下运行,所以对于 ... -
使用Hive读取Hbase中的数据
2012-04-18 14:24 1107转自:http://www.4ucode.com/Study/ ... -
Web日志分析方法概述 让复杂的数据挖掘变得简单可行
2012-04-13 16:31 882志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志 ... -
应用sqoop将MySQL数据库中的数据导入Hbase
2012-04-12 11:31 2073转自:http://www.bwxxkj.com/a/jish ... -
hadoop中的trash机制,恢复删除的文件
2012-03-31 13:46 2207Hadoop回收站trash,默认是关闭的。 1.修改con ... -
Hadoop 和DBMS 的互补性
2012-03-29 12:22 681随着Microsoft 也加入Hadoop 阵营,Hadoop ... -
Hadoop 中的两表join
2012-03-29 12:20 857转自:http://www.gemini52013 ... -
各版本编译hadoop eclipse plugin
2012-03-29 12:19 1391转自:http://www.gemini52013 ... -
hadoop常见错误
2012-03-24 13:04 1676错误1:bin/hadoop dfs 不能正常启动,持续提 ...
相关推荐
【Hadoop集群性能优化技术研究】 Hadoop是一个由Apache软件基金会开发的开源Java项目,它构建了一个分布式、可靠且可扩展的存储和计算平台。Hadoop的核心组成部分包括用于分布式存储的HDFS(Hadoop Distributed ...
### 大数据时代:高性能Hadoop集群与应用案例 #### 一、Hadoop概述与重要性 随着信息技术的快速发展,数据量呈爆炸性增长趋势,这不仅为数据分析带来了前所未有的机遇,同时也对数据处理能力提出了更高要求。...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。本压缩包文件包含了一系列关于Hadoop集群部署、...通过深入研究这些材料,你将能够构建和管理高效的Hadoop集群,解决实际业务中的大数据挑战。
同时,根据实际需求和硬件资源,可能需要对 Hadoop 参数进行微调,如增加 DataNode 的内存分配、调整副本数量等,以优化集群性能。 三、Hadoop 集群的扩展与维护随着业务增长,Hadoop 集群可能需要扩展,包括增加 ...
随着信息技术的飞速发展,数据挖掘技术已成为从海量...通过对算法的优化以及对Hadoop集群性能的充分挖掘,能够在大数据环境下实现更高效、更准确的推荐服务。这对于提升用户体验、增强企业的竞争力具有重要的现实意义。
【基于CentOS 7的Hadoop集群配置的研究与实现】 Hadoop是一个开源的分布式计算框架,主要用于处理和存储大规模数据。本论文详细探讨了在CentOS 7操作系统上配置和实施Hadoop集群的过程,这对于理解和掌握大数据处理...
通过对多个Hadoop集群进行实证研究,结果表明,引入策略感知层后,Hadoop框架能够自动优化参数设置,有效提升了作业运行效率和资源利用率。特别是在处理大规模数据集时,自动调优机制使得集群能够在保持高性能的同时...
总之,Hadoop Namenode的性能优化是一个复杂而持续的过程,需要从多个角度出发进行全面的分析与改进。通过上述方法和技术的应用,可以有效提升NameNode的性能,从而支持更大规模的数据处理需求。
### 基于Hadoop集群的分布式日志分析系统研究 #### Hadoop在分布式日志分析中的应用 随着互联网的飞速发展,Web2.0网站、电子商务平台以及大型网络游戏产生了前所未有的海量数据,其中系统运行日志是关键的数据源...
优化Hadoop集群涉及硬件配置、网络性能、内存分配等多个方面。例如,调整DataNode之间的网络带宽,优化MapReduce的Task数量,以及合理设置YARN的内存和CPU资源分配等,都能显著提升Hadoop集群的处理效率。 七、...
【基于Hadoop集群下海量小文件存储的研究与优化】 在当今大数据时代,如何高效地存储和处理海量数据已经成为一个至关重要的课题。Hadoop作为一种开源的分布式计算框架,因其优秀的并行处理能力,广泛应用于大数据...
6. **开发流程**:开发此类平台通常包括以下步骤:需求分析,设计数据库模型,编写Django应用,配置Hadoop集群,实现数据导入和处理逻辑,部署和测试系统,以及性能优化。 7. **安全性与扩展性**:在使用Django时,...
1. **HDFS优化**:为了适应视频流服务,Hadoop集群需要进行特定的配置优化,如调整数据块大小以适应视频文件的特性,设置合适的副本数量以保证可用性和冗余。 2. **负载均衡**:视频流服务需要确保所有节点的负载...
随着大数据计算需求的日益增长,如何有效地存储和处理这些巨量数据,成为了技术研究和工业实践中的重大课题。传统的大数据存储系统存在着诸多挑战,比如难以实现存储服务器负载的有效均衡,系统稳定性差,存储效率...