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

在将175MB的文件上传到HDFS时遇到卡顿,问题源自10兆带宽的慢速交换机。此外,secondarynamenode出现错误,尽管最终能运行spark-submit,但任务结果仍显示失败。
部署运行你感兴趣的模型镜像
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就可看到结果






您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们参考用户提供的引用内容,用户想了解如何使用spark-submitYARN提交Scala程序。根据引用[2]、[3]、[4]的内容,我们可以整理出提交步骤和关键参数说明。 用户提供的引用中,引用[2]和[3]详细说明了spark-submit的基本语法和常用参数,引用[4]展示了一个具体的提交示例。此外,引用[1]和[5]提供了关于获取applicationId和spark-submit类源码的信息,但用户当前的问题集中在提交方法上,因此我们主要关注提交步骤。 提交Scala程序YARN集群的基本步骤: 1. 确保已经将Scala程序打包成JAR文件(例如使用sbt或maven)。 2. 使用spark-submit脚本提交应用程序,并指定master为yarn,同时选择deploy-mode(cluster或client)。 3. 设置必要的参数,如主类(--class)、应用程序名称、内存、核心数等。 4. 指定应用程序JAR的路径以及应用程序所需的参数。 关键参数说明(针对YARN): - `--master yarn`: 指定集群管理器为YARN- `--deploy-mode`: 可以选择`cluster`(推荐,driver运行在集群中)或`client`(driver运行在提交的机器上)。 - `--class`: 指定主类的全限定名(即包含main方法的类)。 - `--name`: 设置应用程序名称(可选,但有助于识别)。 - 资源相关参数:如`--driver-memory`, `--executor-memory`, `--executor-cores`, `--num-executors`等。 具体示例(参考引用[4]): ```bash spark-submit \ --master yarn \ --deploy-mode cluster \ --driver-memory 500m \ --executor-memory 500m \ --executor-cores 1 \ --class com.example.MainClass \ /path/to/your-application.jar \ [application-arguments] ``` 注意:在提交之前,确保Hadoop和Spark的环境变量已正确配置,并且YARN集群运行正常。 另外,根据引用[1],如果需要在提交后获取applicationId,可以在提交时捕捉标准输出并解析特定模式(如“Yarn Application id: ”后面的字符串)来获取,或者通过SparkContext(在程序中)使用`sc.applicationId`获取(但在cluster模式下,程序提交到集群,无法直接获取标准输出,所以通常通过日志或YARN的API来获取)。 因此,我们给出以下完整回答: </think>### 使用 spark-submitYARN提交 Scala 程序的方法 #### **1. 基本语法格式** ```bash spark-submit \ --master yarn \ # 指定YARN集群 --deploy-mode <cluster/client> \ # 部署模式 --class <主类全限定名> \ # Scala主类 --jars <依赖库列表> \ # 额外JAR包(可选) <应用程序JAR路径> \ [应用程序参数] ``` #### **2. 关键参数说明** | 参数 | 作用 | 示例 | |------|------|------| | `--master` | 指定集群管理器 | `yarn` | | `--deploy-mode` | 部署模式(集群/客户端) | `cluster`(Driver在YARN运行) | | `--class` | Scala主类全名 | `com.example.MyApp` | | `--driver-memory` | Driver进程内存 | `1g` | | `--executor-memory` | Executor内存 | `2g` | | `--num-executors` | Executor数量 | `4` | | `--conf` | 自定义Spark配置 | `spark.serializer=org.apache.spark.serializer.KryoSerializer` | #### **3. 完整提交示例** ```bash spark-submit \ --master yarn \ --deploy-mode cluster \ # 推荐生产环境使用cluster模式 --driver-memory 2g \ --executor-memory 4g \ --num-executors 5 \ --executor-cores 2 \ --class com.data.MyETLApp \ # 自定义主类名 --jars /lib/dependency1.jar,/lib/dependency2.jar \ /apps/my-spark-app.jar \ # 应用程序JAR路径 input_path=hdfs:///data/input output_path=hdfs:///data/output # 程序参数 ``` #### **4. 验证提交结果** - **查看ApplicationId**: ```scala // 在Spark代码中获取 val appId = spark.sparkContext.applicationId ``` 或在提交后解析日志(引用[1]): ```bash grep "Yarn Application id" spark-submit.log ``` - **监控应用**: 访问YARN Web UI:`http://<yarn-resourcemanager>:8088` #### **5. 注意事项** 1. **JAR包准备**:需提前用`sbt assembly`或`mvn package`打包含依赖的JAR 2. **客户端配置**:确保`HADOOP_CONF_DIR`或`YARN_CONF_DIR`指向正确配置 3. **资源超限处理**:若遇资源不足错误,需调整`--queue`指定YARN队列或增加资源参数 4. **日志定位**:Cluster模式下日志需通过YARN命令查看: ```bash yarn logs -applicationId <your_application_id> ``` > 参考示例:提交词频统计程序(引用[4]修改) > ```bash > spark-submit --master yarn --deploy-mode cluster \ > --class com.bigdata.WordCount \ > --executor-cores 2 \ > /jobs/spark-wc.jar \ > hdfs:///input.txt hdfs:///output > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值