- HDFS优化
- DataNode打开最大文件数配置
操作场景
一个HDFS Datanode同时打开的文件数量是有上限的,该上限是通过参数dfs.datanode.max.transfer.threads设置的,默认值为4096。根据集群的数据量和操作相应调高此值。
操作步骤
参数入口:在Ambari系统中,选择“服务 > HDFS > 配置”,通过过滤框搜索相应的参数配置,按照。(此配置在hdfs-site.xml中)
配置参数 | 说明 | 缺省值 | 建议值 |
dfs.datanode.max.transfer.threads | 指定一个DataNode用于传输进出数据的最大线程数。 | 4096 | ≥4096 |
-
- dfs.datanode.failed.volumes
这个参数描述的意思是:“当定义数量的volumes失败或出现故障时,DataNode节点会停止工作。默认情况是0表明任何一个volumes失败DataNode都会停止工作”。
操作步骤
参数入口:在Ambari系统中,选择“服务 > HDFS > 配置”,通过过滤框搜索相应的参数配置。
配置参数 | 说明 | 缺省值 | 建议值 |
dfs.datanode.failed.volumes | 当DataNode节点上定义数量的磁盘失败或出现故障时,该DataNode节点停止工作 | 0 | 3 |
注意:在线上环境中fs.datanode.data.dir配置为多块盘,所以dfs.datanode.failed.volumes.tolerated设置为1或者小于总盘数,是允许有几块盘是坏的。而测试环境只有一块盘,这volFailuresTolerated和volsConfigured的值都为1或者其它非零就会进入安全模式,启动失败。
-
- 提升读写性能
操作场景
在HDFS中,通过调整属性的值,使得HDFS集群更适应自身的业务情况,从而提升HDFS的读写性能。
操作步骤
参数入口:在Ambari系统中,选择“服务 > HDFS > 配置”,通过过滤框搜索相应的参数配置。
表格 1 HDFS读写性能优化配置
配置参数 | 说明 | 缺省值 | 范围 |
dfs.blocksize | 表示新建文件的默认块大小。单位:字节。指定大小或者指定具体字节大小(例如134217728,表示128MB)。 最优值:268435456(256MB) 说明: 参数值必须为512的倍数,否则向HDFS写入文件时会出现错误。 | 134217728(128MB) | 512-1073741824 |
- HBase优化
- Zookeeper连接优化
操作场景
对于一些Online应用,RegionServer从宕机到恢复时间本身就很短的(网络闪断,crash等故障,运维可快速介入),如果调低timeout时间,反而会得不偿失。因为当ReigonServer被正式从RS集群中移除时,HMaster就开始做balance了(让其他RS根据故障机器记录的WAL日志进行恢复)。当故障的RS在人工介入恢复后,这个balance动作是毫无意义的,反而会使负载不均匀,给RS带来更多负担。特别是那些固定分配regions的场景。
操作步骤
参数入口:在Ambari系统中,选择“服务 > HBase > 配置”,通过过滤框搜索相应的参数配置。
配置参数 | 说明 | 缺省值 | 建议值 |
zookeeper.session.timeout | RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管. 说明: 参数值必须为512的倍数,否则向HDFS写入文件时会出现错误。 | 1分钟30秒(90000ms) | 180000或更高 |
-
- RegionServer的请求处理IO线程数
操作场景
较少的IO线程,适用于处理单次请求内存消耗较高的Big PUT场景(大容量单次PUT或设置了较大cache的scan,均属于Big PUT)或ReigonServer的内存比较紧张的场景。较多的IO线程,适用于单次请求内存消耗低,TPS要求非常高的场景。设置该值的时候,以监控内存为主要参考。这里需要注意的是如果server的region数量很少,大量的请求都落在一个region上,因快速充满memstore触发flush导致的读写锁会影响全局TPS,不是IO线程数越高越好。
操作步骤
在Ambari系统中,选择“服务 > HBase > 配置”,通过过滤框搜索相应的参数配置,修改后按照提示重启相应服务组件。
配置参数 | 说明 | 缺省值 | 参考值 |
hbase.regionserver.handler.count | RegionServer的请求处理IO线程数 | 30 | 100 |
-
- 提升BulkLoad效率
操作场景
批量加载功能采用了MapReduce作业直接生成符合HBase内部数据格式的文件,然后把生成的StoreFiles文件加载到正在运行的群集。使用批量加载会比直接使用HBase的API节约更多的CPU和网络资源。
ImportTSV是一个HBase的索引表数据加载工具。
前提条件
在执行批量加载时需要指定文件的输出路径:Dimporttsv.bulk.output。
操作步骤
参数入口:执行批量加载任务时,在BulkLoad命令行中加入如下参数。
配置参数 | 描述 | 默认值 |
-Dimporttsv.mapper.class | 新的自定义mapper通过把键值队的构造从mapper移动到reducer以帮助提高性能。mapper只需要把每一行的原始文本发送给reducer,reducer解析每一行的每一条记录并创建键值对 | org.apache.hadoop.hbase.index.mapreduce.IndexTsvImporterTextMapper |
-
- HBase添加大文件调整(*)
操作场景
增大KeyValue实例的最大大小,这是存储文件中一个entry的容量上限,能源搜索必须配置
操作步骤
在Ambari系统中,选择“服务 > HBase > 配置”,通过过滤框搜索相应的参数配置,修改后按照提示重启相应服务组件。
配置参数 | 说明 | 缺省值 | 参考值 |
hbase.client.keyvalue.maxsize | 一个KeyValue实例的最大大小,这是存储文件中一个entry的容量上限 | 1048576 | 104857600 |
4.5如图添加值
export HBASE_THRIFT_OPTS="-Xmx2g -Xms2g -Xmn1024m"