我目前正在研究使用Spark Streaming来接收类似于日志文件的条目,并出于统计目的对它们进行一些计算。
现在可以从HBase和Hive访问保存在HDFS上的数据集,其中需要查找一些数据并对其进行转换,例如IP和机器名称以及机器所有者之间的映射。
预计Spark应用程序将在我们的集群上每天运行数周而不需要重新启动。 然而,这些参考表格每隔几小时更新一次。
如果使用的数据略旧,则可以接受,但数据两周以上就不可以了。 因此,我想知道如何在我的map和reduce阶段中查找数据以进行转换和增强。 我有一些想法。
广播变量可以读取数据集并有效地传递它。 但是,一旦设置了广播变量,就无法更改它,而在驱动程序类中再次获取数据,取消持久化并广播新的数据集将无效,因为工作节点的指针都指向旧的数据集。 我不知道是否有办法解决这个问题。
HBase get()查询可以进行。 如果根据查找的键将数据定向到reducer,则每个reducer可以拥有整个数据集的子集缓存,并且可以拥有自己的本地缓存。 HBase在获取单个记录时应具有最小延迟。
还有其他方法吗?