一、HBase部分
1-1、hbase.regionserver.handler.count
该配置参数用于定义regionserver上用于等待响应用户表级请求的线程数,通常的配置规则是:
- 当每次请求的数据量较大时(如接近MB的单次put,cache较大的scan操作),设小一些;
- 当每次请求负载较小时,则可把该值配置较大。同时在请求的数据量大小收到参数。
- 如果单个请求的数据量很大,并且将该值配置的很大时,put并发量很高时,会给内存造成很大压力,甚至有可能触发内存溢出。
- 正在进行的查询的总大小受设置hbase.ipc.server.max.callqueue.size限制
可以通过查看rpc.logging(regionserver打开DEBUG日志级别),根据在排队的线程数量消耗的内存大小来判断hbase.regionserver.handler.count配置是否过大或者过小。
暂时更改为256
1-2、压缩
TODO
1-3、分裂
重要的设置包括hbase.regionserver.region.split.policy,hbase.hregion.max.filesize,hbase.regionserver.regionSplitLimit。分裂的简单观点是,当一个区域增长到时hbase.hregion.max.filesize,它就会分裂。对于大多数使用模式,您应该使用自动拆分。有关手动区域拆分的详细信息,请参阅手动区域拆分决策。
您可以选择自行管理拆分,而不是让HBase自动拆分您的区域。如果你很清楚你的键空间,手动管理分割是有效的
1-4、hbase.regionserver.optionallogflushinterval
HLog 条目的同步间隔:
如尚未累计到触发同步的 HLog 条目的指定数量,则在此间隔后使 HLog 同步到 HDFS (以秒为单位)
默认1s,暂时修改为5s
1-5、hbase.hregion.memstore.flush.size
HBase Memstore 刷新大小
如 memstore 大小超过此值,Memstore 将刷新到磁盘。通过运行由 hbase.server.thread.wakefrequency 指定的频率的线程检查此值。
默认128MB,根据机器性能调整
暂不做修改
1-6、hbase.hstore.blockingStoreFiles
HStore 阻塞存储文件
如在任意 HStore 中有超过此数量的 HStoreFiles,则会阻止对此 HRegion 的更新,直到完成压缩或直到超过为 ‘hbase.hstore.blockingWaitTime’ 指定的值。
默认16,暂时修改为32
1-7、hbase.rest.threads.min/max
HBase REST Server 最小/大线程数
HBase REST Server 线程池的最小大小。该服务器始终在池中保留至少此数量的线程。线程池可以增长到 hbase.rest.threads.max 设置的最大大小。
HBase REST Server 线程池的最大大小。该服务器可以处理此数量的并发请求。将此值设置过高的值会导致内存不足错误。
默认为2/100,暂时修改为10/200
1-8、hbase.client.write.buffer
HBase 客户端写入缓冲
写入缓冲区大小。较大缓冲区需要客户端和服务器中有较大内存,因为服务器将实例化已通过的写入缓冲区并进行处理,这会降低远程过程调用 (RPC) 的数量。为了估计服务器已使用内存的数量,请用值“hbase.client.write.buffer”乘以“hbase.regionserver.handler.count”。
默认为2MB,暂时修改为100MB
二、HDFS部分
2-1、dfs.datanode.handler.count
DataNode 服务器线程数
默认3,暂时修改为50
2-2、dfs.namenode.handler.count
NameNode 的服务器线程的数量。
默认30,暂时修改为150
2-3、dfs.datanode.balance.bandwidthPerSec
每个 DataNode 可用于平衡的最大带宽
默认10MB,暂时修改为100MB
2-4、dfs.datanode.max.transfer.threads
指定在 DataNode 内外传输数据使用的最大线程数
默认4096,暂时修改为16384
2-5、dfs.namenode.service.handler.coun
NameNode 用于服务调用的服务器线程数量。仅用于已配置 NameNode Service RPC Port 时
默认30,暂时修改为60
2-6、dfs.datanode.readahead.bytes
提前读取的字节数
启用shuffle readahead来改善MapReduce shuffle处理程序的性能;
读取块文件时,DataNode 可以使用 posix_fadvise 系统呼叫将数据显式放入操作系统缓冲区缓存中当前读取器位置之前。这样可以提高性能,尤其是在磁盘高度占用的情况下。该配置指定 DataNode 尝试提前读取的位置比当前读取位置提前的字节数。值为 0 时禁用此功能。CDH3u3 或之后的部署中支持此属性。
默认4MB,暂时修改为20MB
修改完以上值后,测试发现,性能竟然没有任何提升,运行io 测试工具(写5个150MB的文件):
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.0-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 150
结果为:
猜测以上修改对local模式作用不大??
三、Spark部分
3-1、driver-memory
参数说明:
该参数用于设置Driver进程
的内存。
参数调优建议:
Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需