在 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
是否首先运行,都会引发此错误。
如何使用 Homebrew 软件安装 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://文件系统。 指定
--conf spark.hadoop.fs.s3n.impl=org.apache.hadoop.fs.s3native.NativeS3FileSystem
启动 spark-shell 时的选项。您还应该设置所需库的路径:
--conf spark.driver.extraClassPath=<path>/* --conf spark.executor.extraClassPath=<path>/*
其中<path>
是hadoop-aws
的目录,aws-java-sdk-1.7.4
和guava-11.0.2
jar 的。解决方案 3. 使用较新的 s3a://文件系统。它默认启用。还应设置所需库的路径。
注意 1: 选项也可以在 conf/spark-defaults.conf 文件中设置,因此您不需要每次都使用 --conf
提供它们, 阅读 guide .
注2:可以点<path>
在 Hadoop 2.6+ 发行版中共享/hadoop/tools/lib 目录(s3a 需要 Hadoop 2.7+ 的库)或从 Maven Central(1、2、3)获取所需的库。
注意 3:在环境变量中为 s3n 提供凭据,~/.aws/config
文件或 --conf spark.hadoop.fs.s3n.awsAccessKeyId= --conf spark.hadoop.fs.s3n.awsSecretAccessKey=
.
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
) 的别名。
关于hadoop - brew 安装了 apache-spark 无法访问 s3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574084/