在集群 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 数据库不应该自动创建吗?可以关闭支票吗?还是错误被抑制?
我从一家公司知道,用于 B2B 非生产订阅的 50,000 个 DBU 可能需要大约 44,000 美元。反过来,在 Databricks 官方定价页面,最优质层的成本为 0.55 美元/DBU(每 50k DBU 27,500 美元)。
您能否解释一下 B2B 订阅 DBU 和官方页面 Data Analytics Pemium SKU DBU 之间的区别?
为什么价格相差如此之大?除了支持/fastrack 之外还有什么(作为 B2B 的一部分)吗?
希望你不需要发布私人信息来回答我的问题。但我需要了解主要原因,以便能够为未来的项目计划成本。
Databricks B2B 订阅不为您提供不同使用层(轻/工程/分析)的选择。相反,每个捆绑包(DBU 量)都有一个选项(价格)。该选项比最昂贵的 Analytics 层要贵得多。
我正在将事实表和维度表从 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
我正在尝试将 MS Azure databricks 与数据湖存储 v2 连接,但无法匹配客户端、秘密范围和密钥。
我在 Azure 数据湖 v2 中有数据。我正在尝试遵循以下说明:
我创建了一个“服务原则”,角色为“存储 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?
我已启用 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,但这也没有帮助
我正在 Databricks 集群中执行 Spark 作业。我通过 Azure 数据工厂管道触发该作业,它以 15 分钟的间隔执行,因此在它successful execution of three or four times失败并抛出异常之后"java.lang.OutOfMemoryError: GC overhead limit exceeded"。虽然上述问题有很多答案,但在大多数情况下,他们的作业没有运行,但在我的情况下,在成功执行一些先前的作业后,它会失败。我的数据大小仅不到 20 MB。
所以我的问题是我应该在服务器配置中进行哪些更改。如果问题出在我的代码上,那么为什么它大多数时候都能成功。请给我建议并提出解决方案。
我使用以下代码将数据帧数据直接插入到 databricks 增量表中:
eventDataFrame.write.format("delta").mode("append").option("inferSchema","true").insertInto("some delta table"))
Run Code Online (Sandbox Code Playgroud)
但是,如果创建 detla 表的列顺序与数据帧列顺序不同,则值会变得混乱,然后不会写入正确的列。如何维持秩序?是否有标准方法/最佳实践来做到这一点?
我正在做一个相当大的项目。我需要使用 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) 我正在尝试使用文档提供的示例代码将 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) 我尝试使用 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?
azure-databricks ×10
databricks ×5
apache-spark ×4
azure ×3
dataframe ×1
dbutils ×1
delta-lake ×1
jackson ×1
maven ×1
oauth-2.0 ×1
pyspark ×1
python ×1
scala ×1