【发布时间】:2015-03-31 15:14:43
【问题描述】:
我目前正在研究使用 Spark Streaming 来获取类似日志文件的条目,并出于统计原因对它们进行一些计算。
HDFS 上保存了一些数据集,现在可以从 HBase 和 Hive 访问,需要这些数据集来查找一些数据并对其进行转换,例如 IP 与机器名称和机器所有者之间的映射。
预计 Spark 应用程序将在我们的集群上日复一日地运行数周而无需重新启动。但是,这些参考表每隔几个小时就会更新一次。
如果使用的数据稍微旧一点也没关系,但数据超过两周就不行了。因此,我想知道如何在 map 和 reduce 阶段查找数据以进行转换和扩充。我有几个想法。
广播变量可以读取数据集并有效地传递它。但是,一旦设置了广播变量,就无法更改它,并且在驱动程序类中再次获取数据,取消持久化和广播新的数据将不起作用,因为工作人员的指针都指向旧数据集。我不知道有没有办法解决这个问题。
可以进行 HBase get() 查询。如果根据查找的键将数据定向到reducer,则每个reducer 可以保存整个数据集子集的缓存,并且可以保存自己的本地缓存。 HBase 在获取单个记录时应该有最小的延迟。
还有别的吗?
【问题讨论】:
标签: hadoop hbase apache-spark spark-streaming