【问题标题】:Storm: how to define HDFS URI in HdfsBolt() with a HA HDFSStorm:如何使用 HA HDFS 在 HdfsBolt() 中定义 HDFS URI
【发布时间】:2016-04-14 12:05:48
【问题描述】:

我正在尝试使用HdfsBolt 将 Storm 拓扑的输出写入启用 HA 的 HDFS。拓扑定义如下:

// Use pipe as record boundary
RecordFormat format = new DelimitedRecordFormat().withFieldDelimiter("|");
//Synchronize data buffer with the filesystem every 1000 tuples
SyncPolicy syncPolicy = new CountSyncPolicy(1000);
// Rotate data files when they reach five MB
FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(5.0f, FileSizeRotationPolicy.Units.MB);
// Use default, Storm-generated file names
FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPath("/foo");

HdfsBolt hdfsBolt = new HdfsBolt()
      .withFsUrl("hdfs://devhdfs")
      .withFileNameFormat(fileNameFormat)
      .withRecordFormat(format)
      .withRotationPolicy(rotationPolicy)
      .withSyncPolicy(syncPolicy);

问题是HdfsBolt 不知道hdfs://devhdfs 的值并触发java.net.UnknownHostException

Caused by: java.lang.IllegalArgumentException: java.net.UnknownHostException: prehdfs

我有原始的core-site.xml,其中存在该定义,但我不知道如何将其传递给HdfsBolt。有什么提示吗?

【问题讨论】:

    标签: hdfs apache-storm


    【解决方案1】:

    Storm 无法在网络中找到主机“devhdfs”。通过 ping 检查主机是否可用,并检查 hdfsurl 将具有端口“hdfs://devhdfs:port”并通过相同的尝试

    【讨论】:

    • 我不能给它一个主机名,因为它是一个启用了 HA 的 HDFS。如果我给它一个主机名,如果该主机名是活动的 NameNode,它将起作用。
    【解决方案2】:

    似乎将core-site.xmlhdfs-site.xml 放入src/main/resources 是可行的方法:)

    我现在遇到了一些其他问题,但它们似乎与 HA 相关而不是 Storm 相关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多