- HBase 高级操作
预分区(Pre-splitting)
避免初始数据热点,用 HexStringSplit 或自定义算法:
bash
hbase org.apache.hadoop.hbase.util.RegionSplitter test_table
HexStringSplit -c 10 -f cf1
生成 10 个 Region,起始键 00000000 → ffffffff 均匀分布。
BulkLoad 导入
绕开 WAL 与 MemStore,直接生成 HFile:
bash
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
-Dimporttsv.columns=HBASE_ROW_KEY,cf1:val
-Dimporttsv.bulk.output=/tmp/hfiles
test_table /user/data.tsv
随后 completebulkload 将 HFile 移交 RegionServer,速率比 Put 高 5–10×。
Filter 组合实战
需求:扫描最近 1 小时内、列 cf1:status=200 且行键前缀 uid_123 的数据。
Java 代码:
java
FilterList fl = new FilterList(MUST_PASS_ALL);
fl.addFilter(new PrefixFilter(Bytes.toBytes("uid_123")));
fl.addFilter(new SingleColumnValueFilter(cf, status, EQUAL, Bytes.toBytes("200")));
fl.addFilter(new TimestampsFilter(Collections.singletonList(
System.currentTimeMillis() - 3600_000)));
scan.setFilter(fl);
注意:TimestampsFilter 只影响返回版本,不减少磁盘扫描;需搭配行键设计把时间放高位才能剪枝。
2. VM 嵌套虚拟化
KVM in VMware
物理机 → VMware Workstation 17 → Ubuntu 22.04 → 再启 KVM 虚拟机。
关键勾选:
处理器设置 → 虚拟化引擎 → Virtualize Intel VT-x/EPT
固件类型 → UEFI(若需 KVM 的 Secure Boot 测试)
性能验证
在第二层 VM 内执行:
bash
egrep -c '(vmx|svm)' /proc/cpuinfo # 输出 ≥1 即成功透传
sudo kvm-ok # 显示 "KVM acceleration can be used"
用 stress-ng 压测:
宿主机 8C16G,第一层 VM 给 4C8G,第二层 KVM 给 2C4G,CPU 损耗约 8%,内存额外开销 3%(EPT 页表)。
快照脚本化
定时备份嵌套环境,PowerShell 批量执行:
powershell
$vms = Get-VM | Where-Object {$_.Name -like "kvm-*"}
foreach ($vm in $vms) {
$snap = "$($vm.Name)-$(Get-Date -Format HHmm)"
New-Snapshot -VM $vm -Name $snap -Quiescent:$true
# 保留最近 3 个快照
Get-Snapshot -VM $vm | Sort-Object -Property Created -Descending |
Select-Object -Skip 3 | Remove-Snapshot -Confirm:$false
}
计划任务每小时一次,磁盘占用 ≈ 增量 2–3 GB/次。