2011-07-26 30 views
9

我想使用sstableloader将数据加载到现有的Cassandra环中,但无法弄清楚如何实际使其工作。我试图在一台运行有cassandra节点的机器上运行它,但是当我运行它时,出现一个错误消息,说7000端口已经在使用,这是运行中的Cassandra节点用于八卦的端口。你如何使用Cassandra工具sstableloader?

那么这是否意味着我只能在与目标cassandra环相同的网络上使用sstableloader,但实际上并未运行cassandra节点?

任何细节将是有用的,谢谢。

+0

正如您在答案(和教程)中指出的那样,您可以位于同一个节点上,您只需提供备用IP地址即可。但是,有一种更简单的方法;您可以使用JMX-> StorageService-> bulkload()调用。非常适合测试和偶尔使用。 – libjack

回答

6

使用sstableloader,阅读源代码,并最终找出如何在承载正在运行的cassandra节点的同一台机器上运行sstableloader。有两个关键点来实现它的运行。首先,您需要为sstableloader创建cassandra安装文件夹的副本。这是因为sstableloader读取yaml文件以找出哪些ipaddress用于八卦,而现有的yaml文件正在被Cassandra使用。第二点是你需要在你的机器上创建一个新的环回ipaddress(类似于127.0.0.2)。完成此操作后,将复制的Cassandra安装文件夹中的yaml文件更改为侦听此IP地址。

我写的教程会更详细讲述如何做到这一点的位置:http://geekswithblogs.net/johnsPerfBlog/archive/2011/07/26/how-to-use-cassandrs-sstableloader.aspx

+0

好教程@Turbo。 – libjack

+0

@Turbo断开的链接。在这里添加其他缺失的位? – Kasisnu

+3

@Turbo断开链接:( –

0

我已经使用所提供的sstableloader工具卡桑德拉-0.8.4到sstables成功加载到cassandra.From一些我所面临的问题,我有以下建议

  1. 如果您正在运行SINGL它您必须创建一个复制cassandra安装文件夹,并且必须从此文件夹运行sstable-loader。同时更改监听地址,rpc地址还提供运行cassandra的ip地址作为此cassandra.yaml文件中的种子拷贝one.Check两个cassandra.yaml文件中的集群名称是否相同。

  2. 这些sstables必须在一个目录,其名称是密钥空间

  3. 的名称它需要包含在类路径一个cassandra.yaml配置文件的目录。

  4. 注意,架构要加载应事先

定义仅供参考,请参阅列族:Using Cassandra SStableloader

+0

sstableloader是否加载只是部分数据?我的cluster1有3个节点,cluster2有3个节点,我需要将数据从cluster1复制到cluster2。是否必须在每个cluster1节点上运行sstableloader,或者sstableloader是否从其他主机获取表的所有部分我? – Sergey

0

如果您要在Java中执行此操作,请参见下面的实用程序类别:

BulkWriterLoader

List<String> argList = new ArrayList<>(); 
    argList.add("-v"); 
    argList.add("-d"); 
    argList.add(params.hosts); 
    argList.add("-f"); 
    argList.add(params.cassYaml); 
    argList.add(params.fullpath); 
    LoaderOptions options = LoaderOptions.builder() 
      .parseArgs(argList.stream().toArray(String[]::new)) 
      .build(); 
    try 
    { 
     BulkLoader.load(options); 
    } 
    catch (BulkLoadException e) 
    { 
     e.printStackTrace(); 
    } 
    ... 

的代码也将产生使用CQLSSTableWriter类的SSTable文件。

相关问题