問題解決:spark程序運行過程中,集羣線程過多,異常中斷(Couldn't set up IO streams)

問題場景

spark程序提交之後,運行之後,報錯,報錯提示如下:

Caused by: java.io.IOException: Couldn't set up IO streams
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:826)
        at org.apache.hadoop.ipc.Client$Connection.access$3000(Client.java:396)
        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1557)
        at org.apache.hadoop.ipc.Client.call(Client.java:1480)
        ... 16 more
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:717)
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:819)
        ... 19 more

問題分析

因爲是在Hadoop集羣下跑spark任務,如果被Hadoop RPC創建的線程數目達到節點設置的ulimit -u(可以在節點控制檯輸入ulimit -u查看具體的值)的值,Java就會將這個作爲內存溢出異常

問題解決

在集羣上所有節點增加如下配置:

vi /etc/security/limits.conf
# 新增以下內容,username是要生效的對象
username soft nproc 100000 
username hard nproc 100000  

保存之後,重啓整個集羣每個節點,重啓hadoop集羣即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章