Linux 下 HBase+MapReduce 核心操作
- 读取 HBase 表的 MR 任务(经典场景:数据统计)
(1)开发与编译(Linux)
编写 MR 程序(Java),核心代码示例(统计指定列族数据量):
// 设置输入为HBase表
Configuration conf = HBaseConfiguration.create();
Job job = Job.getInstance(conf, "HBaseMRCount");
job.setJarByClass(HBaseMRCount.class);
// 指定输入格式为TableInputFormat
job.setInputFormatClass(TableInputFormat.class);
Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("cf1")); // 仅扫描cf1列族
TableMapReduceUtil.initTableMapperJob(
"t1", // 输入HBase表名
scan, // 扫描规则
CountMapper.class, // Mapper类
Text.class, // Mapper输出Key类型
LongWritable.class, // Mapper输出Value类型
job
);
// 设置Reducer和输出
job.setReducerClass(CountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
// 输出到HDFS(也可输出到HBase)
FileOutputFormat.setOutputPath(job, new Path("/tmp/hbase_mr_count"));
Linux 下编译打包(需引入 HBase/Hadoop 依赖):
bash
javac -cp $(hbase classpath)😒(hadoop classpath) HBaseMRCount.java
jar cvf hbase-mr-count.jar HBaseMRCount*.class
(2)提交运行(Linux)
hadoop jar hbase-mr-count.jar HBaseMRCount
若需指定HBase配置文件路径
hadoop jar hbase-mr-count.jar HBaseMRCount -D hbase.config.dir=/usr/local/hbase/conf
关键参数:
-D mapreduce.job.maps=N:指定 Map Task 数量(建议等于 HBase 表的 Region 数);
-D hbase.scanner.caching=1000:设置 Scanner 缓存(提升读取性能,避免频繁 RPC)。