Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoClassDefFoundError:Spark中的com/amazonaws/services/s3/AmazonS3Client_Java_Apache Spark_Amazon S3_Aws Sdk - Fatal编程技术网

java.lang.NoClassDefFoundError:Spark中的com/amazonaws/services/s3/AmazonS3Client

java.lang.NoClassDefFoundError:Spark中的com/amazonaws/services/s3/AmazonS3Client,java,apache-spark,amazon-s3,aws-sdk,Java,Apache Spark,Amazon S3,Aws Sdk,我有一个java spark进程,我使用- spark submit——类MyClass target/MyJar.jar 这个过程的最后一部分是在本地写入它,然后将它复制到s3,因为它需要有特定的名称(也可以写入s3并在那里进行mv'ed,为了解决错误保持不变的问题) 代码编译并运行,但是当它到达下面的代码段时,我得到了以下错误- java.lang.NoClassDefFoundError:com/amazonaws/services/s3/AmazonS3位于 java.lang.Clas

我有一个java spark进程,我使用- spark submit——类MyClass target/MyJar.jar

这个过程的最后一部分是在本地写入它,然后将它复制到s3,因为它需要有特定的名称(也可以写入s3并在那里进行mv'ed,为了解决错误保持不变的问题)

代码编译并运行,但是当它到达下面的代码段时,我得到了以下错误-

java.lang.NoClassDefFoundError:com/amazonaws/services/s3/AmazonS3位于 java.lang.Class.forName0(本机方法)位于 java.lang.Class.forName(Class.java:348)位于 org.apache.spark.util.Utils$.classForName(Utils.scala:229)位于 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:700) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187) 位于org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212) 位于org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126) 在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)上 收件人:java.lang.ClassNotFoundException: com.amazonaws.services.s3.AmazonS3位于 java.net.URLClassLoader.findClass(URLClassLoader.java:381)位于 loadClass(ClassLoader.java:424)位于 loadClass(ClassLoader.java:357)

public static void saveToS3(数据集df、字符串outputBucket、字符串outputPath)引发IOException{
字符串tmpFile=“temp”+Long.toString(System.nanoTime());
coalesce(1.write().option(“header”,true).csv(tmpFile);
文件目录=新文件(tmpFile);
AmazonS3 s3client=新的AmazonS3客户端();
对于(文件:directory.listFiles()){
if(file.getName().startsWith(“part|”)| | file.getName().endsWith(“csv”)){
putObject(新的PutObjectRequest(outputBucket,getS3path(outputPath),file));
}
delete();
}
directory.delete();
}
我使用以下可能相关的依赖项

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-aws</artifactId>
            <version>2.7.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>servlet-api-2.5</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
您似乎使用的是2014年发布的

,因此它很可能不存在于您的AWS SDK中

代码编译的原因是代码本身不是问题所在,但您的一个依赖项正在尝试使用旧SDK没有的较新版本的S3客户端。换句话说,这不是代码问题,而是依赖关系管理问题。如果您根本不直接使用SDK,那么使用更合适的AWS SDK 1.11.X是安全的,如果您直接使用,那么您必须将代码引导到这一点


通常,spark core模块会指出其对aws版本的依赖性,但我假设它被明确排除在其自身版本之外,因此您可以提供自己的SDK版本供您使用,而不会产生任何冲突,但需要注意的是,如果您使用的依赖性太旧,它只是坏了。

在按摩我的pom文件后,我能够用下面的pom文件和包装到达一个马厩-

mvn干净编译组件:单个

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.group</groupId>
    <artifactId>arifact</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <jdk.version>1.8</jdk.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-aws</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency> <!-- Spark dependency -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.229</version>
        </dependency>
    </dependencies>
    <build>
      <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>2.3.2</version>
                  <configuration>
                      <source>${jdk.version}</source>
                      <target>${jdk.version}</target>
                  </configuration>
              </plugin>
          <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifest>
                          <mainClass>com.group.artifact.MainClass</mainClass>
                      </manifest>
                  </archive>
                  <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
              </configuration>
          </plugin>
      </plugins>
    </build>
</project>

4.0.0
com.group
假象
罐子
1.0-快照
1.8
1.8
1.8
1.8
org.apache.hadoop
hadoop aws
2.8.2
org.apache.spark
spark-core_2.11
2.1.1
org.apache.spark
spark-sql_2.11
2.1.1
亚马逊网站
aws-java-sdk-s3
1.11.229
org.apache.maven.plugins
maven编译器插件
2.3.2
${jdk.version}
${jdk.version}
maven汇编插件
com.group.artifact.MainClass
带有依赖项的jar

运行mvn dependency:tree并发布,看起来您缺少某种依赖项。@Compass补充道,谢谢。如果缺少依赖项,我希望它不会编译。请您提供详细答案。我将依赖项更新为1.11.229,但仍然收到相同的错误。我还从spark中排除了AWS依赖项(尽管它不是spark的一部分),并且没有任何更改。我要指出的是,当我在intellij中运行这段代码时,或者作为独立代码运行,即使使用旧的依赖项,它也能正常工作。当我使用
spark submit
运行它时,它会失败。@TomRon当你使用spark submit时,你的jar是否包含aws依赖项?刚才,在对我的pom文件进行处理后,我能够使它进入可用状态。我将很快发布更新。老实说,我不确定根本原因是什么。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.group</groupId>
    <artifactId>arifact</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <jdk.version>1.8</jdk.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-aws</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency> <!-- Spark dependency -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.229</version>
        </dependency>
    </dependencies>
    <build>
      <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>2.3.2</version>
                  <configuration>
                      <source>${jdk.version}</source>
                      <target>${jdk.version}</target>
                  </configuration>
              </plugin>
          <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifest>
                          <mainClass>com.group.artifact.MainClass</mainClass>
                      </manifest>
                  </archive>
                  <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
              </configuration>
          </plugin>
      </plugins>
    </build>
</project>