面试题答案
一键面试- 配置HBase输入格式:
- 在MapReduce作业配置中,设置输入格式为
TableInputFormat
,该格式用于从HBase表中读取数据。例如:
job.setInputFormatClass(TableInputFormat.class);
- 在MapReduce作业配置中,设置输入格式为
- 设置扫描器:
- 创建一个
Scan
对象,通过它来定义从HBase表中读取数据的范围和条件。可以设置起始行键、结束行键、列族、列限定符等。例如:
Scan scan = new Scan(); scan.addFamily(Bytes.toBytes("cf")); scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col")); TableInputFormat.setScan(job, scan);
- 创建一个
- Mapper类读取数据:
- Mapper类的输入键类型通常为
ImmutableBytesWritable
,代表HBase中的行键;值类型为Result
,包含该行的所有列数据。在map
方法中,通过Result
对象获取具体的单元格数据。例如:
public class HBaseMapper extends Mapper<ImmutableBytesWritable, Result, Text, IntWritable>{ @Override protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException { byte[] val = value.getValue(Bytes.toBytes("cf"), Bytes.toBytes("col")); String data = Bytes.toString(val); // 这里data就是从HBase中读取到的列数据 } }
- Mapper类的输入键类型通常为
- 数据转换:
- 根据业务需求对读取到的数据进行转换。例如,如果读取到的是字符串形式的数字,可能需要转换为
int
或double
类型进行后续计算。 - 可以进行数据清洗,比如去除无效字符、处理缺失值等。
- 根据业务需求对读取到的数据进行转换。例如,如果读取到的是字符串形式的数字,可能需要转换为
- 输出中间结果:
- Mapper类的输出键值对类型根据业务需求定义。使用
Context
对象将转换后的数据输出为中间结果。例如:
context.write(new Text("key"), new IntWritable(1));
- 这里将处理后的数据以键值对的形式输出,后续会由MapReduce框架进一步处理。
- Mapper类的输出键值对类型根据业务需求定义。使用