brew install apache-spark
后,sc.textFile("s3n://...")
中的spark-shell
与java.io.IOException: No FileSystem for scheme: s3n
失败。 spark-shell
通过使用spark-ec2
启动的EC2计算机访问的情况并非如此。 homebrew公式似乎是使用足够晚的Hadoop版本构建的,无论brew install hadoop
是否已先运行,都会抛出此错误。
如何使用自制软件安装spark,以便能够阅读s3n://
个文件?
答案 0 :(得分:3)
默认情况下,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将起作用。< / p>
解决方案2.启用s3n:// filesystem。
启动spark-shell时指定--conf spark.hadoop.fs.s3n.impl=org.apache.hadoop.fs.s3native.NativeS3FileSystem
选项。
此外,您应该设置所需库的路径:--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
提供它们,请阅读{{3 }}
注2:您可以在Hadoop 2.6+发行版中指向<path>
到share / hadoop / tools / lib目录(s3a需要Hadoop 2.7+中的库)或从Maven获取所需的库中心(guide,1,2)。
注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
)的别名。