我正尝试使用hadoop 2.7.2和AllXIO从AWS上的spark 2.1.0独立集群连接到redshift,这给我带来了以下错误:线程“main”java.lang.nosuchmethoderror:com.amazonaws.services.s3.transfer.transferManager
据我所知问题在于:
关于Amazon SDK依赖项的说明:这个库声明了对AWS Java SDK组件的一个提供的依赖项。在大多数情况下,这些库将由您的部署环境提供。但是,如果您获得了Amazon SDK类的ClassNotFoundExceptions,那么您将需要添加对com.amazonaws.aws-java-sdk-core和com.amazonaws.aws-java-sdk-S3的显式依赖,作为构建/运行时配置的一部分。有关更多详细信息,请参阅Project/sparkredShiftBuild.scala中的注释。
正如在spark-redshift-databricks中所描述的,我已经尝试了所有可能的类路径jar组合,并且出现了相同的错误。我的spark submit(我放置所有罐子的地方)如下所示:
/usr/local/spark/bin/spark-submit--class com.xx.xx.app.test--驱动程序-内存2g--总计-executor-cores 40--详细--jars/home/ubuntu/aws-java-sdk-S3-1.11.79.jar,/home/ubuntu/aws-java-sdk-core-1.11.79.jar,/home/ubuntu/postgresql-9.4.1207.jar,/home/ubuntu/aluxio-1.3.0-spark-client-jar-with-dependencies.jar,/usr/local/aluxio/core/client/target/aluxio-core-client-1.3.0-jar-with-dependencies.jar--master spark://xxx.eu-west-1.compute.internal:7077--executor-memory 4G/home/ubuntu/qae.jar qa xxx.eu-west-1.compute.amazonaws.com 100--num-executors 10--conf spark.executor.extraclasspath=/home/ubuntu/aws-java-sdk-S3-1.11.79.jar:/home/ubuntu/aws-java-sdk-core-1.11.79.jar--驱动程序-class-path/home/ubuntu/aws-java-sdk-S3-1.11.79.jar-sdk-core-1.11.79.jar:/home/ubuntu/postgresql-9.4.1207.jar--驱动程序库-path/home/ubuntu/aws-java-sdk-s3-1.11.79.jar:/home/ubuntu/aws-java-sdk-core-1.11.79.jar--驱动程序库-path.com.amazonaws.aws-java-sdk-s3:com.amazonaws.aws-java-sdk-core.jar--包数据库:spark-redshift2.11:3.0.0-preview1,com.amazonaws:aws-java-sdk-S3:1.11.79,com.amazonaws:aws-java-sdk-core:1.11.79
我的built.sbt:
libraryDependencies += "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.4"
libraryDependencies += "com.amazonaws" % "aws-java-sdk-core" % "1.11.79"
libraryDependencies += "com.amazonaws" % "aws-java-sdk-s3" % "1.11.79"
libraryDependencies += "org.apache.avro" % "avro-mapred" % "1.8.1"
libraryDependencies += "com.amazonaws" % "aws-java-sdk-redshift" % "1.11.78"
libraryDependencies += "com.databricks" % "spark-redshift_2.11" % "3.0.0-preview1"
libraryDependencies += "org.alluxio" % "alluxio-core-client" % "1.3.0"
libraryDependencies += "com.taxis99" %% "awsscala" % "0.7.3"
libraryDependencies += "org.apache.hadoop" % "hadoop-aws" % "2.7.3"
libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion
libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion
libraryDependencies += "org.apache.spark" %% "spark-mllib" % sparkVersion
代码只需从postgresql读取并写入RedShift:
val df = spark.read.jdbc(url_read,"public.test", prop).as[Schema.Message.Raw]
.filter("message != ''")
.filter("from_id >= 0")
.limit(100)
df.write
.format("com.databricks.spark.redshift")
.option("url", "jdbc:redshift://test.XXX.redshift.amazonaws.com:5439/test?user=test&password=testXXXXX")
.option("dbtable", "table_test")
.option("tempdir", "s3a://redshift_logs/")
.option("forward_spark_s3_credentials", "true")
.option("tempformat", "CSV")
.option("jdbcdriver", "com.amazon.redshift.jdbc42.Driver")
.mode(SaveMode.Overwrite)
.save()
我也在/home/ubuntu/下列出了所有集群节点上的jar文件。
有人了解如何在Spark中添加对com.amazonaws.aws-java-sdk-core和com.amazonaws.aws-java-sdk-S3的显式依赖关系作为构建/运行时配置的一部分吗?或者是JAR本身的问题:我是否使用了错误的1.11.80版本或者...79等?我需要从build.sbt中排除这些库吗?将hadoop改为2.8会解决这个问题吗?
以下是我基于的有用链接:使用Sparkere进行依赖管理,将JAR添加到Spark作业-spark-submit
Amazon倾向于以足够快的速度更改其库的API,以至于所有的hadoop-aws.jar版本都需要与AWS SDK同步;对于Hadoop 2.7.x,这是SDK的V1.7.4。照目前的情况,您可能不会让redshift和s3a共存,尽管您可以继续使用较旧的s3n URL。
只有在Hadoop>2.8升级到1.11.45时,更新到较新的SDK才会出现。为什么这么耽搁?因为这会迫使Jackson进行更新,最终破坏下游的所有内容。
欢迎来到可传递依赖JAR地狱的世界,让我们都希望java9能够解决这个问题--尽管它需要有人(你?)添加所有相关模块声明
我正在尝试读取多个s3目录(每个目录将有多个文件在其中)使用Spark的读取csv方法,但我得到了错误,因为s3路径有一些非法字符的。我已经检查了相关的问题,但没有看到Java的解决方案。无法为Java实现相同的解决方案。 但在运行时,它将整个字符串(scanResultFolder)视为单个路径并给出错误。 请建议我实现此功能的正确方法。
对于运行在YARN (yarn-client)上的Spark作业,可以用位于HDFS的jar指定类路径吗 这有点像使用Map Reduce jobs:
首先,我不完全确定这是正确的问题。基本上,我的最终目标是生成一个可以操作一组。docx文件的程序,以便对每个文件进行小的更改。在我看来,docx4j是实现这一目标的最佳方式。但是,我从来没有使用过提供的库之外的库。我首先试图破译手册中提供的所有信息,然后告诉我需要SLF4J才能使用Docx4J。 从这一点来看,我想我做错了什么。我很确定我知道我想写的程序背后的伪逻辑,但我不确定如何写它。我还没有做
Amazon Redshift是云中完全托管的数据仓库服务。 它的数据集范围从100千兆字节到1千兆字节。 创建数据仓库的初始过程是启动一组称为nodes的计算资源,这些计算资源被组织成称为cluster 。 之后,您可以处理您的查询。 如何设置Amazon Redshift? 以下是设置Amazon Redshift的步骤。 Step 1 - 使用以下步骤登录并启动Redshift群集。 登录A
我与日志库有冲突,但我不知道什么和在哪里排除。 这是我的POM: 错误: SLF4J:类路径包含多个SLF4J绑定。slf4j:在[jar:file:/c:/apache-cxf-3.3.4/lib/slf4j-jdk14-1.7.28.jar!/org/slf4j/impl/staticloggerbinder.class]中找到绑定slf4j:在[jar:file:/c:/users/u967
当我试图运行我的项目时,我得到了标题中发现的错误。我已经阅读了关于此错误的其他线程,并找到了一个解决方案,该解决方案消除了该错误,但杀死了我所有的日志记录。 线程“main”java.lang.IllegalArgumentException中的异常:LoggerFactory不是LoggerContext,但Logback位于类路径上。删除Logback或竞争实现(类org.slf4j.impl