分享

Spark在yarn-client运行一直accepted

zstu 发表于 2017-7-26 17:15:44 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 7 11853
我运行spark的spark.example.SparkPi例子,用yarn-cluster提交是可以运行的,但用yarn-client提交,日志一直打印[mw_shl_code=java,true]2017-07-26 16:53:30 INFO  yarn.Client: Application report for application_150061931200_0033 (state: ACCEPTED)[/mw_shl_code],然后程序就停了
,在webui上看的日志[mw_shl_code=java,true]org.apache.spark.rpc.RpcTimeoutException: Cannot receive any reply in 120 seconds. This timeout is controlled by spark.rpc.askTimeout  
        at org.apache.spark.rpc.RpcTimeout.org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException(RpcTimeout.scala:48)  
        at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:63)  
        at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:59)  
        at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33)  
        at scala.util.Failure$$anonfun$recover$1.apply(Try.scala:185)  
        at scala.util.Try$.apply(Try.scala:161)  
        at scala.util.Failure.recover(Try.scala:185)  
        at scala.concurrent.Future$$anonfun$recover$1.apply(Future.scala:324)  
        at scala.concurrent.Future$$anonfun$recover$1.apply(Future.scala:324)  
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)  
        at org.spark-project.guava.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:293)  
        at scala.concurrent.impl.ExecutionContextImpl$$anon$1.execute(ExecutionContextImpl.scala:133)  
        at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)  
        at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248)  
        at scala.concurrent.Promise$class.complete(Promise.scala:55)  
        at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153)  
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)  
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)  
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)  
        at scala.concurrent.Future$InternalCallbackExecutor$Batch$$anonfun$run$1.processBatch$1(Future.scala:643)  
        at scala.concurrent.Future$InternalCallbackExecutor$Batch$$anonfun$run$1.apply$mcV$sp(Future.scala:658)  
        at scala.concurrent.Future$InternalCallbackExecutor$Batch$$anonfun$run$1.apply(Future.scala:635)  
        at scala.concurrent.Future$InternalCallbackExecutor$Batch$$anonfun$run$1.apply(Future.scala:635)  
        at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)  
        at scala.concurrent.Future$InternalCallbackExecutor$Batch.run(Future.scala:634)  
        at scala.concurrent.Future$InternalCallbackExecutor$.scala$concurrent$Future$InternalCallbackExecutor$$unbatchedExecute(Future.scala:694)  
        at scala.concurrent.Future$InternalCallbackExecutor$.execute(Future.scala:685)  
        at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)  
        at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:2 [/mw_shl_code] QQ截图20170726171407.png
2.png


已有(7)人评论

跳转到指定楼层
yaojiank 发表于 2017-7-26 17:37:58
先从原理来讲:yarn-cluster模式下,driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行。

yarn-client模式下,Application Master仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,Client不能关闭。因为driver在客户端。
这里产生异常,是因为driver暂用了内存。可能你的内存或则jvm过小造成的。

回复

使用道具 举报

zstu 发表于 2017-7-26 17:44:44
本帖最后由 zstu 于 2017-7-26 17:48 编辑
yaojiank 发表于 2017-7-26 17:37
先从原理来讲:yarn-cluster模式下,driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督 ...

我是用的默认driver内存512M,SparkPi运行driver端占不了那么大的内存吧,增加到1g也不行。也是同样的错误。
回复

使用道具 举报

yaojiank 发表于 2017-7-26 17:50:55
zstu 发表于 2017-7-26 17:44
我是用的默认driver内存512M,SparkPi运行driver端占不了那么大的内存吧,增加到1g也不行。也是同样的错 ...

看你的数据量。内存是一方面,jvm是多少
回复

使用道具 举报

zstu 发表于 2017-7-26 17:53:58
yaojiank 发表于 2017-7-26 17:50
看你的数据量。内存是一方面,jvm是多少

没多大的数据量。写了一个例子
val data = sc.parallelize(Array(1,3),(4,5))
println(data.count)也是报同样的错,那个jvm是多少是指什么?
回复

使用道具 举报

yaojiank 发表于 2017-7-26 17:56:51
zstu 发表于 2017-7-26 17:53
没多大的数据量。写了一个例子
val data = sc.parallelize(Array(1,3),(4,5))
println(data.count)也是 ...

Driver的JVM参数:
-Xmx,-Xms,如果是yarn-client模式,则默认读取spark-env文件中的SPARK_DRIVER_MEMORY值,-Xmx,-Xms值一样大小;如果是yarn-cluster模式,则读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的JVM参数值。
PermSize,如果是yarn-client模式,则是默认读取spark-class文件中的JAVA_OPTS="-XX:MaxPermSize=256m $OUR_JAVA_OPTS"值;如果是yarn-cluster模式,读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的JVM参数值。
GC方式,如果是yarn-client模式,默认读取的是spark-class文件中的JAVA_OPTS;如果是yarn-cluster模式,则读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值。
以上值最后均可被spark-submit工具中的--driver-java-options参数覆盖。
回复

使用道具 举报

zstu 发表于 2017-7-26 18:00:26
yaojiank 发表于 2017-7-26 17:56
Driver的JVM参数:
-Xmx,-Xms,如果是yarn-client模式,则默认读取spark-env文件中的SPARK_DRIVER_MEMO ...

driver设置了1g的。其他的都是默认的。那个spark-class文件是指哪个文件
回复

使用道具 举报

yaojiank 发表于 2017-7-26 18:06:41
zstu 发表于 2017-7-26 18:00
driver设置了1g的。其他的都是默认的。那个spark-class文件是指哪个文件

提交的时候,添加个参数即可。
--driver-java-options
找到源文件麻烦了,而且你也不能改。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条