从Cassandra中提取数据以加载到关系数据库中的机制

时间:2013-01-26 01:15:32

标签: mysql hadoop cassandra etl

我们使用Cassandra作为我们应用程序的主要数据存储,它收集大量数据并需要大量存储和非常快的写入吞吐量。

我们计划定期提取这些数据并加载到关系数据库(如mySQL)中。有哪些提取机制可以扩展到每天数以亿计的记录?像Informatica这样的昂贵的第三方ETL工具对我们来说不是一个选择。 到目前为止,我的网络搜索只显示了带有Pig或Hive的Hadoop作为选项。然而,对于这个领域来说,这是一个非常新的东西,我不确定它们的扩展程度以及它们在运行时会对Cassandra集群本身施加多少负载?还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

您应该查看sqoop,它与Cassandra集成,如here所示。

这也可以轻松扩展,您需要一个Hadoop集群才能使sqoop正常工作,它的工作方式基本上是:

  • 将数据集切割到不同的分区。
  • 运行Map / Reduce作业,其中每个映射器将负责传输1个切片。

因此,您希望导出的数据集越大,映射器的数量就越多,这意味着如果不断增加群集,吞吐量将不断增加。这都是你拥有什么资源的问题。

就Cassandra集群的负载而言,我不确定,因为我没有亲自使用带有sqoop的Cassandra连接器,但是如果你想提取数据,则需要在集群上加载一些负载无论如何。例如,您可以在流量最低的特定时间每天进行一次,以便在您的Cassandra可用性下降时,影响很小。

我也在想如果这与your other question有关,你可能会考虑导出到Hive而不是MySQL,在这种情况下sqoop也可以,因为它可以直接导出到Hive。一旦它在Hive中,您就可以使用sqoop使用的相同群集来运行分析工作。

答案 1 :(得分:0)

除了支付etl工具之外,没有办法从cassandra中提取数据。我尝试了不同的方式,如复制命令或cql查询 - 无论在Cassandra.Yaml中更改超时参数,所有方法都会超时。 Cassandra专家表示,如果没有'其中'条款。这对我来说是一个很大的限制。这可能是至少对我不使用cassandra的主要原因之一。