【问题标题】:Broadcasting TypeSafe Config throws exception User class threw exception: java.io.UTFDataFormatException: encoded string too long: 70601 bytes?广播 TypeSafe Config 抛出异常用户类抛出异常:java.io.UTFDataFormatException:编码字符串太长:70601 字节?
【发布时间】:2019-11-09 00:17:06
【问题描述】:

正如问题标题所说,我正在尝试将 TypeSafe 配置广播给执行程序,以便我的代码可以访问该配置。不幸的是,我遇到了一个例外

object AppConfigUtility {

  var config: Config = ConfigFactory.empty()

  var brConfig: Broadcast[Config] = _

  /**
    * Broadcast the config so it can be available for executors to use
    * @param sc
    */
  def broadCastConfig(sc: SparkContext): Unit = {

    brConfig = sc.broadcast(config)

  }

  def loadConfig(): Unit = {
    //some actual implementation of loading my application.conf file
  }
}

当我在 main 方法中调用 broadCastConfig 时,它会抛出以下异常

用户类抛出异常:java.io.UTFDataFormatException:编码字符串太长:70601字节

我的 application.conf 的最终大小仅为 3KB 或 3000 字节,这与 64KB 的限制相差无几,所以我不是遇到此错误的原因。

【问题讨论】:

  • application.conf 太大?能给个样品吗?

标签: scala apache-spark spark-streaming


【解决方案1】:

似乎您在application.conf 中有长字符串,这导致了问题..

this :64KB String limit in Java data streams 为例,您可以证明这一点。

public static void main(String[] args) throws Exception {
    // generate string longer than 64KB
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10000; i++)
        sb.append("1234567890");
    String s = sb.toString();

    // write the string into the stream
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    dos.writeUTF(s);
    dos.close();
}

解决了类似但不同的问题here

我建议解析 application.conf 并将其设置为一个对象,然后使用广播将其发送给所有执行程序。

意思是..你可以发送任何可序列化的对象来广播...但是是application.conf的形式

【讨论】:

  • 我实际上只是检查了一下,我的 application.conf 的最终大小只有 3KB 或 3000 字节,这与 64KB 的限制相差无几
  • 有我们所说的症状......请尝试广播解析对象的其他方式而不是直接配置文件
  • 已接受,但您的答案的第一部分具有误导性。请参阅我的评论,其中我提到我的整个配置小于 3KB,并且小于 64KB 的限制。但是,将配置解析为对象 + 广播确实有效。我没有解析整个配置,因为我需要它的不需要整个配置,但它仍然可以解决这个问题。
  • alex : 如果您发布 application.conf 完整列表,将尝试复制/证明相同
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多