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

标签 hadoop amazon-s3 apache-spark homebrew

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.4guava-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(123)获取所需的库。

注意 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/

相关文章:

hadoop - 如何在 Hadoop 2.0.3 alpha 中创建自定义计数器

hadoop - 如何从映射器或化简器内部获取Hadoop任务跟踪器信息

hadoop - 如何增加 hive 中的 reducer ?

java - hdfs java api 导入问题

javascript - 如何从 AWS CloudFront 和 S3 请求 gzip javascript 文件

node.js - 在Node Js中不使用访问 key 和 secret key 将文件上传到S3 Bucket

apache-spark - 从 IntelliJ IDEA Spark 驱动 K8S 集群,无需构建 JAR

java - Apache-spark dataframe 列名称不一致,为什么会发生这种情况?

json - 如何读取无效的 JSON 格式亚马逊 firehose

apache-spark - PySpark3 将 yyyyMMddhhmmss 解析为 TimestampType() 时没有属性 'tzinfo' 错误