作者:empty 出版社:empty |
第一章Hadoop参数调优
Hadoop参数调优主要是core-site.xml、hadoop-env.sh、hdfs-site.xml、mapred-site.xml四个文件:core-site.xml为Hadoop的核心属性文件,参数为Hadoop的核心功能,独立于HDFS与MapReduce,其他三个文件皆为hadoop参数文件,hadoop-env.sh主要是完成各进程的内存划分以及部分环境设置,hdfs-site.xml主要是对HDFS的端口、目录、以及HDFS跟namenode的通信设置(小的集群一般不用考虑)等的设置,mapred-site.xml主要对map与red和JobTracker的设置。Hadoop有190多个参数但一般用到的不足一半,这里常用的一些参数设置作出调整:
一、hadoop-env.sh修改TaskTracker与+DataNode的内存分配
根据官方建议设置TaskTracker与+DataNode的内存大小由原来的1G设置为2G
[hadoop@MASmaster01 hadoop-config]$ vi hadoop-env.sh
# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE=2048
二、core-site.xml
1、放大hadoop读写hdfs的缓存大小
hadoop读hdfs的文件和写hdfs的文件,还有map的输出都用到了这个缓冲区容量,对于现在的硬件很保守,可以设置为128k(131072)也不是越大越好设置过大会造成map跟red的溢出
[hadoop@MASmaster01 hadoop-config]$ vi core-site.xml
property>
name>io.file.buffer.size /name>
value>131027 /value>
/property>
2、开启hadoop的垃圾回收功能
默认情况下垃圾回收是关闭的,为了避免误删数据丢失,开启垃圾回收机制
这里保留一天
property>
name>fs.trash.interval /name>
value>1440 /value>
/property>
三、mapred-site.xml
1、map和red的进程数设置
对hadoop的参数修改主要是对map和red的进程数由原来默认的2分别设置为6 增加了运算速度
property>
name>mapred.tasktracker.map.tasks.maximum /name>
value>6 /value>
/property>
property>
name>mapred.tasktracker.reduce.tasks.maximum /name>
value>6 /value>
/property>
内存使用(map+reduce)Xmapred.child.java.opts+TaskTracker.mapred.child.java.opts
2、Tasks进程内存分配
mapred.child.java.opts
默认值200m
启动task管理的子进程时的内存设置(默认为-Xmx200m偏小)这跟4中的map与red的个数这是也有关系这里设置为512m
property>
name>mapred.child.java.opts /name>
value>-Xmx512m /value>
/property>
3、MapTask
当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘。这中间的过程比较复杂,并且利用到了内存buffer来进行已经产生的部分结果的缓存,并在内存buffer中进行一些预排序来优化整个map的性能。如上图所示,每一个map都会对应存在一个内存 buffer(MapOutputBuffer,即上图的buffer in memory),map会将已经产生的部分结果先写入到该buffer中,这个buffer默认是100MB大小,但是这个大小是可以根据job提交时的参数设定来调整的,该参数即为:io.sort.mb。当map的产生数据非常大时,并且把io.sort.mb调大,那么map在整个计算过程中spill的次数就势必会降低,map task对磁盘的操作就会变少,如果map tasks的瓶颈在磁盘上,这样调整就会大大提高map的计算性能
property>
name>io.sort.mb /name>
value>300 /value>
/property>
io.sort.factor。该参数默认为10。它表示当merge spill文件时,最多能有多少并行的stream向merge文件中写入。比如如果map产生的数据非常的大,产生的spill文件大于10,而 io.sort.factor使用的是默认的10,那么当map计算完成做merge时,就没有办法一次将所有的spill文件merge成一个,而是会分多次,每次最多10个stream。这也就是说,当map的中间结果非常大,调大io.sort.factor,有利于减少merge次数,进而减少 map对磁盘的读写频率,有可能达到优化作业的目的。
property>
name>io.sort.factor /name>
value>25 /value>
/property>
4、ReduceTask
reduce的运行是分成三个阶段的。分别为copy->sort->reduce。由于job的每一个map都会根据 reduce(n)数将数据分成map 输出结果分成n个partition,所以map的中间结果中是有可能包含每一个reduce需要处理的部分数据的。所以,为了优化reduce的执行时间,hadoop中是等job的第一个map结束后,所有的reduce就开始尝试从完成的map中下载该reduce对应的partition部分数据。这个过程就是通常所说的shuffle,也就是copy过程。Reduce task在做shuffle时,实际上就是从不同的已经完成的map上去下载属于自己这个reduce的部分数据,由于map通常有许多个,所以对一个reduce来说,下载也可以是并行的从多个map下载,这个并行度是可以调整的,调整参数为:mapred.reduce.parallel.copies(default 5)。默认情况下,每个只会有5个并行的下载线程在从map下数据,如果一个时间段内job完成的map有100个或者更多,那么reduce也最多只能同时下载5个map的数据,所以这个参数比较适合map很多并且完成的比较快的job的情况下调大
property>
name>mapred.reduce.parallel.copies /name>
value>20 /value>
/property>
四、Hdfs-site.xml设置
1、datanode
datanode上用于处理RPC的线程数。默认为3根据集群大小可适当增加线程
property>
name>dfs.datanode.handler.count /name>
value>20 /value>
/property>
2、namenod
namenode用于处理RPC的线程数。默认为3根据集群大小可适当增加线程
name>dfs.namenode.handler.count /name>
value>20 /value>
/property>
3、block.size
因为元数据空间是有限的这里为了减少namenode元数据存储空间现将数据块大小设置为128M
property>
name>dfs.block.size /name>
value>134217728 /value>
/property>
第二章Hbase优化
Hbase参数调整主要对hbase-env.sh、hbase-site.xml两个文件配置,前一个文件主要是环境设置,hbase-site.xml包含regionservers和zookeeper的参数设置,这里也只对部分参数调整
一、hbase-env.sh
hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它,这里将其设置为4G
[hadoop@MASmaster01 hbase-config]$ vi hbase-env.sh
# The maximum amount of heap to use, in MB. Default is 1000.
export HBASE_HEAPSIZE=4096
二、hbase-site.xml
为了便于管理zookeeper需要将其文件长时间保存默认是/tmp内现指定为/home/hadoop/hbase
property>
name>hbase.tmp.dir /name>
value>/home/hadoop/hbase /value>
/property>
1、读/写控制
hfile.block.cache.size该值根据实际读写使用情况调整目前为0.2主要是根据数据库的用途设置
2、增大RPC数量
增大RPC数量通过修改 hbase.regionserver.handler.count属性,可以适当的放大。默认值为10有点小
property>
name>hbase.regionserver.handler.count /name>
value>30 /value>
/property>
第三章待测
一、在JVM中加入CRC32 Intrinsic加速CRC校验(最大速度15G/S)
二、平均算法调度
结果
由于虚拟机不定时迁移性能有些不稳定,目前马鞍山环境测试速度比公司实体机稍快点点
[hadoop@MASmaster01hbase-config]$hbase org.apache.hadoop.hbase.PerformanceEvaluation sequentialWrite 1
12/10/31 18:30:04 INFO hbase.PerformanceEvaluation: Finished class org.apache.hadoop.hbase.PerformanceEvaluation$SequentialWriteTest in 115386ms at offset 0 for 1048576 rows(61环境)
12/10/31 11:33:09 INFO hbase.PerformanceEvaluation: Finished class org.apache.hadoop.hbase.PerformanceEvaluation$SequentialWriteTest in 76328ms at offset 0 for 1048576 rows(马鞍山环境)
empty
empty