Apache Flink使用Hadoop 2.8.0进行S3A路径样式访问

时间:2017-07-11 08:56:39

标签: java maven amazon-web-services amazon-s3 apache-flink

我正在尝试将S3后端与自定义端点一起使用。但是,hadoop-aws@2.7.3不支持,我需要使用至少2.8.0版本。基础理由是请求按以下方式发送

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

因旧版本无法识别fs.s3a.path.style.acces"。我希望域保持相同,即要在路径(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.2https://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)

我应该以某种方式从Flink中排除hadoop-common吗?使用mvn clean install -DskipTests -Dhadoop.version=2.8.0建立来自源代码的flink,但我希望尽可能通过maven管理它。

1 个答案:

答案 0 :(得分:2)

  1. 不要尝试混合Hadoop JAR,它不会工作,所有支持JIRA都将被拒绝。
  2. 在maven中,您可以尝试从flink导入中排除Hadoop 2.7依赖项,然后明确地引入hadoop-client,hadoop-aws,...我没有设置flink,但这里是{{ 3}}旨在让我在Spark 2.2中混合Hadoop 3.0 beta版本,不包括Spark的hadoop内容,以及hadoop所有的jackson和jetty位。是的,这有点疼,但这是我能够完全控制我最终得到的唯一方式。
  3. 不知道flink-snapshot,它取决于它的构建方式。在邮件列表上询问