4

我有Apache Cassandra在Google Cloud中的4个虚拟机上工作。我认为它太昂贵了,并且想要将所有数据导出到BigQuery。卡桑德拉大约有2TB(60毫米排)。任何建议我怎么能做到这一点?如何将数据从Cassandra导出到BigQuery

在此先感谢。

+0

您有低利率。重要的是,您必须使用投票下方发布答案左侧的勾号标记接受的答案。这会增加你的速度。通过查看这个链接看看它是如何工作的:http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work#5235 – Pentium10

回答

7

我们决定将5年的数据从Apache Cassandra迁移到Google BigQuery。问题不仅仅是传输数据或导出/导入,问题在于非常古老的Cassandra!

经过广泛研究后,我们计划迁移到将数据导出到csv,然后在Google云端存储中上传以导入Big Query。

痛苦是卡桑德拉1.1处理大量记录的方式!没有分页,所以在某些时候你会用完东西!如果没有错,从2.2版开始引入分页。

毕竟我试图升级到最新版本3.4失败,我决定尝试其他版本,幸运的是版本2.2工作!通过工作,我的意思是我能够按照升级步骤结束并且可以访问数据。

因为我无法获得直接升级的任何支持,而且我的升级到2.2的尝试也失败了。所以我别无选择,只能升级到2.0,然后升级到2.2。因为这是非常微妙的任务,我只是把你转到官方网站,然后给你总结。请确保您检查docs.datastax.com并按照说明操作。

举一个概述,你会做下列步骤操作:

  1. 确保所有节点都是稳定的,没有死的节点。
  2. 进行备份(您的SSTables,配置等)
  3. 在继续下一步之前成功升级SSTable是非常重要的。只需使用

    nodetool upgradesstables

  4. 使用

    nodetool排排出节点

  5. 然后简单地停止节点

  6. 安装新版本(我将解释全新安装后在此文档)
  7. 只需将配置作为您的旧Cassandra,启动它并再次升级稳定器(如步骤3)为每个节点。 安装卡桑德拉:

编辑/etc/yum.repos.d/datastax.repo

[datastax] 
name = DataStax Repo for Apache Cassandra 
baseurl = https://rpm.datastax.com/community 
enabled = 1 
gpgcheck = 0 

然后安装并启动服务:

yum install dsc20 
service cassandra start 

一旦你升级到Cassandra 2+可以将数据导出到csv,而无需分页或崩溃问题。

从记录上来看,几个命令来获取有关数据结构中的必要信息如下:

cqlsh -u username -p password 
describe tables; 
describe table abcd; 
describe schema; 

而且一旦我们知道了表,我们要导出我们只是用它们沿着它的密钥空间。首先将所有命令添加到一个文件中以创建一个批处理。

vi commands.list 

例如,一个样品命令导出一个表:

COPY keyspace.tablename TO '/backup/export.csv'; 

最后运行该文件中的命令:

cqlsh -u username -p password -f /backup/commands.list 

所以现在,你已经导出表, csv文件。您现在需要做的就是将文件上传到Google云端存储:

gsutil rsync /backup gs://bucket 

稍后,您可以使用Google API将csv文件导入Google BigQuery。您可以在cloud.google.com上查看Google文档。

+0

谢谢你的回答。但COPY命令给我平均。速度约为每秒15000行。所以我可以在大约40天内输出60毫秒的行数。我可以加快这个过程吗? –

+0

尝试调整其他参数:https://www.datastax.com/dev/blog/six-parameters-affecting-cqlsh-copy-from-performance – Pentium10

3

您也可以通过使用Apache Beam创建数据管道并通过Cloud Dataflow运行此管道来完成此任务。

梁包括built-in IO connectors为Apache Cassandra的和谷歌的BigQuery

CassandraIO (Java)

利用基于波束方法,你也将有更多的选项来执行,你可能需要申请额外的数据清洗和/或转换部分出口过程。

相关问题