spark on yarn运行产生缺jar包错误及解决办法

本文介绍了在Spark on YARN运行时遇到的jar包缺失问题及其解决方法。通过调整执行命令,确保正确提交作业,并展示了正确执行后的结果。同时,指出在Hadoop YARN环境中遇到问题时,应检查job日志以获取详细信息。

1、本地运行出错及解决办法

当运行如下命令时:

./bin/spark-submit \
  --class org.apache.spark.examples.mllib.JavaALS \
  --master local[*] \
  /opt/cloudera/parcels/CDH-5.1.2-1.cdh5.1.2.p0.3/lib/hadoop-yarn/lib/spark-examples_2.10-1.0.0-cdh5.1.2.jar \
  /user/data/netflix_rating 10 10 /user/data/result

会出现如下错误:

Exception in thread "main" java.lang.RuntimeException: java.io.IOException: No FileSystem for scheme: hdfs
        at org.apache.hadoop.mapred.JobConf.getWorkingDirectory(JobConf.java:657)
        at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:389)
        at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:362)
        at org.apache.spark.SparkContext$$anonfun$22.apply(SparkContext.scala:546)
        at org.apache.spark.SparkContext$$anonfun$22.apply(SparkContext.scala:546)
        at org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$1.apply(HadoopRDD.scala:145)
        at org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$1.apply(HadoopRDD.scala:145)
        at scala.Option.map(Option.scala:145)
        at org.apache.spark.rdd.HadoopRDD.getJobConf(HadoopRDD.scala:145)
        at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:168)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
        at scala.Option.getOrElse(Option.scala:120)
        at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
        at org.apache.spark.rdd.MappedRDD.getPartitions(MappedRDD.scala:28)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
        at scala.Option.getOrElse(Option.scala:120)
        at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
        at org.apache.spark.rdd.MappedRDD.getPartitions(MappedRDD.scala:28)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
        at scala.Option.getOrElse(Option.scala:120)
        at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
### 如何在 YARN 上使用 Spark 计算圆周率 #### 提交 Spark 应用程序到 YARN 并计算圆周率 为了在 YARN运行 Spark 来计算圆周率,可以按照以下方式构建 `spark-submit` 命令: 指定要执行的主类为 `org.apache.spark.examples.SparkPi`,这是 Spark 示例应用程序中用于计算 π 的一个示例[^1]。 指定 Spark 应用程序的主节点为 YARN: ```bash --master yarn ``` 提供要提交的应用程序 JAR 文件路径以及版本号,例如对于 Scala 版本 2.12 和 Spark 3.1.3 使用如下命令来指明 JAR 路径: ```bash ${SPARK_HOME}/examples/jars/spark-examples_2.12-3.1.3.jar ``` 设置任务数量作为参数传递给应用,在这个例子中是将整个工作划分为 10 个子任务来进行并行处理: ```bash 10 ``` 完整的 `spark-submit` 命令如下所示: ```bash SPARK_HOME=/export/server/spark \ ${SPARK_HOME}/bin/spark-submit \ --master yarn \ --class org.apache.spark.examples.SparkPi \ ${SPARK_HOME}/examples/jars/spark-examples_2.12-3.1.3.jar \ 10 ``` 上述命令会启动一个基于 YARNSpark 应用实例,并通过分布式的方式估算π值。Driver 进程将在客户端模式下运行于本地机器上[^2]。 当以 Python 编写的 pi.py 实现相同功能时,则不需要显式声明 `--class` 参数,因为默认情况下它会选择文件中的第一个定义好的入口函数;此时只需给出脚本位置即可[^3]: ```bash cd /export/server/spark/bin \ ./spark-submit --master local[*] /export/server/spark/examples/src/main/python/pi.py 10 ``` 注意这里的 `local[*]` 表达式的含义是在单机环境下尽可能多地利用 CPU 核心数去并发执行任务,而如果是针对集群环境则应替换回 `yarn`[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值