Spark版本2.1 Hadoop 2.7.3 我有一个spark工作,只有1个阶段和100个分区,我的应用程序本身不会创建任何线程。但在我提交之后
spark-submit --class xxx --master yarn --deploy-mode cluster --driver-memory 4g --executor-memory 1g --num-executors 7 --executor-core 1 ./my.jar
我在每台服务器上发现它使用了大约400个线程,为什么要使用这么多线程?群集有6台服务器。所以其中一个服务器获得2个执行器,并且在spark过程中使用大约800个线程。当我实际运行这个。在系统使用32,000个线程后,我给了它很多内核并得到“无法创建本机线程”错误,这是系统ulimit
设置的限制。即使我可以分配更少的核心并绕过这个错误,使用这么多线程无论如何都不会有效,有人可以提供一些提示吗?
更新。
这是与hbase的连接导致问题,而不是使用这些线程的火花。
答案 0 :(得分:0)
检查conf目录中的调度程序XML配置
如果没有设置池,请尝试设置池
sc.setLocalProperty("spark.scheduler.pool", "test")
配置以下值
<pool name="test">
<schedulingMode>FAIR</schedulingMode>
<weight>1</weight>
<minShare>2</minShare>
</pool>