記一次spark任務調優過程
最近跑了一個spark任務(邏輯迴歸訓練建模的),資料量是3000多萬左右,在跑的過程中出現了各種錯誤,跑了8h左右,結果還是錯了.最後下載了日誌,分析之後,做了些修改,最終跑成功了,而且只用了0.8h,這裡記錄下:
1.maven打包失敗問題:
我的專案是用maven管理的,在打包時,因為之前的target沒有刪除乾淨,結果導致打包失敗.改用如下命令後成功:
mvn clean install assembly:assembly
2.yarn叢集時間同步問題
叢集主節點與從節點的時間不一致,導致失敗,解決如下:
新建一臺ntp伺服器,該伺服器和yarn全部安裝ntp和ntpdate: yum -y install ntp ntpdate 並開啟服務,開啟開機自啟
service ntpd start, chkconfig ntpd on
a.ntp伺服器配置
vim /etc/ntp.conf(新增如下):
server 210.72.145.44 perfer
restrict 210.72.145.44 nomodify notrap noquery
restrict 202.112.10.36 nomodify notrap noquery
restrict 59.124.169.83 nomodify notrap noquery
server 127.127.1.0
fudge 127.127.1.0 stratum 10
b.叢集機器配置
vim /etc/ntp.conf(新增如下, 192.168.0.111是ntp伺服器ip):
server 192.168.0.111
estrict 192.168.0.111 nomodify notrap noquery
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
c.修改儲存後,重啟ntp服務,再同步時間: ntpdate -u 192.168.0.111, 之後可用date命令檢視叢集機器是否同步.
3.spark任務調優及各種timeout錯誤解決
a.任務提交指令碼修改(新增如下):
--conf spark.shuffle.consolidateFiles=true \
--conf spark.speculation=true \
--conf spark.task.maxFailures=8 \
--conf spark.network.timeout=300 \
--conf spark.yarn.max.executor.failures=100 \
--conf spark.executor.heartbeatInterval=300 \
--conf spark.sql.broadcastTimeout=300 \
也可以在saprk-default.conf裡面新增,不過它是全域性的.如果yarm叢集有多人用的話,還是設定自己的比較好(具體屬性值,可自行百度)
b.叢集全部機器(hadoop 2.6.1)yarn-site.xml修改:
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
儲存後重啟hadoop和yarn
c.spark(2.0.2)全部機器 spark-env.sh修改:
export SPARK_MASTER_IP=master
export SPARK_LOCAL_DIRS=/usr/local/src/spark-2.0.2-bin-hadoop2.6
export SPARK_DRIVER_MEMORY=1G
儲存後重啟saprk
以上修改完畢後,跑spark任務就可以了
如上,記錄完畢.