系统层面优化
CPU / 内存隔离:Linux 下通过yarn-site.xml为 HBase MR 任务分配专属资源:
磁盘 IO 优化:MR 临时目录配置到 SSD(mapreduce.cluster.local.dir=/data/ssd/mr_tmp),避免与 HBase 数据目录竞争 IO。
2. HBase 层面优化
Region 预分区:确保 HBase 表的 Region 数与 MR Map Task 数匹配(1 个 Map Task 处理 1 个 Region),避免数据倾斜;
关闭 Region 自动分裂:MR 运行期间禁用 Region 分裂,避免分片变化导致任务失败:
hbase shell> alter 't1', {CONFIGURATION => {'hbase.hregion.enable.split' => 'false'}}
Scanner 优化:
提交MR时添加参数,提升扫描性能
-D hbase.client.scanner.timeout.period=600000 # 扫描超时10分钟
-D hbase.client.scanner.caching=5000 # 每次扫描缓存5000行
3. MR 任务优化
数据本地化:Linux 下确保 HBase Region 与 MR Node 在同一节点(HDFS 数据本地化),通过hbase-site.xml配置:
压缩传输:开启 MR 数据传输压缩,减少网络 IO:
hadoop jar hbase-mr.jar ... -D mapreduce.map.output.compress=true -D mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
小文件合并:MR 输出到 HDFS 后,通过 HBase 的LoadIncrementalHFiles(BulkLoad)批量导入,避免小文件问题:
1. MR输出为HFile格式
hadoop jar hbase-mr.jar ... -D mapreduce.outputformat.class=org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2
2. BulkLoad导入HBase
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/hbase_hfile t1
浙公网安备 33010602011771号