Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance 如何优化SparkPagerBank示例应用程序以缩短垃圾收集时间?_Performance_Apache Spark_Garbage Collection - Fatal编程技术网

Performance 如何优化SparkPagerBank示例应用程序以缩短垃圾收集时间?

Performance 如何优化SparkPagerBank示例应用程序以缩短垃圾收集时间?,performance,apache-spark,garbage-collection,Performance,Apache Spark,Garbage Collection,我正在AmazonEC2机器上的7节点集群1驱动程序和6个执行器中运行Spark应用程序。我使用6个m4.2x大型实例,每个实例有1个执行器。它们每个有8个核。驱动程序位于m4.xlarge虚拟机上,该虚拟机有4个内核。spark版本是2.1.1 我使用以下命令启动SparkPageRank应用程序 spark-submit \ --name "ABC" \ --master spark://xxx:7077 \ --conf spark.driver.memory=10g \

我正在AmazonEC2机器上的7节点集群1驱动程序和6个执行器中运行Spark应用程序。我使用6个m4.2x大型实例,每个实例有1个执行器。它们每个有8个核。驱动程序位于m4.xlarge虚拟机上,该虚拟机有4个内核。spark版本是2.1.1

我使用以下命令启动
SparkPageRank
应用程序

spark-submit \
  --name "ABC" \
  --master spark://xxx:7077 \
  --conf spark.driver.memory=10g \
  --conf "spark.app.name=ABC" \
  --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ConcGCThreads=5" \
  --class org.apache.spark.examples.SparkPageRank \
  --executor-memory 22g \
  /home/ubuntu/spark-2.1.1/examples/target/scala-2.11/jars/spark-examples_2.11-2.1.1.jar /hdfscheck/pagerank_data_11G_repl1.txt 4
使用这些配置的GC时间非常长

以下是其中一个执行器的GC日志块:

1810.053: [GC pause (GCLocker Initiated GC) (young), 0.1694102 secs]
   [Parallel Time: 167.8 ms, GC Workers: 8]
      [GC Worker Start (ms): Min: 1810053.2, Avg: 1810053.3, Max: 1810053.4, Diff: 0.1]
      [Ext Root Scanning (ms): Min: 0.2, Avg: 0.4, Max: 0.7, Diff: 0.5, Sum: 2.9]
      [Update RS (ms): Min: 12.4, Avg: 12.7, Max: 13.2, Diff: 0.7, Sum: 101.4]
         [Processed Buffers: Min: 11, Avg: 12.9, Max: 16, Diff: 5, Sum: 103]
      [Scan RS (ms): Min: 29.4, Avg: 29.8, Max: 30.1, Diff: 0.7, Sum: 238.7]
      [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
      [Object Copy (ms): Min: 124.5, Avg: 124.6, Max: 124.7, Diff: 0.1, Sum: 996.9]
      [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
         [Termination Attempts: Min: 1, Avg: 2.2, Max: 5, Diff: 4, Sum: 18]
      [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1]
      [GC Worker Total (ms): Min: 167.5, Avg: 167.5, Max: 167.6, Diff: 0.1, Sum: 1340.2]
      [GC Worker End (ms): Min: 1810220.8, Avg: 1810220.8, Max: 1810220.8, Diff: 0.0]
   [Code Root Fixup: 0.0 ms]
   [Code Root Purge: 0.0 ms]
   [Clear CT: 0.4 ms]
   [Other: 1.2 ms]
      [Choose CSet: 0.0 ms]
      [Ref Proc: 0.5 ms]
      [Ref Enq: 0.0 ms]
      [Redirty Cards: 0.4 ms]
      [Humongous Register: 0.0 ms]
      [Humongous Reclaim: 0.0 ms]
      [Free CSet: 0.1 ms]
   [Eden: 992.0M(960.0M)->0.0B(960.0M) Survivors: 160.0M->160.0M Heap: 14.6G(22.0G)->13.8G(22.0G)]
 [Times: user=1.34 sys=0.00, real=0.17 secs]
(更多信息请访问)

我只能看到一件可疑的事情,即并发标记结束花费了很多时间

如果有人能告诉我如何调整这个特殊情况下的垃圾收集,我将不胜感激。驱动程序节点所在的虚拟机有16GB内存,而执行器虚拟机有32GB内存。

(不是真正的答案,只是一组帮助提示)

我的驱动程序节点有16GB内存

如果您使用
spark.driver.memory=10g执行
spark submit
,我认为情况并非如此

您应该改用
--驱动程序内存
(这只是一个快捷方式,但会使事情更容易记住):

--驱动程序内存内存用于驱动程序的内存(例如1000M、2G)(默认值:1024M)

关于你的主要问题,GC的大量使用似乎是PageRank算法的工作原理。请注意,在输入不太大的情况下,大量使用随机写入

我还认为GC时间没有任务时间长

我担心RDD块只有2,因为这似乎表明并行性非常低,但这可能是它应该如何工作的


运行SparkPageRank示例 以下内容可替换为一个简单的
运行示例SparkPageRank
(如Spark中所述)

(不是一个真正的答案,只是一系列的帮助提示)

我的驱动程序节点有16GB内存

如果您使用
spark.driver.memory=10g执行
spark submit
,我认为情况并非如此

您应该改用
--驱动程序内存
(这只是一个快捷方式,但会使事情更容易记住):

--驱动程序内存内存用于驱动程序的内存(例如1000M、2G)(默认值:1024M)

关于你的主要问题,GC的大量使用似乎是PageRank算法的工作原理。请注意,在输入不太大的情况下,大量使用随机写入

我还认为GC时间没有任务时间长

我担心RDD块只有2,因为这似乎表明并行性非常低,但这可能是它应该如何工作的


运行SparkPageRank示例 以下内容可替换为一个简单的
运行示例SparkPageRank
(如Spark中所述)


当说16/32GB时,我的意思是驱动程序节点所在的VM有16GB内存,而执行器VM有32GB内存。同样,如果我的理解是正确的,任务的gc时间也包括在任务时间的计算中。也就是说,垃圾收集是阻塞的。在这种情况下,我有各种任务,任务持续时间为1.6分钟,相关gc时间为1.1分钟。这难道不应该被视为很长吗?如果说是16/32 GB,我的意思是驱动程序节点所在的VM有16GB内存,而执行者VM有32GB内存。同样,如果我的理解是正确的,任务的gc时间也包括在任务时间的计算中。也就是说,垃圾收集是阻塞的。在这种情况下,我有各种任务,任务持续时间为1.6分钟,相关gc时间为1.1分钟。这难道不应该被认为很长吗?该数据集是否可用,以便我们可以尝试重现该场景?@eliasah:该数据集是[Friendster-SNAP数据集]()通过删除行来创建11G数据集是否可用,以便我们可以尝试重现场景?@eliasah:数据集是通过删除行来创建11G的[Friendster-SNAP数据集]()
spark-submit ... \
  --class org.apache.spark.examples.SparkPageRank ... \
  /home/ubuntu/spark-2.1.1/examples/target/scala-2.11/jars/spark-examples_2.11-2.1.1.jar