1. 程式人生 > >記一次spark任務調優過程

記一次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任務就可以了

如上,記錄完畢.