Spark 上的 Apache Phoenix - 无法插入 Phoenix HBase Tables/Need 最佳实践建议
Apache Phoenix on Spark - Unable to insert to Phoenix HBase Tables/Need suggestion for Best practice
我有一个 table 结构如下。
trans_count
start_time, end_time, count
00:00:01 00:00:10 1000
00:00:11 00:00:20 800
Spark 侦听来自 Kafka 的事件并进行 10 秒的分组,并且必须插入到 Phoenix hbase table。
10 秒后,我必须首先检查 start_time、end_time 组合是否在 table 中。如果存在,我们必须获取现有计数并添加新计数并再次插入它。
UPSERT INTO trans_count(start_time, end_time, count) SELECT start_time, end_time, count? FROM trans_count WHERE start_time = ? AND end_time = ?
如果在上述语句中没有更新行,则直接更新数据。
在 Apache Storm 中,我能够在配置方法中创建一个 Phoenix Connection 对象,并且能够每 10 秒使用一次相同的连接进行 UPSERT。
在 Spark 中,我无法创建连接对象并为 RDD 中的每个对象使用相同的对象。
我的 spark 输出将是一个 JavaDStream>,其中 start_time、end_time、count 都是 Map 中的键。
我最终为 RDD 的每次迭代都创建了一个连接对象,我觉得这不是正确的方法。我读过 Phoenix 连接是轻量级的,但为每个 RDD 创建连接对象似乎不是正确的方法。
我阅读了一些有关相关内容的博客,但无法继续下去。请帮忙。
注意:该应用程序内置于 JAVA。
解决方案:
不是在 RDD 中为每个对象创建连接,而是在 RDD 中为每个分区创建连接并将其用于所有对象。
我有一个 table 结构如下。
trans_count
start_time, end_time, count
00:00:01 00:00:10 1000
00:00:11 00:00:20 800
Spark 侦听来自 Kafka 的事件并进行 10 秒的分组,并且必须插入到 Phoenix hbase table。
10 秒后,我必须首先检查 start_time、end_time 组合是否在 table 中。如果存在,我们必须获取现有计数并添加新计数并再次插入它。
UPSERT INTO trans_count(start_time, end_time, count) SELECT start_time, end_time, count? FROM trans_count WHERE start_time = ? AND end_time = ?
如果在上述语句中没有更新行,则直接更新数据。
在 Apache Storm 中,我能够在配置方法中创建一个 Phoenix Connection 对象,并且能够每 10 秒使用一次相同的连接进行 UPSERT。
在 Spark 中,我无法创建连接对象并为 RDD 中的每个对象使用相同的对象。 我的 spark 输出将是一个 JavaDStream>,其中 start_time、end_time、count 都是 Map 中的键。
我最终为 RDD 的每次迭代都创建了一个连接对象,我觉得这不是正确的方法。我读过 Phoenix 连接是轻量级的,但为每个 RDD 创建连接对象似乎不是正确的方法。
我阅读了一些有关相关内容的博客,但无法继续下去。请帮忙。
注意:该应用程序内置于 JAVA。
解决方案:
不是在 RDD 中为每个对象创建连接,而是在 RDD 中为每个分区创建连接并将其用于所有对象。