三角洲湖写工作与java.lang.UnsupportedOperationException失败

学习如何防止. lang。UnsupportedOperationException在三角洲湖编写方式工作。

写的亚当Pavlacka

去年发表在:2022年5月10日

问题

三角洲湖写工作有时失败有以下例外:

. lang。UnsupportedOperationException:方式com.databricks.backend.daemon.data.client.DBFSV1。putIfAbsent(路径:路径、内容:InputStream)。DBFS v1不支持事务从多个集群写道。请升级到DBFS v2。或者你可以禁用多集群写通过设置“spark.databricks.delta.multiClusterWrites.enabled”“假”。如果这是禁用的,写一个表必须来自一个集群。

导致

三角洲湖多集群只支持DBFS v2写道。砖集群使用默认DBFS v2。所有sparkSession对象使用DBFS v2。

然而,如果应用程序使用文件系统API和调用FileSystem.close (),文件系统客户端落回到默认值,这是v1。在这种情况下,三角洲湖多集群写操作失败。

下面的日志跟踪显示文件系统对象回落至默认v1版本。

<日期> <时间> INFO DBFS:初始化DBFS DBFSV1为委托。

解决方案

有两种方法来防止这种情况:

  1. 从不叫FileSystem.close ()在应用程序代码。如果有必要调用close ()API,那么首先实例化一个新的文件系统客户端对象与一个配置对象从当前Apache火花的会话,而不是一个空配置对象:
    % = scala val文件系统文件系统。(新java.net.URI(路径),sparkSession.sessionState.newHadoopConf ())
  2. 另外,这段代码示例实现同样的目标:
    % = scala val文件系统文件系统。(新java.net.URI(路径),sc.hadoopConfiguration ())


这篇文章有用吗?