Apache spark 如何设置Spark streaming接收器频率?
我的要求是处理股票市场的每小时数据。 i、 e、每个流间隔从源获取一次数据,并通过数据流进行处理 我已经实现了一个自定义接收器,通过实现onStart()和onStop()方法及其工作原理来废弃/监视网站 遇到的挑战:Apache spark 如何设置Spark streaming接收器频率?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我的要求是处理股票市场的每小时数据。 i、 e、每个流间隔从源获取一次数据,并通过数据流进行处理 我已经实现了一个自定义接收器,通过实现onStart()和onStop()方法及其工作原理来废弃/监视网站 遇到的挑战: 接收方线程连续获取数据,即每间隔多次 无法协调接收器和数据流执行时间间隔 我尝试过的选项: 接收器线程睡眠几秒钟(等于流间隔)。 在这种情况下,数据不是处理时的最新数据 class CustomReceiver(间隔:Int) 扩展接收器[字符串](存储级别.内存和磁盘2
- 接收方线程连续获取数据,即每间隔多次李>
- 无法协调接收器和数据流执行时间间隔
class CustomReceiver(间隔:Int)
扩展接收器[字符串](存储级别.内存和磁盘2){
def onStart(){
新线程(“网站刮刀”){
覆盖def run(){receive()}
}.start()
}
def onStop(){
}
/**创建套接字连接并接收数据,直到接收器停止*/
私有def receive(){
println(“输入接收:+新日期());
试一试{
而(!isStopped){
val scriptsLTP=StockMarket.getLiveStockData()
for((脚本,ltp)
重新启动(“接收数据时出错”,t)
}
println(“退出接收:+新日期());
}
}
如何使火花流接收器与DSoW处理同步?
< P>这个用例似乎不适合火花流传输。间隔足够长,可以认为这是一个常规的批处理作业。这样,我们可以更好地利用群集资源。 我会将它重写为一个Spark作业,通过并行化目标代码,使用mapPartitions
将执行器用作分布式web清除器,然后按预期进行处理
然后按StaskWorks:Engult> Cron < P>这种情况对于SCAPIC流来说似乎不太合适。间隔足够长,可以将其视为常规的批处理作业。这样,我们可以更好地利用群集资源。> 我会将它重写为一个Spark作业,通过并行化目标代码,使用
mapPartitions
将执行器用作分布式web清除器,然后按预期进行处理
然后将Spark作业安排为每小时运行一次,使用
cron
或更高级的替代方案,例如在所需的确切时间运行Chronos。在流媒体间隔开始时获取数据是一个选项吗?在流媒体间隔开始时获取数据是一个选项吗?根据您的观点,最大可行的间隔是什么一个流作业?@ VijayInNururi,这取决于USECASE,所以我不会亲爱的放一个数字。如果你要处理的数据不断地出现,但是你只需要1个报告/HR,我会考虑火花流。这里的要点是火花流是关于流数据的,而你的用例类似于需要运行的批处理作业。特定时间。还请注意,Spark Streaming将在其运行时分配群集资源。您的用例看起来每小时处理几分钟。感谢您的澄清,不断地为如此低的使用率阻塞一个好的资源块是有害的。根据您的看法,流的最大可行间隔是多少E-Joice?@ VijaynNururi,这取决于USECASE,所以我不太愿意放一个数字。如果您要处理的数据不断地出现,但是您只需要1个报告/HR,我会考虑火花流。这里的要点是火花流是关于流数据的,而您的用例类似于需要在特定的范围运行的批处理作业。时间。还请注意,Spark Streaming将在运行时分配群集资源。您的用例看起来每小时处理几分钟。由于使用率如此低,持续阻塞大量资源是有害的,感谢您的澄清。
class CustomReceiver(interval: Int)
extends Receiver[String](StorageLevel.MEMORY_AND_DISK_2) {
def onStart() {
new Thread("Website Scrapper") {
override def run() { receive() }
}.start()
}
def onStop() {
}
/** Create a socket connection and receive data until receiver is stopped */
private def receive() {
println("Entering receive:" + new Date());
try {
while (!isStopped) {
val scriptsLTP = StockMarket.getLiveStockData()
for ((script, ltp) <- scriptsLTP) {
store(script + "," + ltp)
}
println("sent data")
System.out.println("going to sleep:" + new Date());
Thread.sleep(3600 * 1000);
System.out.println("awaken from sleep:" + new Date());
}
println("Stopped receiving")
restart("Trying to connect again")
} catch {
case t: Throwable =>
restart("Error receiving data", t)
}
println("Exiting receive:" + new Date());
}
}