我有一个传入的火花数据流,用于摄取包含设备ID的消息:
{deviceId=123 , deviceState: "turned off" }
我想将此加入设备信息表:
{deviceId=123 , deviceInfo: "The red refrigirator" }
获取非规范化元组,例如:
{deviceId=123 , deviceState: "turned off", deviceInfo: "The red refrigirator" }
device_info表存储在HBASE中。 现在问题是: 每隔一段时间,"设备信息"可以更改hbase表:将新设备添加到表中,更改现有设备的Info等等... 这些更改 NOT 实时,我可以容忍更新的几分钟延迟。
我可以看到解决问题的三种方法:
不使用Spark连接:对于DataStream中的每个条目,按id执行device_info的单个hbase查找。
使用" newAPIHadoopRDD"在程序开始时从hbase创建一个RDD,然后将其与数据流中的每个新微量接头连接。
对于传入Datastream中的每个微量分析(ds.foreachRdd):从hbase(newAPIHadoopRDD)创建RDD,然后调用join。
我应该采取什么方法?
答案 0 :(得分:1)
稍微修改我会做#1。我会
这将允许您减少网络呼叫的数量(多重目录)并删除同一设备的重复呼叫(设置与列表)。
我们在Splice Machine for Foreign Key Validation中做到了这一点,它显着提高了我们的性能(2-3倍)。
祝你好运。