大数据全系列 教程
1869个小节阅读:468.1k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
7.7.10 handleData方法实现
AnalyserLogDataMapper类的handleData方法实现。
xxxxxxxxxx
/**将clientInfo中封装的数据保持到HBase上的表eventlog中
* @param clientInfo 封装了一条日志处理后的数据
* @param eventEnum 事件的枚举对象
* @param context Mapper任务的上下文对象
*/
private void handleData(Map<String, String> clientInfo, EventEnum eventEnum, Mapper<LongWritable, Text, NullWritable, Put>.Context context) throws IOException, InterruptedException {
//获取uuid
String uuid = clientInfo.get(EventLogConstants.LOG_COLUMN_NAME_UUID);
//获取会员id
String memberId = clientInfo.get(EventLogConstants.LOG_COLUMN_NAME_MEMBER_ID);
//获取服务器事件
String serverTime = clientInfo.get(EventLogConstants.LOG_COLUMN_NAME_SERVER_TIME);
//要求服务器的时间不能为空
if(StringUtils.isNotBlank(serverTime)){
//从clientInfo集合对象清楚浏览器的原始信息userAgent
clientInfo.remove(EventLogConstants.LOG_COLUMN_NAME_USER_AGENT);
//生成rowKey
String rowKey = generateRowKey(uuid,memberId,eventEnum.alias,serverTime);
//创建Put对象
Put put = new Put(Bytes.toBytes(rowKey));
//循环遍历clientInfo中的键值对
for(Map.Entry<String,String> entry:clientInfo.entrySet()){
//key和value都不为空时,才会被作为一个列添加到hbase的表中
if(StringUtils.isNotBlank(entry.getKey())&&StringUtils.isNotBlank(entry.getValue())){
put.addColumn(family,Bytes.toBytes(entry.getKey()),Bytes.toBytes(entry.getValue()));
}
}
//输出
context.write(NullWritable.get(),put);
//输出数量加1
this.outputRecords++;
}else{
//当前数据被过滤
this.filterRecords++;
}
}