我正在尝试使用sstableloader将数据加载到现有的Cassandra环中,但无法弄清楚如何实际让它工作。我正在尝试在其上运行cassandra节点的计算机上运行它,但是当我运行它时,我得到一个错误,说端口7000已经在使用,这是正在运行的Cassandra节点用于八卦的端口。
这是否意味着我只能在与目标cassandra环在同一网络中的机器上使用sstableloader,但实际上并没有运行cassandra节点?
任何细节都会有用,谢谢。
答案 0 :(得分:6)
使用sstableloader,阅读源代码,最后想出如何在托管正在运行的cassandra节点的同一台机器上运行sstableloader。让这个运行有两个关键点。首先,您需要为sstableloader创建cassandra安装文件夹的副本。这是因为sstableloader读取yaml文件以找出用于八卦的ipaddress,并且Cassandra正在使用现有的yaml文件。第二点是你需要在你的机器上创建一个新的loopback ipaddress(类似于127.0.0.2)。完成此操作后,更改复制的Cassandra安装文件夹中的yaml文件以收听此ipaddress。
我在这里写了一篇教程,详细介绍了如何执行此操作:http://geekswithblogs.net/johnsPerfBlog/archive/2011/07/26/how-to-use-cassandrs-sstableloader.aspx
答案 1 :(得分:1)
Austin Cassandra用户组刚刚对此进行了演示: http://www.slideshare.net/alex_araujo/etl-with-cassandra-streaming-bulk-loading/
答案 2 :(得分:0)
我已经使用cassandra-0.8.4中提供的sstableloader实用程序成功地将sstables加载到cassandra中。从我遇到的一些问题中我有以下提示
如果你在单机上运行它,你必须创建一个cassandra安装文件夹的副本,并且必须从这个文件夹运行sstable-loader。也改变监听地址,rpc地址也提供了ip地址在这个复制过的cassandra.yaml文件中运行cassandra作为种子。检查cassandra.yaml文件中的集群名称是否相同。
这些sstables必须位于名称为键空间名称的目录中
它需要一个包含类路径中的cassandra.yaml配置文件的目录。
请注意,应事先定义要加载的列族的架构
答案 3 :(得分:0)
参考参考:使用Cassandra SStableloader将数据批量加载到cassandra中 http://ramuprograms.blogspot.com/2014/07/bulk-loading-data-into-cassandra-using.html
答案 4 :(得分:0)
如果您希望在Java中执行此操作,请参阅以下实用程序类:
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文件。
答案 5 :(得分:0)
情况得到改善,并且使用sstableloader的整个过程更加容易,包括使用CQLSSTableWriter生成sstables的更简单方法。
有关所有详细信息: https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/tools/toolsBulkloader.html