像map这样的运算符中有两个具有相同键的数字。第一个数字从hbase通过键获取值,将它们相加,然后通过接收器(dataStream.write(new HBaseOutputFormat(),0L))将新值放入hbase。第二个值做同样的事情。在第一个数字更新为hbase之前,第二个数字是否有可能从hbase获取值?如果将操作员链接起来并汇聚在一起,是否可以避免此问题?如果没有,我该怎么办?谢谢!
答案 0 :(得分:0)
您需要的是来自DataStream API的keyBy
函数,如果您使用DataSet API,则需要groupBy
:请参见Flink documentation。这些功能确保始终在一个特定的插槽中处理一个特定的密钥。一个插槽代表一个线程,这意味着即使并行度大于1,您的两个数字也会被顺序处理。
当然,您必须确保对HBase的put操作被阻止,因此您不能像BufferedMutator
或Async I/O Operators那样使用异步方式与HBase进行交互。