有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Apache Flink与Hadoop 2.8.0一起使用,用于S3A路径式访问

我正在尝试使用S3后端和自定义端点。但是,hadoop不支持它-aws@2.7.3,我需要使用至少2.8.0版本。underyling的原因是请求被发送如下

DEBUG [main] (AmazonHttpClient.java:337) - Sending Request: HEAD http://mustafa.localhost:9000 / Headers: 

因为fs.s3a.path.style.acces"在旧版本中无法识别。我希望域保持不变,将bucket名称追加到路径(http://localhost:9000/mustafa/...

我不能盲目地将aws-java-sdk版本增加到最新版本,这会导致:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.ClientConfiguration
    at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:182)

因此,如果我将hadoop-aws增加到2.8.0与最新的客户机,它会导致以下错误:

根据,我需要hadoop-aws@2.7.2 https://ci.apache.org/projects/flink/flink-docs-release-1.3/setup/aws.html#provide-s3-filesystem-dependency

Caused by: java.lang.IllegalAccessError: tried to access method org.apache.hadoop.metrics2.lib.MutableCounterLong.<init>(Lorg/apache/hadoop/metrics2/MetricsInfo;J)V from class org.apache.hadoop.fs.s3a.S3AInstrumentation
    at org.apache.hadoop.fs.s3a.S3AInstrumentation.streamCounter(S3AInstrumentation.java:194)

我应该以某种方式把hadoop-common排除在弗林克之外吗?使用mvn clean install -DskipTests -Dhadoop.version=2.8.0从源代码构建flink是可行的,但我希望尽可能通过maven来管理它


共 (1) 个答案

  1. # 1 楼答案

    1. 不要尝试混用Hadoop JAR,它不会起作用,所有支持JIRAs的都会被拒绝
    2. 在maven中,您可以尝试从flink导入中排除Hadoop 2.7依赖项,然后显式地引入Hadoop客户端、Hadoop aws。。。我没有flink的设置,但这里有一个one for Spark的设计,可以让我将Hadoop 3.0测试版与Spark 2.2混合,不包括Spark的Hadoop内容,以及Hadoop的所有jackson和jetty部分。是的,很痛,但这是我唯一能完全控制自己最终结果的方法
    3. 不知道flink snapshot,这取决于它是用什么构建的。在邮件列表上询问