spark-submit到yarn上遇到的各种坑

来源:互联网 发布:注射死刑 知乎 编辑:程序博客网 时间:2024/06/05 00:49
spark-submit到yarn上遇到的各种坑

1、

对于sbt package

稍微搬动了code的位置,又要重新下载lib,所以不要移动代码位置。
后面没有搬动code,就没重新下载库了,而且每次package速度很快,1秒左右
2、

175MB大小的文件上传到hdfs一直卡住,思考原因:

权限问题?路径问题?磁盘容量问题?
后来就上传一个3KB的文件,边上传边google
发现有这样的消息:
一般hadoop集群的瓶颈都在网络方面。hadoop集群用百兆网卡你在逗我。。。另外交换机也得是千兆的
链接为:https://www.zhihu.com/question/21588815

所以,猜测交换机太慢,果然,这个交换机10兆的带宽,神坑

不得不吐槽,选科研project前好好考察设备比较好。

3KB的文件不到5s就上传好了
开始测试175MB上传时间
14:16开始cp, 耗时30分钟才好,terminal一直没结果
于是申请千兆交换机,和千兆网线
申请到的千兆网线很短
换了根线后,几秒钟就传好了
3、

对于secondarynamenode报错

关键报错信息为:inconsistent check point
看来又是冲突问题,于是我就把dfs下namesecondary/current下的删光了
就没报错了


4、spark-submit还是不成功,可以运行了,但是运行结果是fail

这个程序是quick-start上的
单机模式下可以跑
直接sbt肯定失败
因为需要RDD变换和schedule
为什么到yarn上就失败了
而且查hadoop日志也没发现ERROR
在yarn上的时候,记得export HADOOP_CONF_DIR=$HADOOP_HOME/env/hadoop,但echo发现也有了
例子也跑过了,但例子都是单机的,即local的,没具体讲yarn上的指令是什么,各个参数哪些是必须加上的,又必须给多少


最后发现还有其他的日志,web端有日志
web端记录了stderr和stdout看到error了
然后说file not exist,任务被slave1执行
因为代码给的是本地文件,必然没有权限跨电脑访问,所以以后一定要注意这点,都传到hdfs上再去处理
补充资料:
http://qindongliang.iteye.com/blog/2038096
http://www.iteblog.com/archives/896
链接为:http://www.iteblog.com/archives/1353
如果是YARN模式,最简单地收集日志的方式是使用YARN的日志收集工具(yarn logs -applicationId ),这个工具可以收集你应用程序相关的运行日志,但是这个工具是有限制的:应用程序必须运行完,因为YARN必须首先聚合这些日志;而且你必须开启日志聚合功能(yarn.log-aggregation-enable,在默认情况下,这个参数是false)
不得不说看日志是万能的办法
试一下直接hdfs
通过hadoop下的bin中的hdfs
./hdfs dfs -copyFromLocal /home/spark/workspace/spark-1.5.2/lib/spark-assembly-1.5.2-hadoop2.6.0.jar /user/spark/spark-assembly.jar 
不得不说 提前上传好很多,因为每次在spark上跑jar都要上传这个文件的
之后spark-submit的时候,通过--conf spark.yarn.jar=hdfs:///user/spark/spark-assembly.jar来避免每次执行都要重新upload一下
然后web端的日志就报错了
web的地址为master:8088/cluster
点击刚刚运行的任务的ID后,点击logs,在stderr中可以看到错误,在stdout中可以看到输出结果
报错是
16/01/28 18:49:40 ERROR yarn.ApplicationMaster: User class threw exception: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/home/spark/Desktop/test
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/home/spark/Desktop/test
而这个任务被slave1执行了
才想起来,文件在master上,slave1怎么会找到
于是传到hdfs上后,再spark-submit或者直接scp test到slave1的桌面,然后spark-submit

然后在web端的stdout就可看到结果






0 0