Apache spark 什么';就数据量而言,spark streaming的限制是什么?

Apache spark 什么';就数据量而言,spark streaming的限制是什么?,apache-spark,spark-streaming,datastax-enterprise,Apache Spark,Spark Streaming,Datastax Enterprise,我有上千万行的数据。是否可以使用spark streaming在一周或一天内分析所有这些数据?在数据量方面,spark streaming的限制是什么?我不确定上限是多少,以及何时应该将它们放入数据库,因为Stream可能无法再处理它们了。我也有不同的时间窗口1、3、6小时等,我使用窗口操作来分离数据 请在下面找到我的代码: conf=SparkConf().setAppName(appname) sc=SparkContext(conf=conf) ssc=StreamingContext(s

我有上千万行的数据。是否可以使用spark streaming在一周或一天内分析所有这些数据?在数据量方面,spark streaming的限制是什么?我不确定上限是多少,以及何时应该将它们放入数据库,因为Stream可能无法再处理它们了。我也有不同的时间窗口1、3、6小时等,我使用窗口操作来分离数据

请在下面找到我的代码:

conf=SparkConf().setAppName(appname)
sc=SparkContext(conf=conf)
ssc=StreamingContext(sc,300)
sqlContext=sqlContext(sc)
频道=sc.cassandraTable(“abc”,“频道”)
主题='abc.crawled_articles'
kafkaParams={“metadata.broker.list”:“0.0.0.0:9092”}
类别='abc.crawled_article'
category_stream=KafkaUtils.createDirectStream(ssc,[category],kafkaParams)
category_join_stream=category_stream.map(lambda x:read_json(x[1])).filter(lambda x:x!=0.map(lambda x:id'],x))
article_stream=KafkaUtils.createDirectStream(ssc,[主题],kafkaParams)
article_join_stream=article_stream.map(lambda x:read_json(x[1]).filter(lambda x:x!=0.map(lambda x:TransformInData(x)).filter(lambda x:(a表示x中的a)).map(lambda x:(x['id'].encode(“utf-8”),x))
#Axis主题集成文章和Axis
axes\u topic='abc.crawled\u axes'
axes_stream=KafkaUtils.createDirectStream(ssc,[axes_主题],kafkaParams)
axes_join_stream=axes_stream.filter(lambda x:'delete'不在str(x)中)map(lambda x:read_json(x[1])filter(lambda x:x!=0)map(lambda x:axesTransformData(x)).map(lambda x:(str(x['id']),x)).map(lambda x:(x[0],{'id':x[0],“态度”:x[1]['likes','reposts],'comments':0,'comments:'x:'comments','x:'x:'comments','x:[1],'comments],[1],[x],[1],[1]
#轴连接流。还原ByKeyAndWindow(λx,y:x+y,30,10)。变换(axestrans)。pprint()
#加入
statistics=article\u join\u stream.window(1*60*60,5*60).cogroup(category\u join\u stream.window(1*60*60,60)).cogroup((axes\u join\u stream.window(24*60*60,5*60)))
statistics.transform(joinstream.pprint())
ssc.start()#启动计算ssc.WAITTERMINATION()
ssc.终止协议()
一次一个:

  • 是否可以在[给定的时间]内分析[大量的行]?
一般来说,yes-Spark允许您跨多台机器进行扩展,因此原则上您应该能够启动一个大型集群,并在相对较短的时间内处理大量数据(假设我们讨论的是数小时或数天,而不是数秒或更短的时间,这可能是由于开销造成的问题)

具体地说,在我看来,在合理的时间内(即不使用非常大的集群),对数千万条记录执行问题中说明的处理是可行的

  • Spark流媒体在数据量方面的限制是什么?
我不知道,但你很难做到。有一些非常大的部署示例,例如在中(“平均每天30 TB上有数百个指标”)。另外,请参阅,其中提到了8000台机器的集群和处理PB数据的集群

  • 何时将结果写入[某种存储]?
根据火花流的特点,对数据进行微批量处理。如果您的数据确实是一个流(即没有明确的结尾),那么最简单的方法就是存储每个RDD(即微批次)的处理结果

如果你的数据不是流,例如你时不时地处理一堆静态文件,你可能应该考虑放弃流部分(例如使用Sink作为批处理处理器)。 <> P>既然你的问题提到了几个小时的窗口大小,我怀疑你可能想考虑批处理选项。< /P>

  • 如何在不同的时间窗口处理相同的数据?
如果使用Spark Streaming,则可以维护多个状态(例如使用
mapWithState
)-每个时间窗口一个

另一个想法(代码更简单,操作更复杂)——您可以启动多个集群,每个集群都有自己的窗口,从同一个流读取数据


如果您是批处理,您可以使用不同的时间窗口多次运行同一操作,例如使用多个窗口大小的
reduceByWindow

这里有多个问题,如果您清楚地将它们分开,将有助于回答。此外,如果您将包含的代码最小化到足以说明问题的最小示例,这将非常有用