2016-01-25 86 views
1

现在,在我当前的体系结构中,我有一个模块,负责向Cassandra写入/读取数据以及负责下载数据的模块。最近我开始使用Datastax和Spark。我想对新获取的数据进行一些转换。这个问题有什么正确的做法?我是否使用我的模块来存储数据并分别进行Spark计算,或者使用Spark Streaming将下载的数据直接发送到Spark,并将原始数据和转换后的数据保存到Cassandra中?我正在操作股票报价,因此大量数据不断下载并进行了大量转换。使用Spark将数据保存到Cassandra

回答

2

在我看来,它更好地保持它分开。

先存储原始数据然后处理它。
其后更容易缩放和维护每个组件。例如:如果你想改变你的下载模块中的某些东西,比如添加一个新的下载源或修正一个bug,它不会影响在spark中完成的数据处理,并且改变在火花上运行的代码中的某些东西不会有任何东西对您下载的原始数据产生影响(或引入错误)。

+0

从不同的储存器下载数据的模块在将数据进一步发送之前统一数据,所以这不是问题。我只关心Spark作为管理数据存储的模块。它简化了体系结构,因为用于数据管理的模块将是多余的,因为Spark将执行保存,转换以及通过SparkSQL进行读取。我的问题是如果它打算做这一切? –

+0

@PawełSzychiewicz,如果您决定将下载和处理的数据存储在不同的位置,如aws s3,它会变得复杂。 您需要从火花吐出的已处理数据中分离出您下载的原始数据。他们完全不同。 我建议有一个模块来下载和存储数据, 一个统一数据的模块和一个模块来处理数据。 使用这种设置可以很容易地维护每个部分,并且在将来如果您决定更改某些内容,则可以非常容易地重播所有历史数据并运行它,然后再次抛出管道 – Urban48

相关问题