当前位置: 首页 > 知识库问答 >
问题:

Apache Spark无法处理大型Cassandra列系列

何长恨
2023-03-14

我试图使用Apache Spark来处理我的大型(230K条目)cassandra数据集,但我经常遇到不同类型的错误。然而,我可以成功地运行应用程序时,运行在一个数据集约200个条目。我有一个由3个节点和1个主节点和2个工作节点组成的spark设置,这两个工作节点还安装了一个cassandra集群,该集群的数据索引复制系数为2。我的两个spark workers在web界面上显示2.4和2.8GB内存,在运行应用程序时,我将spark.executor.memory设置为2409,以获得4.7GB的内存。这是我的WebUI主页

其中一个任务的环境页

在这个阶段,我只是尝试使用Spark处理存储在cassandra中的数据。下面是我在Java中使用的基本代码

SparkConf conf = new SparkConf(true)
        .set("spark.cassandra.connection.host", CASSANDRA_HOST)
        .setJars(jars);

SparkContext sc = new SparkContext(HOST, APP_NAME, conf);
SparkContextJavaFunctions context = javaFunctions(sc);

CassandraJavaRDD<CassandraRow> rdd = context.cassandraTable(CASSANDRA_KEYSPACE, CASSANDRA_COLUMN_FAMILY);

System.out.println(rdd.count());

要成功运行,在一个小数据集(200个条目)上,events接口如下所示

线程“main”java.lang.OutofMemoryError中出现异常:超出GC开销限制

我必须手动关闭sparksubmit进程。但是,大型数据集是从一个仅占用22 MB的二进制文件中索引的,并且执行nodeTool status,我可以看到在我的两个cassandra节点中只存储了大约115 MB的数据。我也尝试在我的数据集中使用Spark SQL,但也得到了类似的结果。对于转换操作程序和使用Spark SQL的程序,我的设置哪里出了问题,应该做些什么才能成功地处理数据集。

我已经尝试了以下方法

编辑

基于这个答案,我也尝试了以下方法:

>

  • spark.storage.memoryfraction设置为0

    Spark-Cassandra-连接器:1.4.0-M1

  • 共有1个答案

    魏成济
    2023-03-14

    我认为在最新的Spark-Cassandra-Connector中有一个问题。参数spark.cassandra.input.split.size_in_mb应该具有64 MB的默认值,在代码中它被解释为64字节。这导致创建的分区太多,而Spark无法对其进行调度。尝试将conf值设置为

    spark.cassandra.input.split.size_in_mb=67108864
    
     类似资料:
    • 出身背景 我们选择Cassandra作为我们的存储引擎,因为我们有一个应用程序,必须处理网站上许多用户之间的异步消息传递和事件存储(某些类型的分析,现场发生的事情以及何时发生等)。此外,我们有一个投票平台,所以我们每天为每个用户存储投票,Cassandra在这些用例中很好。 最近,我们有了在现有系统之上构建关系模型的新需求(至少我们认为它是关系的)。一些类型的政治候选人有工作、教育、历史投票、支持

    • 编辑:我已经更改了模式,以便做出一些澄清。 每天都会为当天创建一个新表。所以一个表只包含一天的日志。 我的查询条件如下。 查询特定用户在特定日期(日期而不是时间)的所有日志。 因此原因、项目、价格和计数根本不会用作查询的提示或条件。

    • 问题内容: 我有一个很大的xml文件,其中包含许多子元素。我希望能够运行一些xpath查询。我尝试在Java中使用vtd- xml,但有时会出现内存不足错误,因为xml太大,无法容纳到内存中。是否有替代方法来处理如此大的xml。 问题答案: 尝试http://code.google.com/p/jlibs/wiki/XMLDog 它使用sax执行xpaths,而无需创建xml文档的内存表示形式。

    • 给定一个包含以下格式数据的大文件(V1,V2,…,VN) 我正在尝试使用Spark获得一个类似于下面的配对列表 我尝试了针对一个较旧的问题所提到的建议,但我遇到了一些问题。例如, 我得到了错误, 有人能告诉我哪些地方我可能做得不对,或者有什么更好的方法可以达到同样的效果?非常感谢。

    • 我正在处理包含数据库中多个记录列表的。 我应该如何指定处理每个子列表的块大小? 感谢您的帮助,提前谢谢。

    • 我有一个包含类型字段的实体类。这些值是我不允许修改的,但是当使用Spring数据时,我需要将它们映射到我的model类中,这样在将文档保存回Mongo后,这些值就不会丢失。因此从Mongo获取文档,映射到POJO,然后传递给Thymeleaf表单。当我尝试将Thymeleaf表单发送回控制器时,我收到了400个错误的请求“对象的验证失败...”错误,我知道这是因为这两个附加的字段。我如何将这些字段