azure - Spark 可以写入 Azure Datalake Gen2 吗?

标签 azure apache-spark azure-storage azure-data-lake

除非使用 Databricks,否则似乎不可能使用 Spark 写入 Azure Datalake Gen2。

我使用 jupyteralmond 在本地笔记本中运行 Spark。

我已经导入了hadoop依赖项:

import $ivy.`org.apache.hadoop:hadoop-azure:2.7.7`
import $ivy.`com.microsoft.azure:azure-storage:8.4.0` 

这允许我在尝试将数据帧写入azure时使用wasbs://协议(protocol)

    spark.conf.set(
        "fs.azure.sas.[container].prodeumipsadatadump.blob.core.windows.net", 
        "?sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-09-09T23:33:45Z&st=2019-09-09T15:33:45Z&spr=https&sig=[truncated]")

这就是错误出现的地方:

val data = spark.read.json(spark.createDataset(
  """{"name":"Yin", "age": 25.35,"address":{"city":"Columbus","state":"Ohio"}}""" :: Nil))

data
  .write
  .orc("wasbs://[filesystem]@[datalakegen2storageaccount].blob.core.windows.net/lalalalala")

我们现在遇到“分层​​命名空间帐户尚不支持 Blob API”错误:

org.apache.hadoop.fs.azure.AzureException: com.microsoft.azure.storage.StorageException: Blob API is not yet supported for hierarchical namespace accounts.

那么这确实不可能吗?我是否应该放弃 Datalake gen2 并仅使用常规 blob 存储?微软在创建“数据湖”产品方面确实失败了,但没有为带有 Spark 的连接器创建任何文档。

最佳答案

在 Spark 中使用 ADLS Gen2 非常简单,微软并没有“失败”,就像“ASF Spark 附带的 hadoop 二进制文件不包括 ABFS 客户端”一样。 HD/Insights、Cloudera CDH6.x 等中的那些。

  1. 始终将 hadoop-* JAR 升级到 Hadoop 3.2.1。这意味着所有这些都不会放入后来的 hadoop-azure-3.2.1 JAR 中并期望一切正常。
  2. 使用 abfs://网址
  3. 将客户端配置为 per the docs .

ADLS Gen2 是 Microsoft 部署的最好的对象存储 - 通过分层命名空间,您可以获得 O(1) 目录操作,这对于 Spark 来说意味着高性能任务和作业提交。安全性和权限也很棒。

是的,不幸的是,它无法与您拥有的 Spark 发行版一起使用 - 但 Microsoft 无法为 2017 年发布的一组工件改造新的连接器。您将拥有升级您的依赖项。

关于azure - Spark 可以写入 Azure Datalake Gen2 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57868228/

相关文章:

ios - 我无法将 P12 证书上传到 Azure(iOS 推送通知)

java - Spark : java. lang.NoSuchMethodError : com. google.common.collect.Ordering.leastOf(Ljava/util/Iterator;I)Ljava/util/List

sql-server - Microsoft Azure SQL Server 可以使用 FileTable/Blob 存储吗?

azure - Azure 中可用区的限制

c# - 如何处理 Azure 存储队列中的大消息?

git - Azure git,将 fork 存储库与主同步

azure - Net 6.0 从 appsettings 而不是 local.settings.json 设置 ServiceBusTrigger QueueName 和 Connection

azure - 无法检索subnet_Id - Terraform

apache-spark - 从平均序列预测下一个事件

scala - 字符串相同但行为不同 : File strings don't work with spark if they are from an HDFS file