brew 安装了 apache-spark 无法访问 s3 文件

brew installed apache-spark unable to access s3 files

brew install apache-spark 之后,spark-shell 中的 sc.textFile("s3n://...") 失败并返回 java.io.IOException: No FileSystem for scheme: s3n。在通过使用 spark-ec2 启动的 EC2 计算机访问的 spark-shell 中,情况并非如此。 homebrew 公式似乎是使用足够晚的 Hadoop 版本构建的,无论 brew install hadoop 是否先 运行 都会抛出此错误。

如何使用自制程序安装 spark 以便它能够读取 s3n:// 文件?

Hadoop 2.6 默认不启用 S3 文件系统。 因此,使用 hadoop2.6 构建的 Spark 版本也没有任何基于 S3 的 fs 可用。可能的解决方案:

  • 解决方案 1. 使用 Hadoop 2.4 构建的 Spark(只需将文件名更改为 "spark-1.5.1-bin-hadoop2.4.tgz" 并更新 sha256),s3n:// fs 即可。

  • 解决方案 2. 启用 s3n:// 文件系统。 启动spark时指定--conf spark.hadoop.fs.s3n.impl=org.apache.hadoop.fs.s3native.NativeS3FileSystem选项-shell.

    您还应该设置所需库的路径:--conf spark.driver.extraClassPath=<path>/* --conf spark.executor.extraClassPath=<path>/* 其中 <path> 是包含 hadoop-awsaws-java-sdk-1.7.4guava-11.0.2 jar 的目录。

  • 解决方案 3. 使用较新的 s3a:// 文件系统。它默认启用。还应设置所需库的路径。

注意1:选项也可以在conf/spark-defaults.conf文件中设置,所以你不需要每次都提供--conf,阅读 guide.

注意 2: 您可以将 <path> 指向 Hadoop 2.6+ 发行版中的 share/hadoop/tools/lib 目录(s3a 需要 Hadoop 2.7+ 的库)或获取 required来自 Maven Central (1, 2, 3).

的库

注意 3: 在环境变量、~/.aws/config 文件或 --conf spark.hadoop.fs.s3n.awsAccessKeyId= --conf spark.hadoop.fs.s3n.awsSecretAccessKey= 中为 s3n 提供凭据。

s3a 需要 --conf spark.hadoop.fs.s3a.access.key= --conf spark.hadoop.fs.s3a.secret.key= 选项(无环境变量或 .aws 文件)。

注4:s3://可以设置为s3n(--conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3native.NativeS3FileSystem)或s3a(--conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem)的别名。