在 Amazon EMR 上设置 Spark 类路径

Setting Spark Classpath on Amazon EMR

我正在尝试 运行 使用 Hadoop 2.4 和 Spark 1.3.1 在 EMR (AMI 3.6) 上执行一些简单的作业。我在没有 bootstrap 脚本的情况下手动安装了 Spark。目前我正在尝试读取和处理来自 S3 的数据,但似乎我在 class 路径上遗漏了无数个罐子。

运行 spark-shell 命令。开始 shell 使用:

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

运行 在 shell 上的命令:

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

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

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

您似乎没有从 spark-shell.

中导入正确的库

这样做:

import path.to.Class

或者如果你想导入 RDD class 更有可能,按说:

import org.apache.spark.rdd.RDD

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

install-spark 和 install-spark-script.py 文件包含将 jar 复制到 SPARK_CLASSPATH 变量使用的新 'classpath' 目录的逻辑(spark-env.sh).

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