首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用星火在Cassandra中的一个大型Cassandra表中列出所有分区键?

如何使用星火在Cassandra中的一个大型Cassandra表中列出所有分区键?
EN

Stack Overflow用户
提问于 2022-04-05 23:25:41
回答 2查看 352关注 0票数 0

我们有一个名为cassandra扫描的程序,它使用火花-卡桑德拉连接器在一个非常大的表中列出分区键的所有值。该表大约有1700万Cassandra分区,每个分区平均有200行。包含此表的Cassandra集群在6个节点上运行DSE 5.1.8。包含表的键空间的复制因子为3。

以下是键空间和表的简化定义。

代码语言:javascript
运行
复制
CREATE KEYSPACE myspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}  AND durable_writes = true;

CREATE TABLE myspace.largetable (
    id text,
    itemOrder text,
    ...
    PRIMARY KEY (id, itemOrder)
) WITH CLUSTERING ORDER BY (itemOrder ASC)

cassandra扫描中用于列出分区键的所有值的语句如下:

代码语言:javascript
运行
复制
val res = sc.cassandraTable(keyspace, table).select("id").perPartitionLimit(1).repartition(320)

我们使用ApacheSpark2.3.1和火花-cassandra-连接器2.3.2。用于启动cassandra扫描的命令如下所示。

代码语言:javascript
运行
复制
/path/to/spark/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class "CassandraScan" --jars /path/to/spark-cassandra-connector_2.11-2.3.2.jar --executor-memory 15g --master local[20] cassandra-scan.jar &

卡桑德拉扫描正常运行,大约需要19小时。

我们最近建立了一个新的Cassandra集群,同样有6个节点(不同于在第一个集群中使用的节点)。这个集群运行DSE 6.8.16。第一个表中的所有数据都已添加到新集群中的一个表中。

我们将Apache的版本更新为2.4.8,连接器更新为2.4.2。我们用no测试了这个程序。在2000到200 000范围内的星火分区。我们还没能让卡桑德拉扫描正常运行。我们看到以下形式的错误:

代码语言:javascript
运行
复制
java.io.IOException: Exception during execution of SELECT "id" FROM "myspace"."largetable" WHERE token("id") > ? AND token("id") <= ?  PER PARTITION LIMIT 1 ALLOW FILTERING: Not enough replicas available for query at consistency LOCAL_ONE (1 required but only 0 alive)

有些运行Cassandra扫描会导致一些Cassandra节点与诸如Cassandra日志中的以下消息一起下降。

代码语言:javascript
运行
复制
INFO  [CoreThread-22] 2022-04-03 06:26:35,467  InboundHandshakeHandler.java:353 - Failed to properly handshake with peer /xxx.xxx.xxx.xxx:41231. Closing the channel.
java.lang.OutOfMemoryError: Direct buffer memory
代码语言:javascript
运行
复制
WARN  [Outbound-/xxx.xxx.xxx.xxx-large-message-writer] 2022-04-01 19:17:58,248  AbstractOutboundMessageHandler.java:80 - LARGE_MESSAGE with id 97 from /xxx.xxx.xxx.xxx to /xxx.xxx.xxx.xxx via (/xxx.xxx.xxx.xxx,/xxx.xxx.xxx.xxx:7000) error...
java.io.IOException: java.lang.RuntimeException: io.netty.channel.unix.Errors$NativeIoException: writeAddress(..) failed: Connection reset by peer

任何帮助,使这个工作,是非常感谢。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-20 16:34:40

我们用DataStax散装装载机来解决这个问题。

代码语言:javascript
运行
复制
dsbulk unload \
  --connector.csv.url <path>/<to>/<outputDir> \
  -h <host> \
  -query "select distinct id from myspace.largetable"

Ds散装花了大约3小时才获得1 750万美元的价值。

票数 0
EN

Stack Overflow用户

发布于 2022-04-12 11:45:42

此错误表示群集中至少有一个节点不可用于处理请求:

代码语言:javascript
运行
复制
    Not enough replicas available for query at consistency LOCAL_ONE \
      (1 required but only 0 alive)

您需要检查Cassandra日志,以确定(1)哪些节点没有响应/不可用,以及(2)原因。干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71759490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档