HDFS篇
- dfs.datanode.synconclose = true
在hdfs-site.xml中将dfs.datanode.synconclose设置为false:在硬系统重置或断电时可能会丢失数据
- dfs.datanode.sync.behind.writes = true
默认为false,设置为true,在数据写入完成之后,datanode会要求操作系统将数据直接同步到磁盘
- dfs.namenode.avoid.read.stale.datanode = true (default false)
- dfs.namenode.avoid.write.stale.datanode = true (default false)
避免DataNode写入失效
dfs.datanode.failed.volumes.tolerated = ?
容忍多少个磁盘挂掉以后继续正常运行,默认为0
- dfs.client.read.shortcircuit = true
启用HDFS快速读取
- dfs.datanode.max.transfer.threads = 8192
最大传输线程数,默认为4096
- dfs.namenode.handler.count = ?
NameNode 处理程序计数,默认为30改为60(侦听来自客户端的请求的NamenodeRPC服务器线程的数量。根据机器的可用内存可以调整为 50~100)
- dfs.datanode.handler.count = 6
数据节点的服务器线程数(该属性默认值为 10,是 DataNode 的处理线程数,如果 HDFS 客户端程序读写请求比较多,可以调高到 15~20,设置的值越大,内存消耗越多,不要调整的过高,一般业务中, 5~10 即可。)
HBase篇
- hbase.hstore.blockingStoreFiles = 16
- hbase.hstore.blockingWaitTime = 90
前者为HStore 阻塞存储文件,后者为阻塞的时间(s)
如果storefile的数量超过了10个,就会阻塞flush,compact线程进行合并(如果观察日志,你会看到类似"Too many HFiles, delaying flush"之类的输出),如果想让数据写入更加平滑或者业务写入量巨大,可以考虑增大该值。 另外,在达到了blockingStoreFiles阀值的时候,开始阻塞flush,那么memstore就会膨胀,当memstore膨胀到 flush size 乘于 multiplier(flush size X multiplier)的时候,这个列簇的 写操作就会被阻塞,一直到flush完成(可以关注日志,会有相关日志输出)。 所以如果写入量巨大,建议同时增加multiplier大小,至于flush size的大小,一般默认即可
- hbase.regionserver.handler.count = ?
HBase 客户端写入缓冲
- hbase.regionserver.handler.count = 30
HBase Region Server 处理程序计数
每个regionserver启动的RPC Listener实例个数,hbase.master.handler.count参数意思跟它基本一样。handler个数并非越多越好,如果设置了过多的handler可能得到一个适得其反的结果。如果是read-only的场景,handler的个数接近与cpu个数比较好。在调整该参数时候,建议设置为cpu个数的倍数,从两倍cpu个数开始调整。
hbase.hregion.max.filesize = 10G
HBase 文件最大大小
- hbase.regionserver.thread.compaction.small = 1 (default)
用于minor compact的线程数,当compact quene比较高的时候,建议增加该值。但是需要注意的是:该线程数永远不要超过你可用磁盘数目的一半。 比如:你有8块SSDs, 该值不要超过4