最近跑了一个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任务就可以了
如上,记录完毕.