Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我增加资源时,触发流式作业_Java_Apache Spark_Cassandra_Spark Cassandra Connector - Fatal编程技术网

Java 当我增加资源时,触发流式作业

Java 当我增加资源时,触发流式作业,java,apache-spark,cassandra,spark-cassandra-connector,Java,Apache Spark,Cassandra,Spark Cassandra Connector,我有一个4节点的Spark独立集群,上面运行着Spark流媒体作业 当我提交每个执行器有7个内核的作业时,一切都运行顺利: spark-submit --class com.test.StreamingJob --supervise --master spark://{SPARK_MASTER_IP}:7077 --executor-memory 30G --executor-cores 7 --total-executor-cores 28 /path/to/jar/spark-job.jar

我有一个4节点的Spark独立集群,上面运行着Spark流媒体作业

当我提交每个执行器有7个内核的作业时,一切都运行顺利:

spark-submit --class com.test.StreamingJob --supervise --master spark://{SPARK_MASTER_IP}:7077 --executor-memory 30G --executor-cores 7 --total-executor-cores 28 /path/to/jar/spark-job.jar
当我增加到每个执行器24个内核时,没有一个批处理得到处理,我看到java.lang.OutOfMemoryError:无法在执行器日志中创建新的本机线程。然后,执行人继续失败:

spark-submit --class com.test.StreamingJob --supervise --master spark://{SPARK_MASTER_IP}:7077 --executor-memory 30G --executor-cores 24 --total-executor-cores 96 /path/to/jar/spark-job.jar
错误:

17/01/12 16:01:00 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[Shutdown-checker,5,main]
java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:714)
        at io.netty.util.concurrent.SingleThreadEventExecutor.shutdownGracefully(SingleThreadEventExecutor.java:534)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.shutdownGracefully(MultithreadEventExecutorGroup.java:146)
        at io.netty.util.concurrent.AbstractEventExecutorGroup.shutdownGracefully(AbstractEventExecutorGroup.java:69)
        at com.datastax.driver.core.NettyOptions.onClusterClose(NettyOptions.java:190)
        at com.datastax.driver.core.Connection$Factory.shutdown(Connection.java:844)
        at com.datastax.driver.core.Cluster$Manager$ClusterCloseFuture$1.run(Cluster.java:2488)
我发现了这一点,并尝试大幅提高ulimits,但没有效果

每个机箱有32个内核和61.8 GB内存。流作业是用java编写的,运行在Spark 2.0.0上,通过Spark-Cassandra-connector-java_2.10 1.5.0-M2连接到Cassandra 3.7.0


数据是一个非常小的涓涓细流,每秒少于100个事件,每个事件都少于200B

听起来您的内存不足;)

更详细地说,Spark使用的内核数量与并行处理的信息量直接相关。您基本上可以认为每个核心都在处理一个完整的Spark分区的数据,并且可能需要完整的内容驻留在内存中

每个执行器7个内核意味着同时处理7个Spark分区。 将这个数字增加到24意味着将使用大约4倍的ram。这很容易在不同的地方造成OOM

有几种方法可以解决这个问题

  • 为执行器JVM分配更多内存
  • 缩小Spark分区的大小(更小的分区意味着在任何给定时间内存中的数据更少)
  • 确保没有在内存中缓存任何RDD(从而耗尽系统资源)
  • 减少正在使用的数据量,在使用spark之前获取子集或尝试在服务器上进行筛选

  • 听起来您的内存不足;)

    更详细地说,Spark使用的内核数量与并行处理的信息量直接相关。您基本上可以认为每个核心都在处理一个完整的Spark分区的数据,并且可能需要完整的内容驻留在内存中

    每个执行器7个内核意味着同时处理7个Spark分区。 将这个数字增加到24意味着将使用大约4倍的ram。这很容易在不同的地方造成OOM

    有几种方法可以解决这个问题

  • 为执行器JVM分配更多内存
  • 缩小Spark分区的大小(更小的分区意味着在任何给定时间内存中的数据更少)
  • 确保没有在内存中缓存任何RDD(从而耗尽系统资源)
  • 减少正在使用的数据量,在使用spark之前获取子集或尝试在服务器上进行筛选

  • 谢谢Russ,我将尝试缩小分区。即使要处理的数据非常少,也会发生这种情况,所以我认为不可能是这样。hi-Russ,在独立群集模式下,如何为执行分配更多内存?文档总是很有用。spark.executor.memory 1g每个执行进程要使用的内存量(例如2g、8g)。感谢Russ,我将尝试缩小分区。即使要处理的数据非常少,也会发生这种情况,所以我认为不可能是这样。hi-Russ,在独立群集模式下,如何为执行分配更多内存?文档总是很有用。spark.executor.memory 1g每个执行进程要使用的内存量(例如2g、8g)。数据的大小是多少?您能否检查集群中每个节点的总ram和每个节点的核心数?所以问题是您要为每个执行器分配24个执行器核心/机器和30 GB内存。因此,您分配的总内存为720GB。您的群集只有247GB内存,因此内存不足异常:)@sandeep singh每个工作进程只有一个执行器。这是每个遗嘱执行人的限额是的。。您的数据很小,因此您不应该分配更多的执行器,但在这里您正在运行流式处理作业,因此您可以增加,但分配更多的核心将更为有利。您还可以通过增加减少的执行器来测量时间,并判断最佳性能。数据的大小是多少?您能否检查集群中每个节点的总ram和每个节点的核心数?所以问题是您要为每个执行器分配24个执行器核心/机器和30 GB内存。因此,您分配的总内存为720GB。您的群集只有247GB内存,因此内存不足异常:)@sandeep singh每个工作进程只有一个执行器。这是每个遗嘱执行人的限额是的。。您的数据很小,因此您不应该分配更多的执行器,但在这里您正在运行流式处理作业,因此您可以增加,但分配更多的核心将更为有利。您还可以通过增加或减少执行器来衡量时间,并判断最佳性能。