【问题标题】:spark on yarn java.io.IOException: No FileSystem for scheme: s3n纱线 java.io.IOException 上的火花:方案没有文件系统:s3n
【发布时间】:2018-02-26 18:31:50
【问题描述】:

我的英语很差,对不起,但我真的需要帮助。 我使用spark-2.0.0-bin-hadoop2.7hadoop2.7.3。并从 s3 读取日志,将结果写入本地 hdfs。我可以成功运行火花驱动程序使用独立模式。但是当我在纱线模式下运行相同的驱动程序时。扔了

17/02/10 16:20:16 ERROR ApplicationMaster: User class threw exception: java.io.IOException: No FileSystem for scheme: s3n

hadoop-env.sh我加了

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/tools/lib/*

run hadoop fs -ls s3n://xxx/xxx/xxx, can list files.

我想应该是找不到aws-java-sdk-1.7.4.jar and hadoop-aws-2.7.3.jar

怎么办。

【问题讨论】:

    标签: apache-spark hadoop-yarn


    【解决方案1】:

    我没有使用与您相同的版本,但这里是我的 [spark_path]/conf/spark-defaults.conf 文件的摘录,这是使 s3a 正常工作所必需的:

    # hadoop s3 config
    spark.driver.extraClassPath [path]/guava-16.0.1.jar:[path]/aws-java-sdk-1.7.4.jar:[path]/hadoop-aws-2.7.2.jar
    spark.executor.extraClassPath [path]/guava-16.0.1.jar:[path]/aws-java-sdk-1.7.4.jar:[path]/hadoop-aws-2.7.2.jar
    spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
    spark.hadoop.fs.s3a.access.key  [key]
    spark.hadoop.fs.s3a.secret.key  [key]
    spark.hadoop.fs.s3a.fast.upload true
    

    或者,您可以在作业提交时为 --jars 选项以逗号分隔格式指定 jar 的路径:

    --jars [path]aws-java-sdk-[version].jar,[path]hadoop-aws-[version].‌​‌​jar
    

    注意事项:

    • 确保 jar 文件位于集群中所有节点上的相同位置
    • 将 [path] 替换为您的路径
    • 将 s3a 替换为您的首选协议(上次我检查 s3a 是最好的)
    • 我认为让 s3a 工作不需要番石榴,但我不记得了

    【讨论】:

    • 非常感谢您的回复。但它不能解决问题。我添加驱动程序时添加 aws-java-sdk-[version].jar /hadoop-aws-[version].jar,就像这样: ${base_dir}/spark-2.0.0-bin-hadoop2.7/ bin/spark-submit \ --class com.csloter.xxx \ --master [master] \ --deploy-mode client \ --jars [path]aws-java-sdk-[version].jar:[path] hadoop-aws-[版本].jar --name DRIVERNAME \ ${job_dir}/xxx-statistics_2.11-1.0.jar
    • --jars 选项不是冒号分隔的,而是逗号分隔的,所以试试--jars [path]aws-java-sdk-[version].jar,[path]hadoop-aws-[version].‌​jar
    • 你是对的。我的错。它是 -jars [path]aws-java-sdk-[version].jar,[path]hadoop-aws-[version].‌​jar
    • 没关系。这解决了你的问题吗?
    【解决方案2】:
    1. 将 JAR 与其余的 spark 位粘贴到 SPARK_HOME/lib 中。
    2. spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem 不需要;将自动扫描并提取 JAR。
    3. 不要在 2.7.x 上使用 fast.output.enabled,除非您知道自己在做什么并准备调整一些线程池选项。开始时不使用该选项。

    【讨论】:

    • 我在SPARK_HOME下找不到lib目录,我用的是spark-2.0.0-bin-hadoop2.7,要不要新建一个?
    • 应该有一个 $SPARK_HOME/lib 目录:如果没有,在 spark 2 上,那么可能安装在某个奇怪的地方。无论哪个目录包含 spark-* 和 hadoop-* JAR 以及所有其他 JAR(log4j、jackson、netty、kryo、...),您都应该在其中添加新 JAR
    【解决方案3】:

    将这些罐子添加到$SPARK_HOME/jars:

    ws-java-sdk-1.7.4.jar,hadoop-aws-2.7.3.jar,jackson-annotations-2.7.0.jar,jackson-core-2.7.0.jar,jackson-databind-2.7.0.jar,joda-time-2.9.6.jar
    

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      相关资源
      最近更新 更多