标签: azure-databricks

Databricks 6.1 初始化 Metastore 连接时没有名为 global_temp 的数据库错误

在集群 6.1(包括 Apache Spark 2.4.4、Scala 2.11)(Azure)上初始化 hive Metastore 连接(第一次将数据帧保存为表)时,我可以看到数据库 global_temp 的运行状况检查失败并显示错误:

20/02/18 12:11:17 INFO HiveUtils: Initializing HiveMetastoreConnection version 0.13.0 using file:
...
20/02/18 12:11:21 INFO HiveMetaStore: 0: get_database: global_temp
20/02/18 12:11:21 INFO audit: ugi=root  ip=unknown-ip-addr  cmd=get_database: global_temp   
20/02/18 12:11:21 ERROR RetryingHMSHandler: NoSuchObjectException(message:There is no database named global_temp)
    at org.apache.hadoop.hive.metastore.ObjectStore.getMDatabase(ObjectStore.java:487)
    at org.apache.hadoop.hive.metastore.ObjectStore.getDatabase(ObjectStore.java:498)
...
    at org.apache.spark.sql.DataFrameWriter.saveAsTable(DataFrameWriter.scala:430)
...
    at py4j.GatewayConnection.run(GatewayConnection.java:251)
    at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)

这不会导致 python 脚本失败,但会污染日志。

global_temp 数据库不应该自动创建吗?可以关闭支票吗?还是错误被抑制?

azure databricks azure-databricks

6
推荐指数
0
解决办法
1063
查看次数

Azure Databricks 定价:B2B 订阅与官方页面定价

我从一家公司知道,用于 B2B 非生产订阅的 50,000 个 DBU 可能需要大约 44,000 美元。反过来,在 Databricks 官方定价页面,最优质层的成本为 0.55 美元/DBU(每 50k DBU 27,500 美元)。

您能否解释一下 B2B 订阅 DBU 和官方页面 Data Analytics Pemium SKU DBU 之间的区别?

为什么价格相差如此之大?除了支持/fastrack 之外还有什么(作为 B2B 的一部分)吗?

希望你不需要发布私人信息来回答我的问题。但我需要了解主要原因,以便能够为未来的项目计划成本。

UPD

Databricks B2B 订阅为您提供不同使用层(轻/工程/分析)的选择。相反,每个捆绑包(DBU 量)都有一个选项(价格)。该选项比最昂贵的 Analytics 层要贵得多。

databricks azure-databricks

6
推荐指数
1
解决办法
409
查看次数

Azure Data Lake Gen 2 存储中的 Parquet 与 Delta 格式

我正在将事实表和维度表从 SQL Server 导入到 Azure Data Lake Gen 2。

如果我要整理表格以创建对在 Azure Databricks 上运行 ML 模型有用的数据集,我应该将数据保存为“Parquet”还是“Delta”?

存储为 parquet 和 delta 有什么区别?

apache-spark apache-spark-sql azure-data-lake azure-databricks azure-data-lake-gen2

6
推荐指数
3
解决办法
6388
查看次数

将第二代数据湖存储与 databricks 连接

我正在尝试将 MS Azure databricks 与数据湖存储 v2 连接,但无法匹配客户端、秘密范围和密钥。

我在 Azure 数据湖 v2 中有数据。我正在尝试遵循以下说明:

https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html#requirements-azure-data-lake

我创建了一个“服务原则”,角色为“存储 Blob 数据贡献者”,获得

我已经在 Azure Keyvault 和 Databricks 中使用键和值创建了秘密范围

当我尝试下面的代码时,身份验证无法识别秘密范围和密钥。从文档中我不清楚是否有必要使用 Azure Keyvault 或 Databricks 秘密范围。

val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<CLIENT-ID>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "<SCOPE-NAME>", key = "<KEY-VALUE>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/XXXXXXXXXX/oauth2/token")
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供帮助,请告知/确认:

CLIENT-ID 应该是什么:我知道这是来自存储帐户;

应在 Azure Keyvault 或 Databricks 中的何处创建 SCOPE-NAME 和 KEY-VALUE?

azure oauth-2.0 azure-databricks

5
推荐指数
1
解决办法
1万
查看次数

如何处理来自 blob 存储且数据块中路径较长的多个文件?

我已启用 API 管理服务的日志记录,并且日志存储在存储帐户中。现在,我尝试在 Azure Databricks 工作区中处理它们,但在访问这些文件时遇到困难。

问题似乎是自动生成的虚拟文件夹结构如下所示:

/insights-logs-gatewaylogs/resourceId=/SUBSCRIPTIONS/<subscription>/RESOURCEGROUPS/<resource group>/PROVIDERS/MICROSOFT.APIMANAGEMENT/SERVICE/<api service>/y=*/m=*/d=*/h=*/m=00/PT1H.json
Run Code Online (Sandbox Code Playgroud)

我已将insights-logs-gatewaylogs容器安装在下面/mnt/diags,并dbutils.fs.ls('/mnt/diags')正确列出了该resourceId=文件夹,但未dbutils.fs.ls('/mnt/diags/resourceId=')找到声明文件

如果我沿着虚拟文件夹结构创建空标记 blob,我可以列出每个后续级别,但该策略显然会失败,因为路径的最后部分是按年/月/日/小时动态组织的。

例如一个

spark.read.format('json').load("dbfs:/mnt/diags/logs/resourceId=/SUBSCRIPTIONS/<subscription>/RESOURCEGROUPS/<resource group>/PROVIDERS/MICROSOFT.APIMANAGEMENT/SERVICE/<api service>/y=*/m=*/d=*/h=*/m=00/PT1H.json")
Run Code Online (Sandbox Code Playgroud)

此错误的产量:

java.io.FileNotFoundException: File/resourceId=/SUBSCRIPTIONS/<subscription>/RESOURCEGROUPS/<resource group>/PROVIDERS/MICROSOFT.APIMANAGEMENT/SERVICE/<api service>/y=2019 does not exist.
Run Code Online (Sandbox Code Playgroud)

很明显,通配符已经找到了第一年文件夹,但拒绝进一步向下。

我在 Azure 数据工厂中设置了一个复制作业,该作业成功复制同一 Blob 存储帐户中的所有 json Blob 并删除前缀resourceId=/SUBSCRIPTIONS/<subscription>/RESOURCEGROUPS/<resource group>/PROVIDERS/MICROSOFT.APIMANAGEMENT/SERVICE/<api service>(因此根文件夹以年份组件开头),并且可以一路成功访问,而无需创建空标记斑点。

因此,问题似乎与长虚拟文件夹结构有关,该结构大部分为空。

是否有另一种方法可以在 databricks 中处理此类文件夹结构?

更新:我也尝试在安装时提供路径作为安装的一部分source,但这也没有帮助

azure azure-blob-storage azure-databricks

5
推荐指数
1
解决办法
2763
查看次数

Databricks Spark:java.lang.OutOfMemoryError:超出了 GC 开销限制

我正在 Databricks 集群中执行 Spark 作业。我通过 Azure 数据工厂管道触发该作业,它以 15 分钟的间隔执行,因此在它successful execution of three or four times失败并抛出异常之后"java.lang.OutOfMemoryError: GC overhead limit exceeded"。虽然上述问题有很多答案,但在大多数情况下,他们的作业没有运行,但在我的情况下,在成功执行一些先前的作业后,它会失败。我的数据大小仅不到 20 MB。

我的集群配置是: Databricks集群配置

所以我的问题是我应该在服务器配置中进行哪些更改。如果问题出在我的代码上,那么为什么它大多数时候都能成功。请给我建议并提出解决方案。

apache-spark databricks azure-databricks

5
推荐指数
1
解决办法
7262
查看次数

如何在执行 Spark dataframe.write().insertInto("table") 时确保正确的列顺序?

我使用以下代码将数据帧数据直接插入到 databricks 增量表中:

eventDataFrame.write.format("delta").mode("append").option("inferSchema","true").insertInto("some delta table"))
Run Code Online (Sandbox Code Playgroud)

但是,如果创建 detla 表的列顺序与数据帧列顺序不同,则值会变得混乱,然后不会写入正确的列。如何维持秩序?是否有标准方法/最佳实践来做到这一点?

dataframe apache-spark databricks azure-databricks

5
推荐指数
1
解决办法
8428
查看次数

NoSuchMethodError:Databricks 上的 com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.findFormatOverrides

我正在做一个相当大的项目。我需要使用 azure-security-keyvault-secrets,因此我在 pom.xml 文件中添加了以下内容:

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-security-keyvault-secrets</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-identity</artifactId>
            <version>1.0.1</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

当我运行此示例代码时:

object Test {

  def main(args: Array[String]): Unit = {
    // get vault name from system env -> databricks
    val secretClient = new SecretClientBuilder()
      .vaultUrl("https://myVault.vault.azure.net/")
      .credential(new DefaultAzureCredentialBuilder().build())
      .buildClient

    val secret = secretClient.getSecret("AzureAccountName")
    println("===================== " + secret.getValue)
  }

}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

java.lang.NoSuchMethodError: com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.findFormatOverrides(Lcom/fasterxml/jackson/databind/DeserializationContext;Lcom/fasterxml/jackson/databind/BeanProperty;Ljava/lang/Class;)Lcom/fasterxml/jackson/annotation/JsonFormat$Value;
    at com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.createContextual(JSR310DateTimeDeserializerBase.java:79)
    at com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer.createContextual(InstantDeserializer.java:241)
    at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:669)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:430)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:428)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
    at …
Run Code Online (Sandbox Code Playgroud)

scala jackson maven azure-security azure-databricks

5
推荐指数
1
解决办法
6258
查看次数

将 Spark 数据帧写入 Delta Lake

我正在尝试使用文档提供的示例代码将 Spark 数据帧转换为增量格式,但总是收到这个奇怪的错误。您能帮忙或指导一下吗?

df_sdf.write.format("delta").save("/mnt/.../delta/")
Run Code Online (Sandbox Code Playgroud)

错误看起来像:

org.apache.spark.SparkException: Job aborted.

--------------------------------------------------------------------------- Py4JJavaError Traceback (most recent call last) <command-3011941952225495> in <module> ----> 1 df_sdf.write.format("delta").save("/mnt/.../delta/") /databricks/spark/python/pyspark/sql/readwriter.py in save(self, path, format, mode, partitionBy, **options) 737 self._jwrite.save() 738 else: --> 739 self._jwrite.save(path) 740 741 @since(1.4)
/databricks/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py in call(self, *args) 1255 answer = self.gateway_client.send_command(command) 1256 return_value = get_return_value( -> 1257 answer, self.gateway_client, self.target_id, self.name) 1258 1259 for temp_arg in temp_args:

/databricks/spark/python/pyspark/sql/utils.py in deco(a, *kw)
Run Code Online (Sandbox Code Playgroud)

apache-spark pyspark azure-databricks delta-lake

5
推荐指数
2
解决办法
3万
查看次数

检查Databricks中是否存在该路径

我尝试使用 Python 检查 Databricks 中是否存在该路径:

try:
  dirs = dbutils.fs.ls ("/my/path")
  pass
except IOError:
  print("The path does not exist")
Run Code Online (Sandbox Code Playgroud)

如果路径不存在,我希望该except语句执行。except但是,该try语句失败并出现错误,而不是语句:

java.io.FileNotFoundException: GET ...
ErrorMessage=The specified path does not exist.
Run Code Online (Sandbox Code Playgroud)

如何正确捕捉FileNotFoundException

python databricks azure-databricks dbutils

5
推荐指数
1
解决办法
1万
查看次数