问题
三角洲湖写作业时有故障,但有下列例外:
java.lang.UnsupportedOperationException: com.databricks.backend.daemon.data.client.DBFSV1.putIfAbsent(path: Path, content: InputStream).DBFSv1不支持多集群事务写作请升级到DBFSv2多集群文集设置databricks.delta.mlclusterWrites.如果禁用,写入单表必须发自单聚类
因果
三角湖多集群写作仅用DBFSv2支持databricks集群默认使用DBFSv2全部sparkSession对象使用DBFS v2
但是,如果应用使用文件系统API调用FileSystem.close()文件系统客户端返回默认值,即v1三角洲湖多集群写操作失败
下日志迹显示文件系统对象返回默认v1版本
求解
有两种方法预防这种情况:
- 永不调用FileSystem.close()内程序代码需要调用关闭API后先即时换新文件系统客户对象配置对象当前Apachespark会话,而不是空配置对象
scala val文件System=FileSystem.get
- 或选择本代码样本实现相同目标
scalaval文件System=FileSystem.get