【问题标题】:Setting Spark Classpath on Amazon EMR在 Amazon EMR 上设置 Spark 类路径
【发布时间】:2015-06-10 02:56:36
【问题描述】:

我正在尝试使用 Hadoop 2.4 和 Spark 1.3.1 在 EMR (AMI 3.6) 上运行一些简单的作业。我在没有引导脚本的情况下手动安装了 Spark。目前我正在尝试从 S3 读取和处理数据,但似乎我的类路径上缺少无数的 jar。

在 spark-shell 上运行命令。使用以下方式启动 shell:

spark-shell --jars jar1.jar,jar2.jar...

在 shell 上运行的命令:

val lines = sc.textFile("s3://folder/file.gz")
lines.collect()

错误总是类似于:“找不到类 xyz”。在找到所需的 jar 并将其添加到类路径后,我将再次收到此错误,但错误消息中的类名不同。

是否需要一组 jar 来处理(压缩和未压缩的)S3 文件?

【问题讨论】:

  • 您是如何构建应用程序 jar 的?
  • 没有应用程序 jar。在外壳上运行。
  • 您是否将这些库添加到您的 spark-shell 中?你怎么吃你的火花壳?你能用你正在使用的命令更新吗?
  • 更新为显示启动 spark-shell 的命令
  • 那么当你启动你的shell时你有类似下面的东西吗? SparkContext: Added JAR file:/path/to/jar/jar1.jar at http://host:port/jars/jar1.jar with timestamp 1432826782616

标签: hadoop amazon-s3 apache-spark emr


【解决方案1】:

通过遵循 AWS GitHub 存储库 https://github.com/awslabs/emr-bootstrap-actions/tree/master/spark 中的逻辑,我能够找出我的类路径所需的 jar。

install-spark 和 install-spark-script.py 文件包含将 jar 复制到 SPARK_CLASSPATH 变量 (spark-env.sh) 使用的新“类路径”目录的逻辑。

我个人丢失的 jar 位于 /usr/share/aws/emr/emrfs/lib/ 和 /usr/share/aws/emr/lib/

【讨论】:

  • 我看到这已经过时了,涉及的配置文件还没有超过 emr 主要版本号 3,我们现在是 5。目前为 5.16.0。
【解决方案2】:

您似乎没有从 spark-shell 中导入正确的库。

这样做:

import path.to.Class

如果您想导入 RDD 类,则更有可能:

import org.apache.spark.rdd.RDD

【讨论】:

  • 原来这不是“导入”问题。没有它,我可以从 Cloudera VM 运行它。
猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2018-05-11
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多