HDFS
dfs.block.size
HDFS中的数据block大小,默认是64M,对于较大集群,可以设置为128或264M dfs.datanode.socket.write.timeout/dfs.socket.timeout
增加dfs.datanode.socket.write.timeout和dfs.socket.timeout两个属性的设置(默认300),比如30000,避免可能出现的IO超时异常 dfs.datanode.max.transfer.threads
增加datanode在进行文件传输时最大线程数(默认4096),比如8192,假设集群中有某台dataode主机的这个值比其他主机的大,那么这台主机上存储的数据相对别的主机比较多,导致数据分布不均匀的问题,即使balance仍然会不均匀 dfs.namenode.handler.count
设定 namenode server threads 的数量,默认是10,对于较大集群,可适当调大,比如64。这些 threads 會用 RPC 跟其他的 datanodes 沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加 dfs.datanode.handler.count
datanode上用于处理RPC的线程数,默认是3,对于较大集群可适当调大,比如8。
YARN
yarn.app.mapreduce.am.resource.mb
ApplicationMaster的container占用的内存大小,可适当调低 mapreduce.map.memory.mb/mapreduce.reduce.memory.mb
作业的每个 Map/Reduce任务分配的物理内存量,参数大于最小容器内存(yarn.scheduler.minimum-allocation-mb),两个参数配置的值设置一样即可
mapreduce.map.java.opts.max.heap/mapreduce.reduce.java.opts.max.heap
每个Map/Reduce的JVM启动所占用的内存,正常此参数小于等于Map/Reduce申请的内存(mapreduce.map.memory.mb/mapreduce.reduce.memory.mb)的85%,因为map任务里不一定只跑java,比如hadoop streaming程序 io.file.buffer.size
SequenceFiles 读取和写入操作的缓存区大小,还有map的输出都用到了这个缓冲区容量, 可减少 I/O 次数。建议设定为 64KB 到 128KB mapreduce.task.io.sort.factor
Reduce Task中合并小文件时,一次合并的文件数据,每次合并的时候选择最小的前N个进行合并,此参数正常与mapreduce.task.io.sort.mb一起配置
mapreduce.task.io.sort.mb
Map Task缓冲区排序文件时要使用的内存缓冲总量,如果mapreduce.task.io.sort.factor设置了较大值,此参数也应相应调大 io.sort.spill.percent
mapreduce.task.io.sort.mb的阈值,默认是80%,当buffer中的数据达到这个阈值,后台线程会起来对buffer中已有的数据进行排序,然后写入磁盘 yarn.nodemanager.resource.memory-mb
NodeManager节点上可使用的物理内存总量,默认是8192(MB),根据节点所能分配的最大的内存进行分配即可(扣除其他服务内存、系统内存等) yarn.scheduler.minimum-allocation-mb
容器可以请求的最小物理内存量,此参数小于等于作业分配的Map\Reduce内存量(mapreduce.map.memory.mb/mapreduce.reduce.memory.mb) yarn.scheduler.increment-allocation-mb
内存规整化单位,为容器申请内存增量,最后内存请求数量将四舍五入为该数字最接近的倍数,比如使用 Fair Scheduler,Container请求资源是1.5GB,容量增量为1G,则将被调度器规整化为ceiling(1.5 GB / 1GB) * 1G ≈ 2GB(公式:(请求资源 / 容量增量)*容量增量 ) yarn.scheduler.maximum-allocation-mb
单个任务可申请的最大物理内存量(默认是8192(MB))。默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死
HBASE
zookeeper.session.timeout
RegionServer与Zookeeper间的连接超时时间,默认180000ms(正常维持这个时间)。当超时时间到后,ReigonServer会被Zookeeper从集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管,修改此参数也应该修改Zookeeper对应最大超时时间(maxSessionTimeout) hbase.hregion.max.filesize
在当前ReigonServer上单个Reigon的最大存储空间,单个Region超过该值时,这个Region会被自动split成更小的region,一般512M以下的都算小region,根据实际情况可设置成5-10G大小
hbase.regionserver.handler.count
增大RegionServer中启动的 RPC服务器实例数量(默认10),比如50,此参数正常与hbase.client.write.buffer一起配置 hbase.client.write.buffer
增大htable客户端写缓冲区大小(默认是2097152),比如5M,缓冲区是为了写数据的临时存放,设置大了,浪费客户端和服务端的存储,设置小了,如果写的数据多,太多的RPC又带来网络开销,官方给的一个服务端存储耗费评估计算是:hbase.client.write.buffer*hbase.regionserver.handler.count,服务端的region server的处理handler个数也很关键 hbase.hregion.memstore.flush.size
当单个memstore达到指定值时,flush该memstore(一台ReigonServer可能有成百上千个memstore),CDH5.2.0默认大小为128M,内存允许情况下,适当调高此参数,可避免过多的flush
hbase.regionserver.global.memstore.upperLimit/lowerLimit
这是一个Heap内存保护参数,默认值已经能适用大多数场景(如非特殊情况,不做修改)。hbase.regionserver.global.memstore.upperLimit的意思是当ReigonServer内所有的memstore所占用的内存总和达到heap的hbase.regionserver.global.memstore.upperLimit大小时,HBase会强制block所有的更新并flush这些memstore以释放所有memstore占用的内存;hbase.regionserver.global.memstore.lowserLimit的意思是当全局memstore的内存达到hbase.regionserver.global.memstore.lowserLimit大小时,它不会flush所有的memstore,它会找一些内存占用较大的 memstore,做个别flush,当然更新还是会被block hfile.block.cache.size
该值直接影响数据读的性能,storefile的读缓存占用Heap的大小百分比。如果读比写少,0.4-0.5,如果读写较均衡,0.3左右。如果写比读多,默认即可。设置这个值的时候,需要参考 hbase.regionserver.global.memstore.upperLimit,如果两值加起来超过80-90%,会有OOM的风险
hbase.hstore.blockingStoreFiles
在compaction时,如果一个Store(Coulmn Family)内有超过base.hstore.blockingStoreFiles个storefile需要合并,则block所有的写请求,进行flush,限制storefile数量增长过快,直到完成压缩或直到超过为 hbase.hstore.blockingWaitTime指定的值。但是block写请求会影响当前region的性能,将值设为单个region可以支撑的最大store file数量会是个不错的选择,即允许comapction时,memstore继续生成storefile。最大storefile数量可通过 hbase.hregion.max.filesize/hbase.hregion.memstore.flush.size来计算 hbase.hstore.blockingWaitTime
达到由hbase.hstore.blockingStoreFiles指定的 HStoreFile 限制后,HRegion 阻止更新的时间段。此时间段过后,HRegion 将停止阻止更新,即使尚未完成压缩,即写请求继续被处理,可适当增大是参数
hbase.client.scanner.caching
scanner一次缓存多少数据来scan(从服务端一次读取多少数据回来scan),内存允许情况下,增大此参数
SOLR
Solr Server 的 Java 堆栈大小
Java 进程堆栈内存的最大大小,传递到Java -Xmx,内存允许情况下,调高此参数 Solr 服务器的 Java 直接内存大小 由Java进程分配的最大堆栈外内存量。传递到 Java -XX:MaxDirectMemorySize。如果未设置,则默认为堆的大小,内存允许情况下,调高此参数 schema.xml优化
1. 将所有只用于搜索的,而不需要作为结果的field(特别是一些比较大的field)的stored设置为false
2. 将不需要被用于搜索的,而只是作为结果返回的field的indexed设置为false
3. 删除所有不必要的copyField声明
4. 使用尽可能高的Log输出等级,减少日志量 solrConfig.xml优化
1. 增大maxBufferedDocs大小,增加服务器接收批量请求数,也可通过增加ramBuffe
rSizeMB大小来增加服务器buffer
ZOOKEEPER
maxClientCnxns
增大此参数,增加最大客户端连接数 maxSessionTimeout
增大此参数,增加最大会话时间
更多精彩请关注:http://bbs.superwu.cn
原文地址:http://crxy2013.blog.51cto.com/9922445/1651319