我有一个主服务器和两个服务器,每个服务器运行在32 GB的RAM上,我正在读取一个包含大约1800万条记录的csv文件(第一行是列的标题)。
这是我用来运行作业的命令
./spark-submit --master yarn --deploy-mode client --executor-memory 10g <path/to/.py file>
我做了以下
rdd = sc.textFile("<path/to/file>")
h = rdd.first()
header_rdd = rdd.map(lambda l: h in l)
data_rdd = rdd.subtract(header_rdd)
data_rdd.first()
我收到以下错误消息 -
15/10/12 13:52:03 WARN cluster.YarnSchedulerBackend$YarnSchedulerEndpoint: ApplicationMaster has disassociated: 192.168.1.114:51058
15/10/12 13:52:03 WARN cluster.YarnSchedulerBackend$YarnSchedulerEndpoint: ApplicationMaster has disassociated: 192.168.1.114:51058
15/10/12 13:52:03 WARN remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkYarnAM@192.168.1.114:51058] has failed, address is now gated for [5000] ms. Reason: [Disassociated]
15/10/12 13:52:03 ERROR cluster.YarnScheduler: Lost executor 1 on hslave2: remote Rpc client disassociated
15/10/12 13:52:03 INFO scheduler.TaskSetManager: Re-queueing tasks for 1 from TaskSet 3.0
15/10/12 13:52:03 WARN remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkExecutor@hslave2:58555] has failed, address is now gated for [5000] ms. Reason: [Disassociated]
15/10/12 13:52:03 WARN scheduler.TaskSetManager: Lost task 6.6 in stage 3.0 (TID 208, hslave2): ExecutorLostFailure (executor 1 lost)
rdd.subtract()运行时出现此错误。然后,我修改了代码并删除了rdd.subtract()并将其替换为rdd.filter()
修改后的代码 - &gt;
rdd = sc.textFile("<path/to/file>")
h = rdd.first()
data_rdd = rdd.filter(lambda l: h not in l)
但我得到了同样的错误。
有谁知道遗嘱执行人丢失的原因是什么?
是否是因为运行群集的计算机内存不足?
答案 0 :(得分:4)
这不是一个Spark bug本身,但可能与您对Java,Yarn和Spark-config文件的设置有关。
请参阅http://apache-spark-user-list.1001560.n3.nabble.com/Executor-Lost-Failure-td18486.html
您希望增加Java内存,增加akka帧大小,增加akka超时设置等。
尝试以下spark.conf:
spark.master yarn-cluster
spark.yarn.historyServer.address <your cluster url>
spark.eventLog.enabled true
spark.eventLog.dir hdfs://<your history directory>
spark.driver.extraJavaOptions -Xmx20480m -XX:MaxPermSize=2048m -XX:ReservedCodeCacheSize=2048m
spark.checkpointDir hdfs://<your checkpoint directory>
yarn.log-aggregation-enable true
spark.shuffle.service.enabled true
spark.shuffle.service.port 7337
spark.shuffle.consolidateFiles true
spark.sql.parquet.binaryAsString true
spark.speculation false
spark.yarn.maxAppAttempts 1
spark.akka.askTimeout 1000
spark.akka.timeout 1000
spark.akka.frameSize 1000
spark.rdd.compress true
spark.storage.memoryFraction 1
spark.core.connection.ack.wait.timeout 600
spark.driver.maxResultSize 0
spark.task.maxFailures 20
spark.shuffle.io.maxRetries 20
您可能还想在Spark程序中使用多少分区请求,并且您可能希望在RDD中添加一些partitionBy(分区程序)语句,因此您的代码可能是这样的:
myPartitioner = new HashPartitioner(<your number of partitions>)
rdd = sc.textFile("<path/to/file>").partitionBy(myPartitioner)
h = rdd.first()
header_rdd = rdd.map(lambda l: h in l)
data_rdd = rdd.subtract(header_rdd)
data_rdd.first()
最后,您可能需要使用spark-submit命令并添加执行程序数,执行程序内存和驱动程序内存的参数
./spark-submit --master yarn --deploy-mode client --num-executors 100 --driver-memory 20G --executor-memory 10g <path/to/.py file>
答案 1 :(得分:2)
我有一个执行程序丢失错误,因为我正在使用sc.wholeTextFiles()调用,我的一个输入文件很大,为149M。它导致执行程序失败。我不认为149M实际上非常大,但却导致它失败。