Flink如何做维表关联?
2024-09-29 12:28:44
使用
RichAsyncFunction 加 CacheBuilder
CacheBuilder.newBuilder()
//最多存储10000条
.maximumSize(10000)
//过期时间为1分钟
.expireAfterWrite(60, TimeUnit.SECONDS)
.build();
public class LRU extends RichAsyncFunction<String,Order> {
private static final Logger LOGGER = LoggerFactory.getLogger(LRU.class);
String table = "info";
Cache<String, String> cache = null;
private HBaseClient client = null;
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
//创建hbase客户端
client = new HBaseClient("127.0.0.1","7071");
cache = CacheBuilder.newBuilder()
//最多存储10000条
.maximumSize(10000)
//过期时间为1分钟
.expireAfterWrite(60, TimeUnit.SECONDS)
.build();
}
@Override
public void asyncInvoke(String input, ResultFuture<Order> resultFuture) throws Exception {
JSONObject jsonObject = JSONObject.parseObject(input);
Integer cityId = jsonObject.getInteger("city_id");
String userName = jsonObject.getString("user_name");
String items = jsonObject.getString("items");
//读缓存
String cacheCityName = cache.getIfPresent(cityId);
//如果缓存获取失败再从hbase获取维度数据
if(cacheCityName != null){
Order order = new Order();
order.setCityId(cityId);
order.setItems(items);
order.setUserName(userName);
order.setCityName(cacheCityName);
resultFuture.complete(Collections.singleton(order));
}else {
client.get(new GetRequest(table,String.valueOf(cityId))).addCallback((Callback<String, ArrayList<KeyValue>>) arg -> {
for (KeyValue kv : arg) {
String value = new String(kv.value());
Order order = new Order();
order.setCityId(cityId);
order.setItems(items);
order.setUserName(userName);
order.setCityName(value);
resultFuture.complete(Collections.singleton(order));
cache.put(String.valueOf(cityId), value);
}
return null;
});
}
}
}
最新文章
- 利用NuSoap开发WebService(PHP)
- MVC区域 视图必须派生自 WebViewPage 或 WebViewPage<;TModel>;
- PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误
- Leveldb Advanced
- H - Highways - poj 1751(prim)
- 对于js原型和原型链继承的简单理解(第三种,复制继承)
- QT 自动获取可用串口
- Xcode插件(一)-规范注释生成器VVDocumenter
- 201521123014 《Java程序设计》第14周学习总结
- JAVA几种常见的编码格式(转)
- [Hdu1342] Lotto
- 跟我一起学opencv 第四课之图像的基本操作
- JS 设计模式一 -- 原型模式
- SpringBoot整合Druid(阿里巴巴)数据源
- EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼
- py request.post header
- Next.js v4.1.4 文档中文翻译【转载】
- form图片上传遇到错误
- 新闻编辑室第三季/全集The Newsroom迅雷下载
- Android.mk遍历子目录所有文件