gpt4 book ai didi

hadoop - 带有动态查找表的 Spark Streaming

转载 作者:可可西里 更新时间:2023-11-01 14:14:06 25 4
gpt4 key购买 nike

我目前正在研究使用 Spark Streaming 来接收类似日志文件的条目,并出于统计原因对它们进行一些计算。

HDFS 上保存着数据集,现在可以从 HBase 和 Hive 访问,需要这些数据集来查找一些数据并进行转换,例如 IP 与机器名称和机器所有者之间的映射。

spark 应用程序预计将在我们的集群上日复一日地运行数周而无需重新启动。但是,这些引用表每隔几个小时就会更新一次。

如果使用的数据稍微老一点还好,但是两周的数据就不行了。因此,我想知道如何在 map 和 reduce 阶段中查找数据以进行转换和丰富。我有几个想法。

  1. 广播变量可以读取数据集并有效地传递它。但是,一旦设置了广播变量,就无法更改,并且在驱动程序类中再次获取数据,取消持久化并广播新数据将不起作用,因为 worker 的指针都指向旧数据集。我不知道是否有办法解决这个问题。

  2. 可以进行 HBase get() 查询。如果根据查找的键将数据定向到 reducer,则每个 reducer 都可以保存整个数据集的一个子集的缓存,并且可以保存自己的本地缓存。 HBase 在获取单个记录时应该具有最小的延迟。

  3. 还有别的吗?

最佳答案

这里有两个选择。

首先是在 DStream 之上使用 foreachRDD 转换。 foreachRDD 在驱动程序端执行,这意味着您可以在那里创建任何新的 RDD。您可以存储时间计数器并每 10-15 分钟从 HDFS 重新读取文件

其次是通过 DStream 在 transform 转换中读取一些文件并将其结果保存在内存中。使用这种方法,您必须由每个执行者读取整个查找表,效率不高

我建议您使用第一种方法。更准确地说,您可以将上次更新数据时的标志存储在某处,并将其存储在您的 Spark 应用程序中。在每次迭代中,您检查此标志的值(例如,存储在 HBase 或 Zookeeper 中)并将其与本地存储的值进行比较 - 如果不同,则重新读取查找表,如果不同 - 执行操作旧的

关于hadoop - 带有动态查找表的 Spark Streaming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28264799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com